jenkins ci/cd通过容器构建项目
·
一、General 设置
基本信息
- 项目名称:
tc_payment-bak - 启用状态: 已启用 (Enabled)
- 描述: (未填写)
- GitHub 项目: 未勾选
- GitLab 连接: 使用
gitlab连接 - 丢弃旧的构建: 启用
- 策略: Log Rotation
- 保持构建的最大个数: 5
- 保持构建的天数: 未设置(默认不保留)
二、源码管理 (Source Code Management)
Git 配置
- Repository URL:
git@gitlab.dblive.com:dbbj/dbb-java/dbb_payment.git - Credentials:
- 使用凭证:
git (gitlab-ssh)
- 使用凭证:
- Branches to build:
- 指定分支:
refs/heads/feature/dev
- 指定分支:
注:仅构建
feature/dev分支。
三、Triggers(触发器)
| 触发方式 | 是否启用 |
|---|---|
| 触发远程构建 | ❌ |
| 其他工程构建后触发 | ❌ |
| 定时构建 | ❌ |
| Build when a change is pushed to GitLab | ✅ |
- Webhook URL:
https://jenkins-test.dblive.com/project/tc_payment-bak|
| Generic Webhook Trigger | ❌ |
| GitHub hook trigger for GITScm polling | ❌ |
| 轮询 SCM | ❌ |
说明:当代码推送到 GitLab 的
feature/dev分支时,将自动触发构建。
四、Environment(环境设置)
| 选项 | 是否启用 |
|---|---|
| Delete workspace before build starts | ❌ |
| Use secret text(s) or file(s) | ❌ |
| Send files or execute commands over SSH before the build starts | ❌ |
| Send files or execute commands over SSH after the build runs | ❌ |
| Configure Kubernetes CLI (kubectl) | ❌ |
| Inject environment variables to the build process | ❌ |
| Inject passwords to the build as environment variables | ❌ |
| Inspect build log for published build scans | ❌ |
| Setup Kubernetes CLI (kubectl) | ❌ |
| Terminate a build if it’s stuck | ❌ |
| With Ant | ❌ |
| 在构建日志中添加时间戳前缀 | ✅ |
说明:在构建日志中会显示时间戳以方便排查问题。
五、Build Steps(构建步骤)
1. 执行 Shell 脚本
#docker run --rm -w /payment -v /data/jenkinsdata/workspace/tc_payment:/payment \
-v /usr/maven/apache-maven-3.9.9/conf/settings.xml:/root/.m2/settings.xml \
-v ~/.m2/repository:/root/.m2/repository --user root maven:3.9.11-eclipse-temurin-8 sh -c "mvn clean install package"
#ssh -i /root/.ssh/id_rsa root@172.17.2.160 cp -arvp /home/jeepay/service/payment/jeepay-payment.jar /home/jeepay/service/payment/jeepay-payment.jar.${BUILD_TIMESTAMP}
#scp -i /root/.ssh/id_rsa -qpr /data/jenkinsdata/workspace/tc_payment/jeepay-payment/target/jeepay-payment.jar root@172.17.2.160:/home/jeepay/service/payment
#ssh -i /root/.ssh/id_rsa root@172.17.2.160 "systemctl restart tc_payment.service"
步骤解析:
-
使用 Docker 构建 Maven 项目:
- 使用
maven:3.9.11-eclipse-temurin-8镜像。 - 挂载本地工作区、Maven 设置文件和仓库。
- 执行
mvn clean install package编译并打包项目。
- 使用
-
复制旧 JAR 文件(注释):
- 将现有 JAR 备份为带时间戳的新文件名。
-
通过 SCP 上传新 JAR 包:
- 将构建生成的
jeepay-payment.jar上传到目标服务器/home/jeepay/service/payment/目录。
- 将构建生成的
-
重启服务:
- 使用
systemctl restart tc_payment.service重启服务。
- 使用
⚠️ 注意:当前脚本中部分命令被注释掉,实际执行的是
scp和ssh命令。
2. Send files or execute commands over SSH(SSH 发布)
SSH Server 配置
- Name: 同城后端测试环境
- Transfer Set:
- Source files:
jeepay-payment/target/jeepay-payment.jar - Remove prefix:
jeepay-payment/target/ - Remote directory:
/home/jeepay/service/payment - Exec command:
- Source files:
APP_NAME="jeepay-payment.jar"
JAR_DIR="/home/jeepay/service/payment"
LOG_FILE="/www/projects/logs/payment/payment.log"
# 启动成功关键词
SUCCESS_KEYWORD="Started JeepayPayApplication"
START_TIMEOUT=60 # 最大等待启动时间(秒)
# 设置语言环境(防止中文乱码)
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
# 进入项目目录
cd "$JAR_DIR" || {
echo "Error: Cannot enter directory $JAR_DIR"
exit 1
}
# 检查 app.sh 是否存在
if [ ! -f "app.sh" ]; then
echo "Error: app.sh script not found"
exit 1
fi
# 停止应用
echo "Stopping [$APP_NAME] ..."
./app.sh stop
# 给系统一点时间释放端口和资源
sleep 3
# 启动应用
echo "Starting [$APP_NAME] ..."
./app.sh start
功能说明:
- 将构建后的 JAR 文件上传至远程服务器。
- 在远程服务器上执行以下操作:
- 设置环境变量(避免中文乱码)。
- 进入指定目录。
- 检查启动脚本
app.sh是否存在。 - 停止当前运行的服务。
- 等待 3 秒释放资源。
- 启动新的服务实例。
六、构建后操作(Post-build Actions)
- 当前未配置任何构建后操作(如通知、归档等)。
七、总结:整体流程图解
[GitLab 推送代码到 feature/dev]
↓
[Jenkins 自动触发构建]
↓
[拉取代码 → 使用 Docker 构建 Maven 项目]
↓
[编译生成 jeepay-payment.jar]
↓
[通过 SCP 上传 JAR 到目标服务器]
↓
[在远程服务器执行停止 → 等待 → 启动流程]
↓
[完成部署]
八、注意事项与建议
-
安全性:
- 使用 SSH 密钥认证,确保私钥安全。
- 避免硬编码密码或敏感信息。
-
稳定性优化:
- 可考虑增加构建失败重试机制。
- 增加健康检查逻辑,确认服务是否真正启动成功。
-
可维护性提升:
- 建议将
app.sh脚本标准化,并统一管理。 - 可引入
systemd或其他进程管理工具增强稳定性。
- 建议将
-
监控建议:
- 添加日志采集与告警(如 ELK + Prometheus)。
- 部署后验证服务可用性(HTTP 接口探测)。
九、附录:关键参数说明
| 参数 | 说明 |
|---|---|
BUILD_TIMESTAMP |
Jenkins 提供的环境变量,表示构建时间戳 |
jeepay-payment.jar |
构建输出的主程序包 |
172.17.2.160 |
目标部署服务器 IP 地址 |
tc_payment.service |
systemd 服务名,用于控制服务启停 |
✅ 此配置已实现 CI/CD 流程闭环:从代码提交 → 自动构建 → 自动部署 → 自动重启服务。适合开发或测试环境快速迭代使用。
更多推荐


所有评论(0)