web-dev-qa-db-fra.com

Comment masquer un champ de mot de passe dans le projet Jenkins Pipeline?

Lorsqu'une propriété de mot de passe est définie dans un Jenkinsfile:

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

Jenkins invite les utilisateurs à fournir sa valeur à chaque exécution du pipeline:

Build parameters

Je veux que ce paramètre soit masqué pour que echo ${KEY} n'imprime pas la valeur réelle transmise par l'utilisateur. Cependant, pour le moment, l'écho affiche la valeur fournie textuellement:

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

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

Il semble également que le plugin Mask Passwords ne fonctionne pas avec les pipelines Jenkins, donc l'utilisation de ce n'est pas une option.

Existe-t-il un moyen de masquer ces paramètres saisis par mot de passe dans les journaux de génération?

7
Behrang Saeedzadeh

Vous voudrez utiliser le plugin de masquage des mots de passe . Voici un exemple de Jenkinsfile tiré de ma bibliothèque de pipeline partagée .

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}"
        }   
    }   
}

À part les suggestions existantes sur withCredentials, il n'y a pas grand-chose à ajouter. Cependant, si vous générez automatiquement vos travaux via des modèles et que vous définissez un mot de passe par défaut, vous souhaiterez peut-être utiliser hudson.util.Secret pour sécuriser vos modèles.

10
Sam Gleske

Vous pouvez utiliser plugin Jenkins Credentials . Avec ce plugin, vous pouvez créer un justificatif d'identité avec un ID à utiliser dans votre pipeline:

Le code sera:

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

Dans votre cas d'utilisation:

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

Remarque: Le mot de passe sera masqué uniquement dans le bloc withCredentials.

3
Javier C.