如何在Jenkins Pipeline环境部分中获取bash脚本的资源

时间:2019-06-06 19:16:42

标签: jenkins jenkins-pipeline

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

                '''

            }
        }
    }

}

1 个答案:

答案 0 :(得分:0)

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

  1. 使用jenkins的load功能(用于从本地路径加载文件)
  2. 使用fileLoader函数(用于加载位于远程位置的文件,即,将加载任何扩展名为.groovy的仅SCM文件)

文件应包含(loadFile.sh或loadFile.groovy)如下数据:-

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

您可以使用以下代码进行一些修改:-

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>