如何从Jenkins向另一服务器部署Docker Compose流水线?
解决Jenkins流水线在远程服务器执行docker-compose命令的问题
你当前的流水线代码是在Jenkins服务器本地执行docker-compose命令,要实现到另一台目标服务器执行,有两种常用方案,不需要修改POST请求头(那是误解,不适用这个场景):
方案一:用SSH插件远程执行命令
- 安装SSH插件:进入Jenkins后台的「Manage Jenkins」→「Plugins」→「Available plugins」,搜索「SSH plugin」并安装,重启Jenkins生效。
- 配置远程服务器连接:
- 进入「Manage Jenkins」→「Configure System」,找到「SSH Servers」区域。
- 点击「Add」,填写目标服务器的信息:名称(自定义)、主机IP(172.16.0.x)、端口(默认22)、用户名,选择认证方式(密码或SSH密钥,需提前在Jenkins凭证管理中添加对应凭证)。
- 点击「Test Connection」验证连接是否成功,保存配置。
- 修改流水线代码:
使用sshCommand步骤在远程服务器执行命令,示例如下:pipeline { agent any stages { stage('更新远程服务器Docker服务') { steps { sshCommand( remote: [ name: '目标服务器自定义名称', host: '172.16.0.x', port: 22, username: '远程服务器用户名', credentialsId: 'Jenkins中存储的远程服务器凭证ID' ], command: 'cd /你的docker-compose文件所在目录 && docker-compose pull && docker-compose up -d' ) } } } }
方案二:将目标服务器配置为Jenkins代理节点
- 添加代理节点:
- 进入「Manage Jenkins」→「Nodes」→「New Node」,输入节点名称,选择「Permanent Agent」,点击「OK」。
- 配置远程工作目录(比如
/var/jenkins_agent),启动方式选择「Launch agent via SSH」,填写目标服务器IP,选择之前配置好的SSH凭证,设置节点标签(比如remote-docker-server),保存配置。 - 等待节点连接成功,状态变为「Online」。
- 修改流水线代码:
指定流水线在目标节点上执行,示例如下:pipeline { agent { label 'remote-docker-server' } // 替换为你设置的节点标签或名称 stages { stage('更新Docker服务') { steps { // 如果目标服务器是Linux用sh,Windows用bat sh 'cd /你的docker-compose文件所在目录 && docker-compose pull && docker-compose up -d' // Windows环境替换为:bat 'cd C:\\你的docker-compose文件所在目录 && docker-compose pull && docker-compose up -d' } } } }
注意事项
- 目标服务器必须提前安装Docker和docker-compose,并且保证当前执行命令的用户有Docker操作权限。
- 若用SSH方案,确保Jenkins服务器能通过SSH正常连接目标服务器;若用代理节点方案,目标服务器需要安装Java环境(Jenkins代理运行依赖)。
内容的提问来源于stack exchange,提问作者Dawid Bryndza
相关产品推荐
相关产品推荐

