首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jenkins环境变量条件集

Jenkins环境变量条件集
EN

Stack Overflow用户
提问于 2020-07-11 21:46:09
回答 2查看 448关注 0票数 0

所以我不得不做了很多不同的再现,除非在阶段之前设置了环境,否则没有成功。我正在尝试根据im中的分支来定义aws creds的环境。qa然后对环境使用qa证书,但当它处于阶段阶段时不会进行设置

代码语言:javascript
运行
复制
  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"'
        }
    }

如果我显然是在管道中的阶段阶段之前设置它,那么它当然可以工作。

代码语言:javascript
运行
复制
  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"'
        }
    }

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-11 22:18:13

嗯,是的,确实有。

第一种选择:你可以运行脚本和声明管道的组合(请注意,我还没有检查它的工作情况,这只是为了让你走上正确的道路):

代码语言:javascript
运行
复制
// 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指令

代码语言:javascript
运行
复制
    stage('Initialize Dev Environment') {
        when {
            branch 'dev'
        }
        steps {
            withEnv(['AWS_REGION=us-west-2']) {
                sh 'echo $AWS_REGION'
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2020-07-12 10:56:53

谢谢你MaratC给我指引了正确的道路,这对我很有帮助。下面是我使用的

代码语言:javascript
运行
复制
      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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62849968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档