通过终端执行时,Ansible剧本成功运行,但在Gitlab CI / CD管道中失败

时间:2020-05-25 04:37:50

标签: ansible gitlab gitlab-ci continuous-deployment

我编写了一个简单的角色,将应用程序的属性文件复制到远程计算机。我首先检查属性文件是否在本地,然后将文件复制到我的远程计算机上。我用来运行剧本的命令如下:-

 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管道的其他阶段工作正常。

1 个答案:

答案 0 :(得分:0)

在我的詹肯人里

我将sudo添加到ansible-playbook XXXX之前。

您可以添加

ansible_user=${ANSIBLE_USER} 
ansible_become_pass=${ANSIBLE_USER_PASSWORD} 
ansible_sudo_pass=${ANSIBLE_USER_PASSWORD}

在您的主机中

playbooks/hosts 
相关问题