Параметризовать с блоком Credentials в Jenkinsfile - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь параметризовать блок учетных данных в моем Jenkinsfile и не могу этого сделать.

Вот то, что у меня сейчас есть

stage("Deploy") {

  if ("${ENVIRONMENT}"=='dev') {
      wrap([$class: 'VaultBuildWrapper', configuration: configuration, vaultSecrets: secrets]) {
        withCredentials([string(credentialsId: 'secret1_dev', variable: 'SECRET1'), string(credentialsId: 'secret2_dev', variable: 'SECRET2'),string(credentialsId: 'secret3_dev', variable: 'SECRET3'), string(credentialsId: 'secret4_dev', variable: 'SECRET4'),string(credentialsId: 'secret5_dev', variable: 'SECRET5'), string(credentialsId: 'secret6_dev', variable: 'SECRET6')]){
  } else {
      wrap([$class: 'VaultBuildWrapper', configuration: configuration, vaultSecrets: secrets]) {
        withCredentials([string(credentialsId: 'secret1_qa', variable: 'SECRET1'), string(credentialsId: 'secret2_qa', variable: 'SECRET2'),string(credentialsId: 'secret3_qa', variable: 'SECRET3'), string(credentialsId: 'secret4_qa', variable: 'SECRET4'),string(credentialsId: 'secret5_qa', variable: 'SECRET5'), string(credentialsId: 'secret6_qa', variable: 'SECRET6')]){
  }
        sh """
        export DEPLOYMENT_ENVIRONMENT=${ENVIRONMENT}
        source ~/.bashrc
        echo 'parametrized credentials!'
        """
        }
      }
}

Я получаю ошибку ниже

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 58: expecting '}', found 'else' @ line 58, column 17.
                 } else {
                   ^

То, что я хочу сделать, зависит от того, что ENVIRONMENT дается работе через параметр, он выбирает, что credentialsId выбрать для секретной переменной, которую я передаю работе.

Кто-нибудь знает, как правильно это сделать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

я приму @ gerard-ryan ответ, но это упростит то, что мне нужно вытекает из его ответа

stage("Deploy") {
    wrap(
        [
            $class: 'VaultBuildWrapper',
            configuration: configuration,
            vaultSecrets: secrets
        ]
    ) {
        withCredentials(
            [
                string(credentialsId: "secret1_${ENVIRONMENT}", variable: 'SECRET1'),
                string(credentialsId: "secret2_${ENVIRONMENT}", variable: 'SECRET2'),
                string(credentialsId: "secret3_${ENVIRONMENT}", variable: 'SECRET3'),
                string(credentialsId: "secret4_${ENVIRONMENT}", variable: 'SECRET4'),
                string(credentialsId: "secret5_${ENVIRONMENT}", variable: 'SECRET5'),
                string(credentialsId: "secret6_${ENVIRONMENT}", variable: 'SECRET6')
            ]
        ) {
            sh """
                export DEPLOYMENT_ENVIRONMENT=${ENVIRONMENT}
                source ~/.bashrc
                echo 'parametrized credentials!'
            """
        }
    }
}

У меня не было последней строковой секции, так как у меня уже есть ENVIRONMENT параметризованная

0 голосов
/ 13 сентября 2018

Ваша ошибка просто из-за неправильного вложения блоков. в языках программирования, таких как Groovy (в данном случае), которые используют фигурные скобки для обозначения блоков, вы открываете блоки от самого внешнего к самому внутреннему, а затем закрываете от самого внутреннего до самого внешнего. Э.Г.

while(outer) {
    if (inner1) {
        echo "inner1"
    } else {
        echo "inner2"
    }
}

Так что для вашего случая это будет выглядеть примерно так (длинные строки обернуты для удобства чтения):

stage("Deploy") {
    if ("${ENVIRONMENT}"=='dev') {
        wrap(
            [
                $class: 'VaultBuildWrapper',
                configuration: configuration,
                vaultSecrets: secrets
            ]
        ) {
            withCredentials(
                [
                    string(credentialsId: 'secret1_dev', variable: 'SECRET1'),
                    string(credentialsId: 'secret2_dev', variable: 'SECRET2'),
                    string(credentialsId: 'secret3_dev', variable: 'SECRET3'),
                    string(credentialsId: 'secret4_dev', variable: 'SECRET4'),
                    string(credentialsId: 'secret5_dev', variable: 'SECRET5'),
                    string(credentialsId: 'secret6_dev', variable: 'SECRET6')
                ]
            ) {
                sh """
                    export DEPLOYMENT_ENVIRONMENT=${ENVIRONMENT}
                    source ~/.bashrc
                    echo 'parametrized credentials!'
                """
            }
        }
    } else {
        wrap(
            [
                $class: 'VaultBuildWrapper',
                configuration: configuration,
                vaultSecrets: secrets
            ]
        ) {
            withCredentials(
                [
                    string(credentialsId: 'secret1_qa', variable: 'SECRET1'),
                    string(credentialsId: 'secret2_qa', variable: 'SECRET2'),
                    string(credentialsId: 'secret3_qa', variable: 'SECRET3'),
                    string(credentialsId: 'secret4_qa', variable: 'SECRET4'),
                    string(credentialsId: 'secret5_qa', variable: 'SECRET5'),
                    string(credentialsId: 'secret6_qa', variable: 'SECRET6')
                ]
            ) {
                sh """
                    export DEPLOYMENT_ENVIRONMENT=${ENVIRONMENT}
                    source ~/.bashrc
                    echo 'parametrized credentials!'
                """
            }
        }
    }
}

Теперь, это кажется излишне дублированным, верно? Вы хотите иметь только одну копию вашего шага sh и чтобы в ней были доступны правильные учетные данные, в зависимости от переменной ${ENVIRONMENT}. Вы можете попытаться сохранить суффикс для учетных данных в переменной, а затем использовать GString для имени в каждом случае. Нечто подобное должно сделать свое дело (примечание: я не пробовал это, но я относительно уверен, что это должно работать):

stage("Deploy") {
    final String credentialSuffix = ENVIRONMENT == 'dev' ? 'dev' : 'qa'
    wrap(
        [
            $class: 'VaultBuildWrapper',
            configuration: configuration,
            vaultSecrets: secrets
        ]
    ) {
        withCredentials(
            [
                string(credentialsId: "secret1_${credentialSuffix}", variable: 'SECRET1'),
                string(credentialsId: "secret2_${credentialSuffix}", variable: 'SECRET2'),
                string(credentialsId: "secret3_${credentialSuffix}", variable: 'SECRET3'),
                string(credentialsId: "secret4_${credentialSuffix}", variable: 'SECRET4'),
                string(credentialsId: "secret5_${credentialSuffix}", variable: 'SECRET5'),
                string(credentialsId: "secret6_${credentialSuffix}", variable: 'SECRET6')
            ]
        ) {
            sh """
                export DEPLOYMENT_ENVIRONMENT=${ENVIRONMENT}
                source ~/.bashrc
                echo 'parametrized credentials!'
            """
        }
    }
}
...