Tengo un canal de Jenkins que ejecuta pruebas Cypress en un contenedor Docker. Las pruebas necesitan un nombre de usuario y una contraseña para iniciar sesión en la aplicación web. Guardé el nombre de usuario y la contraseña en AWS Secrets Manager. Puedo hacer eso cuando ejecuto un comando de shell como un paso de compilación
USERNAME=$(aws secretsmanager get-secret-value --region us-east-2 --secret-id myID | jq -r .SecretString | jq -r .username) PASSWORD=$(aws secretsmanager get-secret-value --region us-east-2 --secret-id myID | jq -r .SecretString | jq -r .password) docker run -e NO_COLOR=1 -v "$PWD":/workdir -w /workdir --entrypoint=cypress 1.dkr.ecr.us-east-2.amazonaws.com/cypress/included:3.8.3 run --env username="$USERNAME",password="$PASSWORD"Sin embargo, quiero crear un trabajo de canalización de Jenkins y hacerlo desde JenkinsFile. ¿Cómo puedo leer el nombre de usuario y la contraseña de AWS Secrets Manager en el archivo Jenkins?
Tienes el paso sh .
steps { script { username = sh (script: "aws secretsmanager get-secret-value --region us-east-2 --secret-id myID | jq -r .SecretString | jq -r .username", returnStdout: true) password = sh (script: "aws secretsmanager get-secret-value --region us-east-2 --secret-id myID | jq -r .SecretString | jq -r .password", returnStdout: true) } }También puede usar la API del proveedor de credenciales de Jenkins para lograr esto.
Existen múltiples ventajas al usar la API del proveedor de credenciales en lugar de un paso de guión:
Es cierto que existe cierta complejidad inicial en la configuración de un proveedor de credenciales en comparación con un paso de guión. Sin embargo, si está utilizando credenciales en más de 1 o 2 scripts, o si alguna de sus credenciales tendría consecuencias no triviales si se administrara mal o se filtrara (por ejemplo, claves de carga de Artifactory), definitivamente creo que vale la pena asumir ese costo ahora, a cambio para facilitar la gestión y el mantenimiento de las credenciales más adelante.
Ver más información en la documentación de Jenkins .
Si desea utilizar la API del proveedor de credenciales con los secretos que almacenó en Secrets Manager, debe utilizar el complemento del proveedor de credenciales de AWS Secrets Manager . (Descargo de responsabilidad: soy el mantenedor de ese complemento).
Primero, instalamos el complemento del proveedor de credenciales de AWS Secrets Manager en Jenkins y otorgamos a Jenkins acceso IAM a Secrets Manager.
Luego cargamos un nombre de usuario de Jenkins con una credencial de contraseña llamada 'artifactory' a Secrets Manager, que contiene el nombre de usuario 'joe' (información no confidencial) y la contraseña 'supersecret' (información confidencial).
aws secretsmanager create-secret \ --name 'artifactory' \ --secret-string 'supersecret' \ --description 'Acme Corp Artifactory user' \ --tags 'Key=jenkins:credentials:username,Value=joe' 'Key=jenkins:credentials:type,Value=usernamePassword'Luego vinculamos la credencial 'artifactory' en nuestro Jenkinsfile.
pipeline { agent any environment { ARTIFACTORY = credentials('artifactory') } stages { stage('Foo') { steps { // Three environment variables are now available to use however you want: // // ARTIFACTORY=joe:supersecret // ARTIFACTORY_USR=joe // ARTIFACTORY_PSW=supersecret sh './deploy' } } } }