1

我一直在尝试将 Ansible 作业从我的 Jenkins 服务器运行到连接到域的 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_secret_text_variable 回显到 Jenkins 中的“vaultpassfile”中,然后在 Jenkins 插件中使用 Ansible 标志:

--vault-password-file '${WORKSPACE}/vaultpassfile

这种方法也失败了,并且给了我与第二种方法完全相同的错误。那么在 Jenkins 中加密我的 Windows 密码并将其传递给我的 Ansible 工作的正确方法是什么?

4

1 回答 1

1

查看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') }}"
于 2019-02-25T21:28:03.107 回答