当前位置: 首页 > 面试题库 >

jenkins管道:无法将构建参数传递给共享库变量

鲁建茗
2023-03-14
问题内容

基本上,没有多余的废话,我无法将构建属性传递给Library var调用。

jenkinsfile相关的块:

tc_test{
    repo = 'test1'
    folder = 'test2'
    submodules = true
    refs = params.GitCheckout
}

导致错误

java.lang.NullPointerException:无法在空对象上获取属性’GitCheckout’

但是,这可行:

def a1 = params.GitCheckout
tc_test{
    repo = 'test1'
    folder = 'test2'
    submodules = true
    refs = a1
}

共享库中vars / tc_test.groovy的内容:

def call ( body ) {

    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    try {
        body()
    } catch(e) {
        currentBuild.result = "FAILURE";
        throw e;
    } finally {

        config.each{ k, v -> println "${k}:${v}" }

    }
}

我对groovy不太满意,所以这可能很明显。


问题答案:

得到了詹金斯JIRA 的答案。

一个小的解决方法是使用映射而不是闭包:

tc_test ([
  repo: 'test1',
  folder: 'test2',
  submodules: true,
  refs = params.GitCheckout
])

可能有缺点,但是对我来说效果很好。

仍然必须将params作为参数来访问它们,但是至少现在代码更有意义了。



 类似资料:
  • 问题内容: 我创建了一个新的詹金斯管道。(当前)使用单个名为的布尔选项对管道进行参数化。我的管道脚本是: 当我手动创建带有选中项的项目时,将按预期回显“ true”。但是,环境变量列表未显示。 我能够显示是否将呼叫包装在一个块中: 我将拥有比这更多的参数,因此不需要单独指定每个参数。 有没有办法将所有构建参数传送到节点的环境? 问题答案: 关键是,在管道脚本中,作业参数不会像常规作业一样自动注入到

  • 我正在尝试从使用自由式詹金斯构建切换到管道项目。 我喜欢它的许多方面,但我希望我可以使用多分支管道,因为它更适合我们公司,但目前这不是一个选择。 我们目前所做的是创建一个名为

  • 问题内容: 我在jenkins 2.x上并使用管道。 我已经配置了要使用param构建的作业,并具有一个字符串param: 我也从github(脚本的管道)获得Jenkinsfile: 现在在我的Jenkinsfile中,我正在使用param:$ {githubUrl}并抛出错误: stdout:stderr:致命:’$ {githubUrl}’似乎不是git存储库 因此,如果直接编写管道脚本,则

  • 问题内容: 我有一个名为 buildall 的管道作业,如下所示: 该 buildall 作业有25个参数。我想将所有 buildall 的参数传递给 job1 。有没有一种简单的方法可以代替手动指定每个参数呢? 在此问题中:向下游作业传递管道参数是一个子问题,但从未得到回答: 甚至更好的是,有没有一种麻烦的方法可以将所有管道参数传递给下游作业。 我有同样的问题。 问题答案: 以下似乎有效(尽管我

  • 问题内容: 有没有办法在Powershell脚本中使用Groovy变量?我的示例脚本如下。 问题答案: 您不能在单引号或三单引号中插入变量。使用三重双引号:

  • 我们试图切换到jenkins管道,但我在groovy/java的低水平阻止了我们建立一个共享库。 这里是我的共享库(位于bitbucket中git repo的{root}/src/com/pipeline.groovy中)我必须承认,我在这里做什么都不知道,因为我不知道包裹的定义 Jenkins的管道看起来 通过所有这些设置,我最终得到了错误: 我怀疑我的漂亮包裹的定义,但我坚持这样做。 非常欢迎