在 Jenkins 管道上使用 --ask-vault-pass

Use of --ask-vault-pass on Jenkins pipeline

我正在剧本中使用 ansible-vault,我想从 Jenkinsfile 调用它。我读到过您可以将密码保存在一个文件中,然后像那样调用它,但我想使用 --ask-vault-pass.

我在 Jenkins 上创建了凭证(密文),我想使用它,但我不知道如何使用。一直在互联网上搜索,但我所看到的只是关于文件中 ansible-vault 密码使用的问题。

代码如下:

pipeline {
    agent none

    environment {
        ANSIBLE_VAULT=credentials('ansiblevault')
    }

    stages {
        stage ('Start docker node via Ansible') {
            agent { label 'ansible_slave' } 
            steps {
                sh 'ansible-playbook /etc/ansible/instance_start_stop.yml --ask-vault-pass -i hosts --user user1 --key-file /home/user1/.ssh/id_rsa'
            }
        }
    }
}

在这种情况下我该如何使用凭据?谢谢!

感谢 Zeitounator 和 β.εηοιτ.βε 的回复!

我试过这个:

withCredentials([file(credentialsId: 'ansible_password', variable: 'ansibleVaultKeyFile')]) {
                    ansiblePlaybook playbook: 'instance_start_stop.yml', inventory: 'hosts', extras: "--user user1 --vault-password-file ${ansibleVaultKeyFile} --key-file /home/user1/.ssh/id_rsa'"

但是有一个问题是没有权限 permissions 因为我正在执行命令的用户不是 root。所以我需要 sudo。我尝试使用 sudoUser 但无济于事。

最后我是这样实现的:

withCredentials([file(credentialsId: 'ansible_password', variable: 'ansibleVaultKeyFile')]) {
                    sh 'sudo ansible-playbook /etc/ansible/instance_start_stop.yml --vault-password-file ${ansibleVaultKeyFile} -i /etc/ansible/hosts --user user1 --key-file /home/user1/.ssh/id_rsa'
                }