前因:基于windows系统开发的springboot项目打镜像,需要在windows安装docker toolbox ,即在本地打镜像在推送。不喜欢!!!遂想到了用基于docker容器运行jenkins,进行持续发布打包镜像。理由:简单方便

1.准备工作

a、可运行的springboot项目

b、docker安装完成(在虚拟机上)。请查看这里

2.开始

2.1 搭建jenkins

首先查看jenkins官网,基于docker平台安装,本文使用官网推荐版本

springboot dockerfile_spring

a、下载镜像并启动容器,启动参数1~7,官网均有解释,自己根据需要使用

springboot dockerfile_jar_02

b、启动成功后访问 http://localhost:8080    注意 8080是容器端口映射到宿主机的端口

打开页面选择:推荐安装和自定义安装

继续:输入密码

查看密码方式两种:1、进入容器,cat 一下截图里的路径

                                 2、查看日志 

两张截图都出现里查看密码的路径   /var/jenkins_home/secrets/initialAdminPassword

springboot dockerfile_jar_03

springboot dockerfile_jar_04

继续:创建第一个管理员用户,并保存

2.2配置jenkins

springboot dockerfile_jar_05

 

 

springboot dockerfile_spring_06

创建你的项目工程,并进入点击配置

springboot dockerfile_jar_07

 

springboot dockerfile_jar_08

 

 

 

springboot dockerfile_docker_09

执行的shell脚本:

#!/usr/bin/env bash
#!/bin/bash
# 定义远程镜像仓库地址
registry=192.168.2.8:8082
# 定义镜像名称
imagename=springboot-demo
# 当前时间戳
# cur_timestamp=$((`date '+%s'`*1000+`date '+%N'`/1000000))
# 定义 当前格式化日期时间
cur_timestamp=`date '+%Y%m%d-%H%M%S'`


# 定义 容器名称,随便取
containerName=demo
echo "检查容器 ${containerName}"

# 判断容器是在运行
running=$(docker ps --filter="name=$containerName" -q | xargs)
if test $running != ""; then
echo "停止运行当前容器 ${containerName}"
    docker stop $containerName
fi



exist=$(docker ps -a --filter="name=$containerName" -q | xargs)
if test $exist != ""; then
echo "删除当前容器 ${containerName}"
    docker rm $containerName
fi



echo "running..."
# 拉最新的镜像并运行
docker run -d -it --name ${containerName} -p 8123:8123  ${registry}/${imagename}:latest

# 远程推送镜像
echo "增加tag,tag=${cur_timestamp}"
# 将当前镜像版本latest  ,复制一个tag=当前时间的版本号
docker tag ${registry}/${imagename}:latest ${registry}/${imagename}:${cur_timestamp}
# 推远程,该镜像仅作为历史留存版本
docker login $registry -u xxx -p xxx
echo "成功登录-$registry"

echo "远程推送时间版本、latest版本"
docker push ${registry}/${imagename}:latest
docker push ${registry}/${imagename}:${cur_timestamp}

echo "删除本地时间版本镜像"
docker rmi ${registry}/${imagename}:${cur_timestamp}

3、pringboot项目配置pom及dockerfile

3.1 pom.xml配置

<properties>
        <java.version>1.8</java.version>
        <!--<docker.image.prefix>zhangsw</docker.image.prefix>-->
        <docker.registry>
            <!--192.168.2.8:8082-->
            jaswine.top:9950
        </docker.registry>

        <jar>${project.build.finalName}.jar</jar>

    </properties>



    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
                    <plugin>
                        <groupId>com.spotify</groupId>
                        <artifactId>dockerfile-maven-plugin</artifactId>
                        <version>1.4.13</version>
                        <executions>
                            <execution>
                                <id>default</id>
                                <goals>
                                    <goal>build</goal>
                                    <!--加不加没什么卵用-->
                                    <goal>push</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <!--这里指定打包镜像的名称${docker.registry}/${docker.image.prefix}/  -->
                            <repository>${docker.registry}/springboot-demo</repository>
                            <!--每次推至私服都最新的额 不指定tag默认为latest-->
                            <tag>latest</tag>
                            <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                            <buildArgs>
                                <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                            </buildArgs>

                       <dockerfile>Dockerfile</dockerfile>
                        </configuration>
                    </plugin>

        </plugins>
    </build>

3.2 、Dockerfile

 

# CentOS with JDK 8
# centos作为基础镜像
# https://hub.docker.com/_/centos?tab=tags 查询版本 ,不加版本就是最新的版本
FROM registry.cn-shanghai.aliyuncs.com/zhangsw/centos-java:7.4-jdk8u171

# 维护者虚拟机开机黑屏
MAINTAINER  zsw

VOLUME /tmp
# 暴露端口
EXPOSE 8123
# 切换当前目录
WORKDIR /home/
# 创建目录
RUN mkdir zsw
# pom文件里的参数
ARG JAR_FILE

# jenkins打好的包 复制到 容器内,名称随便取
COPY ${JAR_FILE}  demo.jar

#启动上一步复制的jar
ENTRYPOINT ["java","-jar", "./demo.jar"]

4、构建

springboot dockerfile_jar_10

 

 

 

遗留问题:jenkins镜像 时区 是美国的 。