首页 > 解决方案 > “阶段”部分之外的 Jenkinsile 全局变量

问题描述

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

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

但根据管道语法,这是不允许的(我得到ERROR: Expected name=value pairs)。

有谁知道如何在不使用本文scripts { ... }所述的每个阶段->步骤的情况下实现这一目标?

标签: jenkinsjenkins-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('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}"
        }
    }


推荐阅读