当 Jenkins 服务器与代码执行机器(构建/部署节点)不是同一台机器时,可以通过 Jenkins 的分布式构建(Master-Slave 模式) 或 SSH 远程执行 来实现远程机器上的任务执行。以下是具体配置方法:
1. 使用 Jenkins 分布式构建(Master-Slave 模式)
配置步骤
安装 Jenkins Agent
- 在代码执行机器上安装 Jenkins Agent(也称为 Jenkins Node)。
- 可以选择以下方式安装:
- 通过 Java Web Start:下载 agent.jar 文件,并通过命令启动:java -jar agent.jar -jnlpUrl http://<jenkins-master>/computer/<node-name>/slave-agent.jnlp
- 通过 SSH:配置 SSH 连接,Jenkins Master 通过 SSH 启动 Agent。
- 通过 Docker:使用 Docker 容器运行 Jenkins Agent。
在 Jenkins Master 上配置节点
- 登录 Jenkins 管理界面,进入 Manage Jenkins > Manage Nodes and Clouds。
- 点击 New Node,输入节点名称,选择 Permanent Agent。
- 配置以下信息:
- Remote root directory:Agent 机器上的工作目录。
- Labels:为节点添加标签,方便在任务中指定使用该节点。
- Launch method:选择启动方式(如 SSH、Java Web Start 等)。
- Host:Agent 机器的 IP 或主机名。
- Credentials:配置用于连接 Agent 的 SSH 凭据。
在任务中指定节点
- 创建或编辑任务时,在 General 设置中选择 Restrict where this project can be run,并输入节点的标签。
- Jenkins 将会在该节点上执行任务。
2. 使用 SSH 插件远程执行任务
配置步骤
安装 SSH 插件
- 在 Jenkins 管理界面中,进入 Manage Jenkins > Plugin Manager,安装 Publish Over SSH 插件。
配置 SSH 服务器
- 进入 Manage Jenkins > Configure System,找到 Publish over SSH 部分。
- 添加 SSH 服务器信息:
- Name:服务器名称。
- Hostname:代码执行机器的 IP 或主机名。
- Username:登录用户名。
- Remote Directory:代码执行机器上的工作目录。
- Passphrase/Key:选择使用密码或私钥进行认证。
在任务中配置 SSH 执行
- 在任务构建步骤中,选择 Send build artifacts over SSH 或 Execute shell script on remote host using ssh。
- 配置:
- SSH Server:选择之前配置的 SSH 服务器。
- Source files:要传输的文件(可选)。
- Remove prefix:要移除的路径前缀(可选)。
- Remote directory:文件传输到的远程目录。
- Exec command:在远程机器上执行的命令。
3. 使用 Pipeline 实现远程执行
如果使用 Pipeline,可以通过 sshagent 或 sshCommand 等步骤实现远程执行。
示例 Pipeline
pipeline {
agent any
stages {
stage('Deploy') {
steps {
sshagent(['your-ssh-credentials-id']) {
sh 'ssh user@remote-host "cd /path/to/remote/dir && ./deploy.sh"'
}
}
}
}
}
- sshagent:用于管理 SSH 密钥。
- sshCommand(如果使用插件):直接执行远程命令。
4. 注意事项
- 网络连通性:确保 Jenkins Master 和代码执行机器之间的网络是连通的,尤其是 SSH 端口(默认 22)。
- 权限管理:确保 Jenkins 使用的用户有足够的权限在代码执行机器上执行任务。
- 安全性:
- 使用 SSH 密钥认证,避免明文密码。
- 定期更新密钥和插件,确保安全性。
- 日志和调试:如果任务执行失败,检查 Jenkins 控制台输出和远程机器上的日志。
总结
- 如果需要长期、稳定的远程执行,建议使用 Jenkins 分布式构建。
- 如果只是临时或简单的远程执行,可以使用 SSH 插件 或 Pipeline。
- 根据实际需求选择合适的方式,确保 Jenkins Master 和代码执行机器之间的通信和权限配置正确。
评论前必须登录!
注册