Jenkins 构建后自动通过 SSH 更新 Docker 容器实践
安装插件 Publish Over SSH
在 Jenkins 中确保已经安装 Publish Over SSH 插件

配置插件
插件安装成功后,在 系统配置 → Publish over SSH → SSH Servers 中添加服务器。 若使用密码认证,展开 Advanced 即可输入密码。

构建项目添加更新 Docker 脚本
添加构建步骤:Send files or execute commands over SSH


脚本参考
# ============================================================
# Jenkins「Execute shell」:SSH 到部署机发布
# 拉最新镜像 → 重建容器 → 重启网关
# ============================================================
# 本端只用 set -eu:Jenkins 的 Execute shell 默认由 /bin/sh (dash) 执行,
# dash 不支持 set -o pipefail,加了会直接报 Illegal option 退出。
set -eu
DEPLOY_DIR=/root # ← 改成实际部署目录
COMPOSE_FILE=docker-compose-yescms.yml
LOG=/var/log/jenkins_publish_yescms.log
# ---- 并发保护 ----
LOCK=/var/lock/jenkins_publish_yescms.lock
exec 9>"$LOCK"
if ! flock -n 9; then
echo "$(date '+%F %T') 上一次发布未结束,本次跳过" >> "$LOG"
exit 1
fi
{
echo "=========================================="
echo "Run at: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
cd "$DEPLOY_DIR"
echo "===== [1/2] 拉取最新镜像 ====="
docker compose -f "$COMPOSE_FILE" pull
echo "===== [2/2] 重建并启动容器 ====="
docker compose -f "$COMPOSE_FILE" up -d
echo "===== 当前状态 ====="
docker compose -f "$COMPOSE_FILE" ps
echo "===== 发布完成 ====="
echo "=========================================="
echo "===== END at: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=========================================="
} >> "$LOG" 2>&1
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生


