如何在Jenkins管道环境部分中获取bash脚本的源代码

如何在Jenkins管道环境部分中获取bash脚本的源代码,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我有一个现有的bash脚本,它只设置了大约100个变量,例如路径、版本号等,这些变量是我们所有构建作业的第一部分。 我正在将其中一些构建作业转移到jenkins管道,并试图找到是否有方法在jenkins环境阶段中从该文件中获取变量,以便在构建管道的后续步骤中使用 我觉得我错过了一些东西,因为我对groovy不是很熟悉。 我认为可能使用System.getenv,但这需要设置它们,并且我认为在sh脚本块中寻找它不会持久 下面是我正在写但不起作用的东西(虽然给出了一个概念性的想法) 任何建议都将不胜

我有一个现有的bash脚本,它只设置了大约100个变量,例如路径、版本号等,这些变量是我们所有构建作业的第一部分。 我正在将其中一些构建作业转移到jenkins管道,并试图找到是否有方法在jenkins环境阶段中从该文件中获取变量,以便在构建管道的后续步骤中使用

我觉得我错过了一些东西,因为我对groovy不是很熟悉。 我认为可能使用System.getenv,但这需要设置它们,并且我认为在sh脚本块中寻找它不会持久

下面是我正在写但不起作用的东西(虽然给出了一个概念性的想法)

任何建议都将不胜感激

#!/usr/bin/env groovy

pipeline {
agent {label "${params.VM_to_use}"}

    environment {
        TARGET_VM = "${params.VM_to_use}"
        //I'd like to be able to access vars globally or if better way I'm up for it.
    }

    stages {
        stage ('Get vars in preperation for subsequent build steps...'){
            steps {
                sh '''
                    source /net/machine1/globalvars/functions/my_global_vars.sh
                    # product_123_version number in that file.
                '''
                script {
                    currentBuild.displayName = " ${env.product_123_version} - ${TARGET_VM}"
                    currentBuild.displayName = System.getenv("TESTVAR")
                }
            }
        }

        stage ('Build Step 2...'){
            steps {
                sh '''
                    # pass version to script...
                    /build_step_2.sh ${env.product_123_version}

                '''

            }
        }
    }

}

有两种加载方式(或jenkins中的源文件):-

  • 使用jenkins的函数(用于从本地路径加载文件)
  • 使用函数(用于加载位于远程位置的文件,即加载扩展名为.groovy的任何仅限SCM的文件)
  • 该文件应包含以下数据(loadFile.sh或loadFile.groovy):-

    // Comments should start like this one
    env.Location='Pune'
    env.Day='Friday'
    env.Job_UI='Jenkins'
    
    您可以对以下代码进行一些修改:-

    stages {
               stage('Load') {    
                  agent { node { label 'master' } }
                    steps {
                      script {
                        // From the below two lines of code, you can use the one suits your need better
                        // def localenv = fileLoader.fromGit ("./Vars/loadFile.sh", "GITURL", 'BRANCH_NAME', 'Credentials', '')
                           load '/u/users/admin/loadFile.sh'
                                }
                            }
                        }    
               stage('Print') {    
                  agent { node { label 'master' } }
                    steps {
                       script {
                                  echo "Location :- ${env.Location}"
                                  echo "Day :- ${env.Day}"
                                  echo "Job :- ${env.Job_UI}"
                              }
                           }
                     }
                }
        }
    

    谢谢你提供这些有用的信息!虽然这可能是我的用户错误,但提供的工作流似乎无法加载bash脚本,或者至少,它无法与我的脚本一起工作,因为它试图将以#开头的注释解释为某种东西,但无法加载。我认为,要想让它起作用,我必须通过删除#注释来更改脚本。对于exmaple,它正在尝试加载myGlobalVars.sh并返回Script1.groovy:3:意外字符:“#”@第3行第1列。由于jenkins认为您正在加载的文件是groovy,您需要使用“/”而不是“#”添加注释,并在应答中更新!就你的情况而言,你可以用“/”替换“#”,这对我来说很有吸引力。这个答案应该被接受。