我编写了一个简单的角色,将应用程序的属性文件复制到远程计算机。我首先检查属性文件是否在本地,然后将文件复制到我的远程计算机上。我用来运行剧本的命令如下:-
ansible-playbook -i ./playbooks/hosts ./playbooks/deploy.yml --tags copy --limit remote_machine_name --ask-become-pass
我可以看到剧本运行良好,并且能够验证文件是否已复制到远程计算机。现在,当我尝试使用Gitlab CI / CD实现相同功能时,管道无法显示指定的文件不存在。我在ansible-playbook
管道中使用的CI/CD
命令是:-
ansible-playbook -i ./playbooks/hosts ./playbooks/deploy.yml --tags copy --limit remote_machine_name --extra-vars "ansible_user=${ANSIBLE_USER} ansible_become_pass=${ANSIBLE_USER_PASSWORD} ansible_sudo_pass=${ANSIBLE_USER_PASSWORD}"
管道失败时得到的堆栈跟踪:-
"item": {
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"invocation": {
"module_args": {
"checksum_algorithm": "sha1",
"follow": false,
"get_attributes": true,
"get_checksum": true,
"get_md5": false,
"get_mime": true,
"path": "../properties/application.properties"
}
},
"item": "../properties/application.properties",
"stat": {
"exists": false
}
},
"msg": "file ../properties/application.properties does not exist"
}
这可能是什么原因?我可以验证gitlab管道的其他阶段工作正常。
答案 0 :(得分:0)
在我的詹肯人里
我将sudo添加到ansible-playbook XXXX之前。
您可以添加
ansible_user=${ANSIBLE_USER}
ansible_become_pass=${ANSIBLE_USER_PASSWORD}
ansible_sudo_pass=${ANSIBLE_USER_PASSWORD}
在您的主机中
playbooks/hosts