webentwicklung-frage-antwort-db.com.de

Jenkins: Verwenden Sie withCredentials in der globalen Umgebung

Ich habe eine Jenkins-Pipeline mit mehreren Stufen, die alle dieselben Umgebungsvariablen erfordern. Ich führe das so aus:

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

Ich möchte nicht jedes Mal composerAuth erneut deklarieren müssen. Daher möchte ich die Anmeldeinformationen in einer globalen Variablen speichern, sodass ich Folgendes tun kann:

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

Ich habe versucht, es in den Umgebungsabschnitt zu stellen:

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

Aber (grooviger Noob wie ich bin) funktioniert nicht. Was ist also der beste Ansatz, um eine global zugreifbare Variable mit Berechtigungsnachweisen festzulegen, die jedoch nur einmal angegeben werden muss?

5
Giel Berkers

Sie können die Hilfsmethode credentials des Abschnitts environment verwenden. Für die Berechtigungsnachweise "Username and passwrd" werden zwei zusätzliche Umgebungsvariablen zugewiesen. Beispiel:

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

Weiterlesen

2
Artem Danilov

So können Sie das erreichen

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

Nach langem Suchen (und Mühen) habe ich eine einfache Lösung gefunden:

Wie in den jenkins-Dokumenten für mgang mit Anmeldeinformationen erläutert, geben Sie beim Einfügen eines usernamePassword Anmeldeinformationen in eine Umgebungsvariable mit dem Namen VAR_NAME jenkins ein generiert automatisch zwei weitere Variablen, die mit _ USR und _ PSW bzw. für BenutzernameVariable und KennwortVariable enden = Parameter.

Was ich tat, war, meine Variablen mit den Werten von neuen Variablen USR und PSW einzuspritzen.

Bei @Giel Berkers sollte es ungefähr so ​​aussehen:

environment {
    DOCKER_IMAGE_NAME = "magento2_website_sibo"
    COMPOSER_REPO_MAGENTO_CREDENTIAL = credentials('COMPOSER_REPO_MAGENTO')
    COMPOSER_AUTH = """{
        "http-basic": {
            "repo.magento.com": {
                "username": "${COMPOSER_REPO_MAGENTO_CREDENTIAL_USR}",
                "password": "${COMPOSER_REPO_MAGENTO_CREDENTIAL_PSW}"
            }
        }
    }""";
}
0

Ich fand das und es ist hilfreich: Quelle: https://wiki.jenkins.io/display/JENKINS/Credentials+Binding+Plugin

   // Basic example
withCredentials([usernamePassword(credentialsId: 'Amazon',
                     usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
    //available as an env variable, but will be masked if you try to print it out any which way
    sh 'echo $PASSWORD'
    echo "${env.USERNAME}"
}

// You can also request multiple credentials in a single call
withCredentials([usernamePassword(credentialsId: 'Amazon',
                     usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD'),
                 string(credentialsId: 'slack-url',
                     variable: 'SLACK_URL'),]) {
    sh 'echo $PASSWORD'
    echo "${env.SLACK_URL}"
}

// Older code might not use the new syntax (usernamePassword, string, ...) yet, and directly call the class:
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'Amazon',
                  usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
    //available as an env variable, but will be masked if you try to print it out any which way
    sh 'echo $PASSWORD'
    echo "${env.USERNAME}"
}
0
Nick