【问题标题】:How to source bash script in Jenkins Pipeline enviornment section如何在 Jenkins Pipeline 环境部分中获取 bash 脚本
【发布时间】:2019-10-22 08:08:31
【问题描述】:

我有一个现有的 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-pipeline


    【解决方案1】:

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

    1. 使用jenkins的load函数(用于从本地路径加载文件)
    2. 使用fileLoader 函数(用于加载位于远程位置的文件,即将加载任何扩展名为.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 脚本,或者至少,它不适用于我的,因为它试图将 # 开头的 cmets 解释为某些东西并且无法加载。我认为要使其正常工作,我必须通过删除#cmets 来更改脚本。例如,它正在尝试加载 myGlobalVars.sh 并返回 Script1.groovy: 3: unexpected char: '#' @ line 3, column 1。
    • 由于 jenkins 认为您正在加载的文件是 groovy,您需要使用“//”而不是“#”来放置 cmets,并在答案中更新!
    • 对于您的情况,您可以将“#”替换为“//”
    • 对我来说就像一个魅力。这个答案应该被接受。
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2017-02-03
    • 2017-11-23
    • 2017-03-06
    • 2020-08-21
    • 1970-01-01
    • 2019-09-24
    相关资源
    最近更新 更多