web-dev-qa-db-ja.com

Jenkins Pipelineプロジェクトのパスワードフィールドをマスクする方法

パスワードプロパティがJenkinsfileで定義されている場合:

properties([
    parameters([
        password(name: 'KEY', description: 'Encryption key')
    ])
])

Jenkinsは、パイプラインが実行されるたびにその値を提供するようユーザーに求めます。

Build parameters

このパラメーターをマスクして、echo ${KEY}は、ユーザーが渡した実際の値を出力しません。ただし、現在のところエコーすると、提供された値がそのまま出力されます。

properties([
    parameters([
        password(name: 'KEY', description: 'Encryption key')
    ])
])

node {
    stage('Stage 1') {
        # Will print the actual value of the KEY, verbatim
        sh "echo ${KEY}"
    }
}

また、Mask PasswordsプラグインはJenkinsパイプラインでは機能しないため、これを使用することはできません。

ビルドログでこれらのパスワードタイプのパラメーターをマスクする方法はありますか?

7

マスクパスワードプラグイン を使用します。 私の共有パイプラインライブラリ から取得したJenkinsfileの例を次に示します。

properties([
    parameters([
        password(name: 'KEY', description: 'Encryption key')
    ])  
])  

node {
    stage('Stage 1') {
       // Will print the masked value of the KEY, replaced with ****
       wrap([$class: 'MaskPasswordsBuildWrapper', varPasswordPairs: [[var: 'KEY', password: KEY]], varMaskRegexes: []]) {
            sh "echo ${KEY}"
        }   
    }   
}

withCredentialsに関する既存の提案以外に、追加することはあまりありません。ただし、テンプレートを使用してジョブを自動的に生成していて、デフォルトのパスワードを設定している場合は、hudson.util.Secretテンプレートを保護します。

10
Sam Gleske

Jenkins Credentials plugin を使用できます。このプラグインを使用すると、パイプラインで使用するIDを持つ資格情報を作成できます。

コードは次のようになります。

withCredentials([string(credentialsId: 'pass', variable: 'password1')]) {
     echo "My password is '${password1}'!"
}

あなたのユーザーの場合:

node {
    stage('Echo') {
        withCredentials([string(credentialsId: 'pass', variable: 'password1')]) {
            echo "'${password1}'!"
        }
    }
}

注:パスワードはwithCredentialsブロックでのみマスクされます。

3
Javier C.