Maven聚合项目jenkins+docker自动化构建发布

环境:linux  安装docker  ,jenkins,maven,java8

首先得有一个maven项目上传到git

Linux下安装docker

Maven聚合项目搭建集成knife4j_aloneTK的博客-CSDN博客

Jenkins的安装步骤(centos7) - 灬百无一用是书生 - 博客园

新建任务

配置git

 

 执行shell

#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/work/glowworm
# 源jar路径  
SOURCE_PATH=/var/lib/jenkins/workspace/glowworm/firefly/target
#容器id
CID=$(docker ps | grep "firefly" | awk '{print $1}')
#jar名字
JAR_NAME=firefly-1.0-SNAPSHOT

IMAGE_NAME=firefly
 
DATE=`date +%Y%m%d%H%M`
 
# 最新构建代码 移动到项目环境
function transfer(){
    echo "最新构建代码 $SOURCE_PATH/$JAR_NAME.jar 迁移至 $BASE_PATH ...."
        sudo cp $SOURCE_PATH/$JAR_NAME.jar $BASE_PATH
    echo "迁移完成"
}
 
# 备份
function backup(){
	if [ -f "$BASE_PATH/$JAR_NAME.jar" ]; then
    	echo "firefly-1.0-SNAPSHOT.jar 备份..."
        	sudo cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/firefly-$DATE.jar
			sleep 3
			sudo rm -rf $BASE_PATH/$JAR_NAME.jar
        echo "备份 $JAR_NAME.jar 完成"
    else
    	echo "$BASE_PATH/$JAR_NAME.jar 不存在,跳过备份"
    fi
}

# 构建docker镜像
function build(){
	echo "开始构建镜像..."
	cd $BASE_PATH
	sudo docker build -t $IMAGE_NAME .
}

# 运行docker容器
function run(){
	backup
	transfer
	build
	if [ -n "$CID" ]; then
		echo "存在firefly容器,CID=$CID,重启docker容器 ..."
			sudo docker stop $CID
			sudo docker rm $CID	
			sudo docker run -d -p 8083:8083 $IMAGE_NAME
		echo "firefly容器重启完成"
	else
		echo "不存在$IMAGE_NAME容器,docker run创建容器..."
			sudo docker run -d -p 8083:8083 $IMAGE_NAME 
		echo "firefly容器创建完成"
	fi
}
 
#入口
run 

根目录下新建/work/glowworm文件夹

glowworm下新建backup备份文件夹

glowworm下新建Dockerfile

#基于openjdk:8
FROM openjdk:8

ADD firefly-1.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'

ENTRYPOINT ["java","-jar","/app.jar"]

然后保存点击立即构建

 构建成功

 打开浏览器访问

 访问成功

这段shell脚本大致流程 

a.备份(/work/glowworm/backup)下jar包

cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/firefly-$DATE.jar

b.项目构建的最新jar包(/root/.jenkins/workspace/docker-test/target/docke-test.jar)移动到项目操作的路径(/work/glowworm)

 cp $SOURCE_PATH/$JAR_NAME.jar $BASE_PATH

c.判断docker镜像是否存在,不存在则进入Dockerfile存放的路径(/work/project)执行docker build操作构建名字为docker-test镜像

cd /work/glowworm
docker build -t firefly .

d.判断docker容器是否存在,不存在则执行docker run命令创建容器,存在则docker restart重启容器

docker run --name firefly -v /work/glowworm/:/work/glowworm/ -d -p 8083:8083 firefly 
docker restart firefly 

docker run参数

   --name docker-test                 容器的名字为docker-test
   -d                                 容器后台运行
   -p 3636:3636                       指定容器映射的端口和主机对应的端口都为3636
   -v /work/glowworm/:/work/glowworm/   将主机的/work/glowworm/目录挂载到容器的/work/glowworm/ 目录中(不可少每次本地更新jar包重启容器即可,不用重新构建镜像)

可以在这里加一行这个,因为我发现每构建一次就会生成几个null的镜像 ,空间占用还大

查出来所有为none的镜像id


docker images | grep none | awk '{print $3}'

 删除所有镜像名为null的镜像 ,不加 -f会报错:Error response from daemon: conflict: unable to delete 8e6aee9da407 (must be forced) - image is referenced in multiple repositories

使用docker images可以看到有多个repository引用了这个image id,所以直接删除image ID会报错

 #删除所有镜像名为null的镜像
sudo docker images | grep none | awk '{print $3}' | xargs docker rmi -f

另外一种方式,dockersfile在项目中定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值