tutorial snippet currentbuild jenkins jenkins-pipeline

snippet - Ocultar contraseña en el script de Jenkins pipeline



jenkinsfile generator (2)

Estoy tratando de enmascarar una contraseña en mi compilación Jenkins.

He estado probando el complemento de máscara de contraseñas .

Sin embargo, esto no parece funcionar con mi secuencia de comandos Jenkins pipeline, porque si defino la contraseña PASSWD1 y luego la uso en la secuencia de comandos como esta ${PASSWD1} , ${PASSWD1} :

No such DSL method ''$'' found among steps [addToClasspath, ansiColor, ansiblePlaybook, ....]

Si uso env.PASSWD1 , su valor se resolverá en null .

Entonces, ¿cómo debo enmascarar una contraseña en un script de tubería de Jenkins?


En cuanto a este problema, https://issues.jenkins-ci.org/browse/JENKINS-27392 , debería poder hacer lo siguiente:

node { wrap([$class: ''MaskPasswordsBuildWrapper'', varPasswordPairs: [[password: ''123ADS'', var: ''SECRET'']]]) { echo env[''SECRET'']; } }

Sin embargo, si miras los últimos comentarios en ese tema, no funciona, parece un error. Sin embargo, si conoce el secreto e imprime accidentalmente int en los registros, este se oculta, así:

node { wrap([$class: ''MaskPasswordsBuildWrapper'', varPasswordPairs: [[password: ''123ADS'', var: ''SECRET'']]]) { echo "123ADS"; } }

Esto produce:

[Pipeline] node Running on master in workspace/pl [Pipeline] { [Pipeline] wrap [Pipeline] { [Pipeline] echo ******** [Pipeline] } [Pipeline] // wrap [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS

Con respecto al error que está recibiendo, No such DSL method ''$'' found among steps ... , estoy adivinando, pero probablemente esté usando ${VAR} directamente en el script de canalización, ${...} solo es relevante Dentro de las cuerdas en groovy.

EDITAR: O puede usar el Credentails Plugin y el paso de la canalización con las withCredentials :

// Credential d389273c-03a0-45af-a847-166092b77bda is set to a string secret in Jenkins config. node { withCredentials([string(credentialsId: ''d389273c-03a0-45af-a847-166092b77bda'', variable: ''SECRET'')]) { bat """ if ["${SECRET}"] == ["123ASD"] echo "Equal!" """; } }

Esto resulta en:

[Pipeline] node Running on master in workspace/pl [Pipeline] { [Pipeline] withCredentials [Pipeline] { [Pipeline] bat [pl] Running batch script workspace/pl>if ["****"] == ["****"] echo "Equal!" "Equal!" [Pipeline] } [Pipeline] // withCredentials [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS

Tenga en cuenta que este complemento vincula la variable directamente al cierre y no al entorno como el otro, por ejemplo, puedo usar la variable SECRET directamente.


La forma más sencilla sería utilizar el Complemento de credenciales .

Allí puede definir diferentes tipos de credenciales, ya sea una contraseña única ("texto secreto"), un archivo o una combinación de nombre de usuario / contraseña. Además otros complementos pueden aportar otros tipos de credenciales.

Cuando creas una credencial (a través del enlace Credenciales en la página principal de Jenkins), asegúrate de establecer una "ID". En el siguiente ejemplo, lo he llamado my-pass . Si no lo configura, seguirá funcionando, Jenkins le asignará un UUID opaco en su lugar.

En cualquier caso, puede generar fácilmente la sintaxis requerida con el generador de fragmentos de código .

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

Esto hará que la contraseña esté disponible en la variable dada solo dentro de este bloque. Si intentas imprimir la contraseña, como hago yo aquí, será enmascarada.