在 Jenkins 服务器上运行 Shell 脚本,以在目标服务器上运行 Docker 容器,通常涉及使用 SSH 连接到目标服务器并执行 Docker 命令。以下是一个示例流程,展示如何在 Jenkins 中设置和执行这样的任务。
步骤 1: 准备 SSH 密钥
首先,确保 Jenkins 服务器可以通过 SSH 无密码登录到目标服务器。这通常涉及生成 SSH 密钥对,并将公钥添加到目标服务器的 ~/.ssh/authorized_keys
文件中。
步骤 2: 编写 Shell 脚本
在 Jenkins 工作区或某个源代码管理库中,创建一个 Shell 脚本(例如 run-docker-on-remote.sh
),该脚本将通过 SSH 在目标服务器上执行 Docker 命令。
#!/bin/bash
# 目标服务器的 SSH 信息
REMOTE_USER="your-remote-username"
REMOTE_HOST="your-remote-host"
REMOTE_PORT="22" # 默认 SSH 端口,如有更改请指定
# Docker 镜像信息
DOCKER_IMAGE="your-harbor-repo/your-image-name:tag"
CONTAINER_NAME="your-container-name"
# SSH 命令,登录 Docker 仓库并运行容器
ssh -p $REMOTE_PORT ${REMOTE_USER}@${REMOTE_HOST} << EOF
docker login your-harbor-url -u your-username -p \$PASSWORD
docker pull $DOCKER_IMAGE
docker run --name $CONTAINER_NAME $DOCKER_IMAGE
EOF
步骤 3: 在 Jenkins 中配置和运行脚本
- 在 Jenkins 中,导航到你的任务配置页面。
- 在 “构建” 部分,添加一个 “执行 shell” 构建步骤。
- 将你的 Shell 脚本内容粘贴到构建步骤的文本框中,或通过 “从源代码管理添加” 来引用脚本。
- 如果需要,配置任何必要的环境变量或参数。
- 保存配置并运行构建。
注意事项
- 确保 Jenkins 服务器上的 SSH 密钥有正确的权限(通常是
600
)。 - 如果目标服务器的 SSH 端口不是默认的 22,需要在脚本中指定
REMOTE_PORT
。 - 将
PASSWORD
替换为实际的密码,或者使用 Jenkins 的凭据存储功能来安全地存储和引用密码。 - 脚本中的
docker login
命令需要密码。考虑使用 Jenkins 的参数化构建或凭证插件来安全地传递密码。 - 如果你的 Docker 镜像在公共仓库中,可能不需要
docker login
步骤。 - 根据需要调整 Docker 容器的运行命令,包括端口映射、卷挂载等参数。
通过这种方式,你可以在 Jenkins 服务器上触发一个构建,该构建会运行一个 Shell 脚本,该脚本通过 SSH 在目标服务器上执行 Docker 命令,从而启动 Docker 容器。