如何在Jenkins中加密WIndows密码并将其传递给Ansible作业?

时间:2019-02-25 21:11:47

标签: windows jenkins ansible jenkins-plugins ansible-vault

我一直在尝试将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工作中的正确方法是什么?

1 个答案:

答案 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') }}"