如何使用Ansible将Jenkins工作区的Docker-compose文件上传至远程主机
Ansible复制Docker Compose文件失败问题解决
核心错误原因
copy模块参数使用完全错误:remote_src是布尔类型参数,仅用于指定「源文件是否在远程主机上」,有效值只有yes/no,不能直接填写路径。- 你的需求是把Jenkins工作区(Ansible控制端)的文件复制到远程主机,属于默认场景,不需要加
remote_src参数,源文件路径用src参数声明即可。 - 你之前的写法相当于要求Ansible在远程主机的家目录下找
docker-compose.yml再复制到同主机的目标路径,远程主机上本来不存在该文件,自然复制失败。
- 你的需求是把Jenkins工作区(Ansible控制端)的文件复制到远程主机,属于默认场景,不需要加
- 目标路径使用相对路径
./opt/ydilo/ydilo-acalls/,实际会对应到远程主机登录用户的家目录下的opt/...路径,如果你需要的是根目录下的/opt路径,需要写绝对路径,同时要确保目标目录提前存在,否则也会触发复制失败。
修正后的剧本示例
--- - hosts: [...].es tasks: # 先确保目标目录存在 - name: create target directory become: True file: path: /opt/ydilo/ydilo-acalls/ state: directory mode: '0755' - name: copy Docker Compose files copy: # src填Jenkins工作区中docker-compose.yml的绝对路径,或者相对Ansible剧本执行位置的相对路径 src: /path/to/your/jenkins/workspace/docker-compose.yml dest: /opt/ydilo/ydilo-acalls/ mode: '0644' - name: Run container become: True shell: # 加-d参数让容器后台运行,避免执行阻塞 cmd: "docker-compose up -d" chdir: /opt/ydilo/ydilo-acalls/
额外注意事项
- 如果Jenkins工作区的
docker-compose.yml就在Ansible剧本执行的当前目录下,src可以直接写src: docker-compose.yml - 执行前确认远程主机已经安装好
docker和docker-compose,且执行用户有docker操作权限,避免启动容器时报错。
内容的提问来源于stack exchange,提问作者Alejandro Sánchez
相关产品推荐
相关产品推荐

