Условный набор переменных среды Jenkins - PullRequest
0 голосов
/ 11 июля 2020

Так что мне пришлось сделать много разных воспроизведений этого безуспешно, если только среда не была установлена ​​до стадий. Я пытаюсь определить среду для aws кредитов в зависимости от ветки im in. Qa затем используйте qa creds для env, НО он не устанавливается, когда он находится внутри фазы этапа

  agent {
    docker {
      image '/terraform-npm:latest'
      registryCredentialsId 'dockerhubPW'
    }
  }

  stages {
    stage('Initialize Dev Environment') {
        when {
            branch 'dev'
          }
        environment {
              TF_VAR_aws_access_key     = credentials('dev-aws-access-key-id')
              TF_VAR_aws_secret_key = credentials('dev-aws-secret-access-key')
              AWS_ACCESS_KEY_ID     = credentials('dev-aws-access-key-id')
              AWS_SECRET_ACCESS_KEY = credentials('dev-aws-secret-access-key')
              AWS_REGION = "us-west-2"
          }
        steps {
          sh 'terraform init -backend-config="bucket=${GIT_BRANCH}-terraform-state" -backend-config="dynamodb_table=${GIT_BRANCH}-terraform-state-locking" -backend-config="region=$AWS_REGION" -backend-config="key=${GIT_BRANCH}-terraform-state/terraform.tfstate"'
        }
    }

IF, очевидно установите его перед этапом этапа в конвейере, конечно, он работает.

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Спасибо, Марат C за то, что направил меня по правильному пути, определенно помогло. вот что я использовал

      steps {
          withCredentials([string(credentialsId: 'qa-aws-access-key-id', variable: 'TF_VAR_aws_access_key'),string(credentialsId: 'qa-aws-secret-access-key', variable: 'TF_VAR_aws_secret_key'),string(credentialsId: 'qa-aws-access-key-id', variable: 'AWS_ACCESS_KEY_ID'),string(credentialsId: 'qa-aws-secret-access-key', variable: 'AWS_SECRET_ACCESS_KEY')]) 
          {
        sh 'terraform plan -var-file=${GIT_BRANCH}.tfvars -out=${GIT_BRANCH}-output.plan'
        }
      }
0 голосов
/ 11 июля 2020

Ну да, есть.

Первый вариант: вы можете запустить комбинацию сценариев и декларативного конвейера (обратите внимание, что я не проверял, работает ли он, это просто для того, чтобы path):


// scripted pipeline
node('master') {
    stage("Init variables") {
        if (env.GIT_BRANCH == 'dev') {
            env.AWS_REGION = "us-west-2"
        }
        else {
        // ...
        }
    }
}

// declarative pipeline
pipeline { 
agent {
    docker {
      image '/terraform-npm:latest'
      registryCredentialsId 'dockerhubPW'
    }
  }

  stages {
    stage('Use variables') {
        steps {
          sh 'echo $AWS_REGION'
        }
    }
}

Другой вариант - использовать директиву withEnv внутри steps:

    stage('Initialize Dev Environment') {
        when {
            branch 'dev'
        }
        steps {
            withEnv(['AWS_REGION=us-west-2']) {
                sh 'echo $AWS_REGION'
        }
    }
...