所以我不得不做了很多不同的再现,除非在阶段之前设置了环境,否则没有成功。我正在尝试根据im中的分支来定义aws creds的环境。qa然后对环境使用qa证书,但当它处于阶段阶段时不会进行设置
  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"'
        }
    }如果我显然是在管道中的阶段阶段之前设置它,那么它当然可以工作。
  agent {
    docker {
      image '/terraform-npm:latest'
      registryCredentialsId 'dockerhubPW'
    }
  }
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"
    }
  stages {
    stage('Initialize Dev Environment') {
        when {
            branch 'dev'
          }
        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"'
        }
    }我的问题是,有没有一种方法可以在阶段阶段之前设置环境变量,但根据分支有条件地设置?
发布于 2020-07-11 22:18:13
嗯,是的,确实有。
第一种选择:你可以运行脚本和声明管道的组合(请注意,我还没有检查它的工作情况,这只是为了让你走上正确的道路):
// 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'
        }
    }
}另一种选择是在steps中使用withEnv指令
    stage('Initialize Dev Environment') {
        when {
            branch 'dev'
        }
        steps {
            withEnv(['AWS_REGION=us-west-2']) {
                sh 'echo $AWS_REGION'
        }
    }发布于 2020-07-12 10:56:53
谢谢你MaratC给我指引了正确的道路,这对我很有帮助。下面是我使用的
      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'
        }
      }https://stackoverflow.com/questions/62849968
复制相似问题