我一直在尝试将Jenkins服务器上的Ansible作业运行到连接到域的Windows主机上。我已经尝试过以下方法进行身份验证。
第一种方法有效,但是我的密码以纯文本格式保存,我想对其进行加密:
ansible_user: 'username@domain.com'
ansible_password: 'myplaintextpassword
第二种方法失败,并给我一个错误。基本上,我试图将Windows域密码保存在Jenkins的秘密文本存储区中,并将其作为自己的变量简单地传递到Ansible作业中:
ansible_user: 'username@domain.com'
ansible_password: '{{ jenkins_secret_text_variable }}'
fatal: [myhost.domain.com]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host host.domain.com port 22: Connection timed out\r\n", "unreachable": true}
我尝试的第三种方法是在Jenkins中将jenkins_secret_text_variable回显为“ vaultpassfile”,然后在Jenkins插件中使用Ansible标志:
--vault-password-file '${WORKSPACE}/vaultpassfile
该方法也会失败,并给我与第二种方法完全相同的错误。那么,在Jenkins中加密Windows密码并将其传递到我的Ansible工作中的正确方法是什么?
答案 0 :(得分:0)
看看Credentials Binding Plugin,您可以通过Jenkins凭证存储中的唯一标识符指定凭证,然后访问凭证中存储的用户名和/或密码,如下所示:
def myCredential = 'abcd-efgh-ijkl-mnop'
withCredentials([[$class; 'UsernamePasswordMultiBinding', credentialsId: myCredential, passwordVariable: 'MY_PASS', usernameVariable: 'MY_USER']]) {
// MY_PASS and MY_USER are now available as environment variables
}
然后,您可以在剧本中通过查找来引用这些变量。例如,在group_vars文件中,您可以:
windows_user: "{{ lookup('env', 'MY_USER') }}"
windows_pass: "{{ lookup('env', 'MY_PASS') }}"