栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间:发布时间: 百科书网 趣学号

环境: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在项目中定义

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/275934.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号