Jenkinsile全局变量在“阶段”部分之外

时间:2019-09-24 17:25:09

标签: jenkins jenkins-pipeline

我想设置所有阶段都可用的变量。取决于所选参数的变量,如下所示:

parameters {
      choice(name: 'Environment', choices: ['Dev', 'Stage'], description: 'Deploy to chosen environment')
  }

environment { 
       //set the config file which depends on params.Environment e.g.
       //case params.Environment of
       //   Dev -> CONFIG_FILE="deploy/file_1.conf"
       //   Stage -> CONFIG_FILE="deploy/other_file.conf"
  }

stages {
   stage('check-params') {   
     steps {
        sh "echo \"config file: ${CONFIG_FILE}\""
        }
     }
    stage('build-frontend') {   
     steps {
        sh "build-fronted.sh ${CONFIG_FILE}"
        }
     }
    stage('deploy-backend') {   
     steps {
        sh "deploy-backend.sh ${CONFIG_FILE}"
        }
     }

,但是根据Pipeline Syntax,这是不允许的(我收到错误:预期名称=值对)。

有人知道in this post的每个阶段->步骤中不使用scripts { ... }怎么能实现?

1 个答案:

答案 0 :(得分:3)

您可以有一个初始化阶段,该阶段将根据参数设置正确的变量,如下所示:

parameters {
    choice(name: 'Environment', choices: ['Dev', 'Stage'], description: 'Deploy to chosen environment')
}

environment { 
       //set the config file which depends on params.Environment e.g.
       //case params.Environment of
       //   Dev -> CONFIG_FILE="deploy/file_1.conf"
       //   Stage -> CONFIG_FILE="deploy/other_file.conf"
}

stages {

    // ----------------------------
    stage('init-env-variables') {
        steps {
            script {
                switch(params.Environment) {
                    case "Dev":
                        env.setProperty('CONFIG_FILE', 'deploy/file_1.conf')
                        break;
                    case "Stage":
                        env.setProperty('CONFIG_FILE', 'deploy/other_file.conf')
                        break;
                }
            }
        }
    }
    // -----------------------

    stage('check-params') {   
        steps {
            sh "echo \"config file: ${CONFIG_FILE}\""
        }
    }
    stage('build-frontend') {   
        steps {
            sh "build-fronted.sh ${CONFIG_FILE}"
        }
    }
    stage('deploy-backend') {   
        steps {
            sh "deploy-backend.sh ${CONFIG_FILE}"
        }
    }