Jenkins 打包微服务教程-一个配置文件即可打包所有模块
共计 2136 个字符,预计需要花费 6 分钟才能阅读完成。
一、项目结构
该教程基于文章 Docker 搭建 jenkins 并配置 jdk、maven和node环境,这里默认已经配置好了环境,且微服务项目结构如下:
web-platform
- system
- gateway-service
- admin-service
- monitor
- log-service
二、项目配置
1. General
这里填项目的相关描述、丢弃旧的构建、参数化构建。
/>
丢弃旧的构建让 jenkins 历史构建不会占用很大空间。
/>
参数化构建使这个配置作为通用的配置,可以打包该微服务下所有模块,这里正确填写很重要。
/>
将目标服务器也作为参数,这样可以单独更新一台服务器的程序,同时指定了项目所用 jdk 版本。
/>
2. 源码管理
这里需要配置 gitlab 的源码地址和指定分支(一般为main或者master),并且 Credentials 指定拉项目代码的账号密码,自行添加即可。
/>
3. 构建触发器
这里根据需要配置触发器,根据某些事件触发打包,比如 git push
动作。
/>
4. 构建环境
这里配置构建环境,没有必要配置,根据自己需要。
/>
5. 构建前步骤
maven -pl -am
的意思是在构建指定项目之前,先构建其所有依赖项,并且只构建指定的项目而不是整个多模块项目。选项"-am" 和"-pl" 可以单独使用,也可以组合使用。
/>
6. 项目构建
指定打包所需的 pom 文件,并指定打包命令。
/>
7. 构建后操作
打包镜像
打包后需要将 jar 包做成 docker 镜像。
/>
Dockerfile 内容:
FROM acaiee/alpine-java:cst
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} /app/${JAR_FILE}
# 设置环境变量
ENV TZ="Asia/Shanghai" \
JAR_NAME=/app/${JAR_FILE} \
JAVA_OPTS="\
-Xms128m \
-Xmx512m \
-XX:MetaspaceSize=128m \
-XX:MaxMetaspaceSize=512m"
ENTRYPOINT java ${JAVA_OPTS} -jar ${JAR_NAME}
以下是脚本内容:
## 构建镜像
cd ${module}
serviceName=${module#*/}
## 根据容器内的时间具体决定使用哪个时间
current=$(date +"%Y%m%d-%H%M")
imageName=${serviceName}:${current}
tarName=${serviceName}-${current}.tar
jarFile=$(ls target/ | grep \.jar$)
mv target/${jarFile} .
docker build --build-arg JAR_FILE=${jarFile} -t ${imageName} .
## 保存镜像-保存在 jenkins 主目录下的 images 文件夹
imagesDir=${JENKINS_HOME}/images/$JOB_NAME/${serviceName}
mkdir -p ${imagesDir}
docker save -o ${imagesDir}/${tarName} ${imageName}
cp ${imagesDir}/${tarName} target/${tarName}
## 清理镜像
docker rmi -f $(docker images | grep ${serviceName} |awk 'NR>0 {print $3}')
## tar包保留指定数量
cd ${imagesDir}
retainNumber=3
rm -f $(ls -t | awk "NR>${retainNumber}")
运行镜像
选择目标服务器,并将镜像发送到目标服务器,导入后运行镜像。
/>
以下是脚本内容,docker run
的参数根据需要调整。
#!/bin/bash
cd /tmp/robot-patrol-platform
tarName=$(ls -1t | head -n 1)
imageName=$(docker load -i ${tarName} | cut -d' ' -f3)
containerName=$(echo ${imageName} | cut -d: -f1)
# 删除原来的容器,并新建一个容器
if docker ps | grep "${containerName}" >/dev/null 2>&1; then docker rm -f ${containerName} ; fi
docker run -d --net host --restart=unless-stopped --name ${containerName} ${imageName}
# 删除无用的镜像,只保留最新的镜像
serviceName=${containerName}
if docker images | grep "${serviceName}" >/dev/null 2>&1; then docker rmi -f $(docker images | grep ${serviceName} |awk 'NR>1 {print $3}'); fi
# 删除临时文件
rm -rf /tmp/robot-patrol-platform/${tarName}
可以给目标服务器配置标签,只有标签匹配前面参数化构建传递的参数才会发送到目标服务器。
/>
以上就是微服务打包的完成流程。
提醒:本文发布于712天前,文中所关联的信息可能已发生改变,请知悉!
Tips:清朝云网络工作室