web-dev-qa-db-fra.com

Jenkins: utiliser la section withCredentials dans l'environnement global

J'ai un pipeline Jenkins avec plusieurs étapes qui nécessitent toutes les mêmes variables d'environnement, je lance ceci comme suit:

script {
    withCredentials([usernamePassword(credentialsId: 'COMPOSER_REPO_MAGENTO', passwordVariable: 'MAGE_REPO_PASS', usernameVariable: 'MAGE_REPO_USER')]) {
        def composerAuth = """{
            "http-basic": {
                "repo.magento.com": {
                    "username": "${MAGE_REPO_USER}",
                    "password": "${MAGE_REPO_PASS}"
                }
            }
        }""";
        // do some stuff here that uses composerAuth
    }
}

Je ne veux pas avoir à re-déclarer composerAuth à chaque fois, je veux donc stocker les informations d'identification dans une variable globale, afin que je puisse faire quelque chose comme:

script {
    // do some stuff here that uses global set composerAuth
}

J'ai essayé de le mettre dans la section environnement:

environment {
    DOCKER_IMAGE_NAME = "magento2_website_sibo"
    withCredentials([usernamePassword(credentialsId: 'COMPOSER_REPO_MAGENTO', passwordVariable: 'MAGE_REPO_PASS', usernameVariable: 'MAGE_REPO_USER')]) {
        COMPOSER_AUTH = """{
            "http-basic": {
                "repo.magento.com": {
                    "username": "${MAGE_REPO_USER}",
                    "password": "${MAGE_REPO_PASS}"
                }
            }
        }""";
    }
}

Mais (groovy noob que je suis) ça ne marche pas. Alors, quelle est la meilleure approche pour définir une variable globalement accessible avec des informations d'identification, mais que vous ne devez déclarer qu'une seule fois?

5
Giel Berkers

Vous pouvez utiliser la méthode d'assistance credentials de la section environment. Pour le type d'informations d'identification "Nom d'utilisateur et mot de passe", il affecte 2 variables d'environnement supplémentaires. Exemple:

environment {
  MAGE_REPO_CREDENTIALS = credentials('COMPOSER_REPO_MAGENTO')
  COMPOSER_AUTH = """{
      "http-basic": {
          "repo.magento.com": {
              "username": "${env.MAGE_REPO_CREDENTIALS_USR}",
              "password": "${env.MAGE_REPO_CREDENTIALS_PSW}"
          }
      }
  }"""
}

Lire la suite

2
Artem Danilov

Voici comment vous pouvez accomplir cela

pipeline {
    agent any
    stages {
        stage('first') {
            steps {
                script {
                    withCredentials([usernamePassword(credentialsId: 'COMPOSER_REPO_MAGENTO', passwordVariable: 'MAGE_REPO_PASS', usernameVariable: 'MAGE_REPO_USER')]) {
                        def user = env.MAGE_REPO_USER
                        def password = env.MAGE_REPO_PASS
                        //Initializing a global variable. Notice there is no def here 
                        composerAuth = """{
                            "http-basic": {
                                "repo.magento.com": {
                                    "username": "${user}",
                                    "password": "${password}"
                                }
                            }
                        }"""
                    }
                }
            }
        }
        stage('second') {
            steps {
                script {
                    println composerAuth
                }
            }
        }
    }
}
1
Vitalii Vitrenko