前因:基于windows系统开发的springboot项目打镜像,需要在windows安装docker toolbox ,即在本地打镜像在推送。不喜欢!!!遂想到了用基于docker容器运行jenkins,进行持续发布打包镜像。理由:简单方便
1.准备工作
a、可运行的springboot项目
b、docker安装完成(在虚拟机上)。请查看这里
2.开始
2.1 搭建jenkins
首先查看jenkins官网,基于docker平台安装,本文使用官网推荐版本
a、下载镜像并启动容器,启动参数1~7,官网均有解释,自己根据需要使用
b、启动成功后访问 http://localhost:8080 注意 8080是容器端口映射到宿主机的端口
打开页面选择:推荐安装和自定义安装
继续:输入密码
查看密码方式两种:1、进入容器,cat 一下截图里的路径
2、查看日志
两张截图都出现里查看密码的路径 /var/jenkins_home/secrets/initialAdminPassword
继续:创建第一个管理员用户,并保存
2.2配置jenkins
创建你的项目工程,并进入点击配置
执行的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、构建