在我的开发机器上,一切都很棒。只是当Jenkins试图运行与保险库加密文件相关的剧本时,我看到错误:
ERROR! Decryption failed on /data/jenkins/workspace/.../secrets.yml
FATAL: command execution failed hudson.AbortException: Ansible playbook execution failed
从Jenkins作业执行的命令是:
/usr/bin/ansible-playbook playbook.yml -i prod/inventory -l localhost -s -f 1 --vault-password-file /etc/ansible/vault_password
保证库密码文件存在于具有以下权限的位置:
-rw-r--r--. 1 root root 35 Dec 18 13:23 /etc/ansible/vault_password
如果我运行相同的命令但是要求输入密码(交互式),一切运行正常。然而,这不是理想的工作流程:我希望Jenkins能够独立运行这些剧本,而无需用户互动。
我应该提一下,该剧本是为了在本地运行任务,主要是为Maven测试准备环境(创建预期的资源,如属性文件)。
答案 0 :(得分:0)
事实证明,使用内容创建文件和使用内容复制文件之间存在巨大差异,即使最终结果是具有相同内容的文件也是如此。
让我解释一下:我的配置手册一直是通过将密码写入远程机器上的文件来创建我的密码文件,如下所示:
copy: content="{{ ansibl_vault_password }}", dest="{{ ansibl_vault_password_file }}"
我所做的更改是将密码文件从我的机器复制到远程机器,如下所示:
copy:
src: "{{ ansibl_vault_password_file }}"
dest: "{{ ansibl_vault_password_file }}"
mode: "u=rw,g=r,o=r"
所以,即使在宏观方案中,我最终得到的第一行包含密码的文件,早期的方法仍然无法解密内容,而第二种方法工作正常。