01 引言
本文是一篇笔记,主要记录如下内容:
jenkins
如何把maven
项目构建为jar
包jenkins
然后把jar包构建为docker
镜像jenkins
如何把docker
镜像上传到仓库
下面来讲解一下相关的jenkins
脚本。
02 jenkins打包maven项目
jenkins打包maven项目,其实就是在jenkins服务里面安装maven,然后使用maven命令来打包,命令如下:
mvn clean package -DeskipTests
03 jenkins构建jar包为镜像
3.1 确认编译系统状态
step1: 首先要确认编译系统的状态,命令如下:
docker buildx ls |grep builder0 | grep running || docker buildx inspect --bootstrap
3.2 清理构建缓存
然后清理docker构建缓存,命令如下:
docker buildx prune -a -f && docker builder prune -a -f;
3.3 构造Dockerfile
3.3.1 新建或下载Dockerfile模板
下载Dockerfile
模板并输出到当前文件夹,文件名为:Dockerfile
:
curl https://外网地址/Dockerfile.txt > Dockerfile
当然这里的Dockerfile
模板是从服务器下载的,也可以放到jenkins
服务器里面的一个目录,直接复制过来就可以了。
Dockerfile
模板里面的内容为:
FROM ccr.ccs.tencentyun.com/xxx-base-img/jdk:11.0.11p9-20210917 ENV APP_VERSION __APP___VERSION__ WORKDIR /app ADD https://xxx.cn/logback-spring.xml /app/ ADD https://xxx.cn/apm-agent.jar /app/ ADD https://xxx.cn/pre_exec.sh /app/ COPY __APP___JAR___PATH__ /app/ CMD mkdir -p /app/logs; \ if [ -d pre-exec-shells ];then for n in `ls pre-exec-shells/`;do bash pre-exec-shells/$n;done;fi;\ bash pre_exec.sh;\ mkdir -p /app/logs/${APP_VERSION}-${HOSTNAME}/heap_dump ;\ mkdir -p /app/logs/${APP_VERSION}-${HOSTNAME}/gc ;\ /usr/lib/jvm/java-11-openjdk-amd64/bin/java -server \ -Xmx${MEM_SIZE:-512}m -Xms16m \ -XX:MetaspaceSize=32m \ -XX:MaxMetaspaceSize=256m \ -XX:OnOutOfMemoryError="kill -9 %p" \ -XX:+UnlockExperimentalVMOptions -XX:+UseZGC \ -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath=/app/logs/${APP_VERSION}-${HOSTNAME}/heap_dump/java_heapdump.hprof \ ${EXT_JVM_CMD} \ -Dfile.encoding=UTF-8 \ -Xlog:gc*:file=/app/logs/${APP_VERSION}-${HOSTNAME}/gc/gc.log:time,tags:filecount=10,filesize=102400 \ ${EXT_APM_CMD} \ -jar __APP___JAR___FILENAME__ \ --logging.file=/app/logs/${APP_VERSION}-${HOSTNAME}/ \ --spring.profiles.active=${SPRING_ACTIVE_PROFILE:-dev} \ --swagger.enable=false \ --logging.config=./logback-spring.xml \ ${EXT_APP_CMD}
3.3.2 定义变量名
定义此变量为镜像的命名空间:
img_tag_name=项目/子项目名
定义此变量到对应jar包的相对地址,注意特殊符号要转义:
jar_path=项目\\\/target\\\/xxx.jar
定义此变量为对应jar包的文件名,注意要和jar_path对应的文件名一致
jar_name=xxx.jar
3.3.3 为Dockerfile变量赋值
ver_str=${Version}_`date "+%Y%m%d-%H%M%S"` sed -i "s/__APP___VERSION__/$ver_str/" Dockerfile sed -i "s/__APP___JAR___PATH__/$jar_path/" Dockerfile sed -i "s/__APP___JAR___FILENAME__/$jar_name/" Dockerfile
3.4 打包镜像
打包脚本:
docker buildx prune -a -f && docker builder prune -a -f
4. 推送镜像到仓库
docker buildx build --platform linux/arm64,linux/amd64 --tag ccr.ccs.tencentyun.com/$img_tag_name:$ver_str --push . docker buildx prune -a -f && docker builder prune -a -f
5. Docker远程主机如何运行镜像
可以参考《Docker部署jar包运行》。