【问题标题】:Passing/Injecting/Referring Environment variables from Jenkins file to Shared Library which has the generic code将环境变量从 Jenkins 文件传递​​/注入/引用到具有通用代码的共享库
【发布时间】:2021-05-20 02:06:17
【问题描述】:

我有一个用于所有存储库的通用 Jenkins 共享库,如下所示

vars/_publish.groovy

def call(opts) {
    pipeline {
        environment {
            abc= credentials(’abc')
            def= credentials(‘def’)
 
        }
        stages {
            stage('Build') {
                steps{
                    sh ‘docker build'
                }
            }

jenkinsfile

@Library('my-shared-library@branch') _

_publish() {
}

这适用于 1 项单一服务。现在我想为所有服务/项目保留这个 jenkins 共享库,但每个服务都有不同的环境变量。

vars/_publish.groovy 中的环境块 {} 有 10 个 env 变量,这些变量对于所有项目/服务都不是恒定的。这些值因项目/服务而异。 如何将 env 变量传递给这个 jenkins 共享库以用于不同的项目?每个项目/服务都有不同的 Jenkins 管道。我可以将变量从 jenkinsfile 传递到共享库吗? 有人可以帮忙吗?

【问题讨论】:

    标签: jenkins environment-variables jenkins-pipeline jenkins-groovy jenkins-shared-libraries


    【解决方案1】:

    您可以借助 Jenkins 文件中的 withEnv (Documentation) 方法传递它们。

    @Library('my-shared-library@branch') _
    
    node(''){
     withEnv([
      “credId='id-cred'”,
      “y=20”
     ]){
      _publish() {}
     }
    }
    
    
    // shared lib
    
    def call(opts) {
      stage('Build') {
      echo "env is ${env.credId}"
              withCredentialswithCredentials([usernamePassword(credentialsId: env.credId, usernameVariable: 'USER', passwordVariable: 'PASSWORD')]){  
                 sh ‘docker build'
               }
            }
    }
    
            
    

    【讨论】:

    • ` @Library('my-shared-library@branch') _ withEnv([ abc= 'credentials('abc')', def= 'credentials('def')' ]) { _publish() {} } ` 我在 org.jenkinsci.plugins.workflow.steps.EnvStep.(EnvStep.java:51) 处收到以下错误 `java.lang.NullPointerException 原因:java.lang.reflect。调用目标异常`
    • 您真的需要共享库中的声明性管道吗? withEnv 需要在 node(){} 块内。但是,由于您在共享库中使用声明性管道,我认为它也会失败。您可以切换到共享库中的脚本管道吗?
    • 我仍然在 org.jenkinsci.plugins.workflow.steps.EnvStep.(EnvStep.java:51) 处收到相同的错误 java.lang.NullPointerException 原因:java.lang.reflect .InvocationTargetException
    • credId='id-cred' 是 jenkins 的凭据,对吗?
    • @SaifinaMaredia 请检查 withEnv 中的引号。 withEnv([“envname=envvalue”,”envname2=envvalue2”])
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多