Jenkins环境变量条件集

时间:2020-07-11 13:46:08

标签: jenkins jenkins-pipeline jenkins-groovy

因此,除非将环境设置在阶段之前,否则我必须对此进行很多不同的翻译,否则无法成功。我正在尝试根据分支im in定义aws信誉的环境。qa然后将qa信誉用于环境阶段中未设置的env BUT

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

我的问题是,是否有一种方法可以在阶段阶段BUT之前根据分支有条件地设置环境变量?

2 个答案:

答案 0 :(得分:0)

是的,有。

第一个选择:您可以运行脚本化和声明性管道的组合(请注意,我没有检查它是否起作用,这只是为了向您发送正确的路径):


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

答案 1 :(得分:0)

感谢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'
        }
      }