【问题标题】:Jenkinsfile Trigger a job from quay.io trigger pluginJenkinsfile 从 quay.io 触发器插件触发作业
【发布时间】:2017-10-03 19:53:08
【问题描述】:

我正在尝试从 Freestyle 项目迁移到多分支管道构建。我希望在将新容器推送到我的 Quay.io 存储库时触发我的 Jenkinsfile。在 Freestyle 项目中,我可以使用 Quay.io 触发器插件来完成此任务。 转到 Multibranch 构建管道,我发现了这个 post,它描述了如何在 dockerhub 触发器上触发。我还使用了 Jenkins 流水线语法“向导”来生成要添加到我的 Jenkinsfile 的代码:

properties([[$class: 'ScannerJobProperty', doNotScan: false], [$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false], [$class: 'ThrottleJobProperty', categories: [], limitOneJobWithMatchingParams: false, maxConcurrentPerNode: 0, maxConcurrentTotal: 0, paramsToUseForLimit: '', throttleEnabled: false, throttleOption: 'project'], pipelineTriggers([[$class: 'QuayIoTrigger', repositories: ['hostedsparkbots/janitorbot-timer', 'hostedsparkbots/janitorbot', 'hostedsparkbots/sparky']]])])

在上述情况下,当我扫描我的 github 存储库时,我会从 jenkins 控制台获得一堵 回溯:

java.lang.IllegalArgumentException: java.lang.ClassCastException@712ddbf9
    at sun.reflect.GeneratedMethodAccessor4447.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jenkinsci.plugins.structs.describable.Setter$1.set(Setter.java:33)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:338)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:261)
Caused: java.lang.IllegalArgumentException: Could not instantiate {repositories=[hostedsparkbots/janitorbot-timer, hostedsparkbots/janitorbot, hostedsparkbots/sparky]} for QuayIoTrigger(repositories?: String[])
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:380)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:461)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:365)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.buildArguments(DescribableModel.java:318)
    at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:259)
Caused: java.lang.IllegalArgumentException: Could not instantiate {triggers=[{$class=QuayIoTrigger, repositories=

真的有人在 Jenkinsfile 中工作吗?

【问题讨论】:

    标签: docker jenkins jenkins-pipeline webhooks dockerhub


    【解决方案1】:

    答案:

    如果您将存储库集合转换为 Jenkinsfile 中的 java.util.Set,则可以按预期工作。使用上面的列表,您会想要这样做:

    #!groovy
    @import java.util.Set  // this may not be required?
    properties([
        pipelineTriggers([[
            $class: 'QuayIoTrigger',
            repositories: (['hostedsparkbots/janitorbot-timer',
                            'hostedsparkbots/janitorbot',
                            'hostedsparkbots/sparky'] as Set)
        ]])
    ])
    

    背景:

    我自己一直在努力解决这个问题,但最终通过 Quay.io 触发器插件中的source code 进行了挖掘。当前插件在设计时并未考虑到 Jenkins Pipeline,因此在存储库集合的构造函数中使用 it uses a Set

    这是发生强制转换异常的地方,因为 Groovy 将字符串列表视为数组,因此无法自动将其强制转换为 Set。

    通过将存储库列表显式创建为 Set,插件可在 Jenkinsfile 中进行配置。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多