Jenkinsfile Запуск задания из плагина триггера quay.io

Я пытаюсь перейти от проекта Freestyle к созданию многоотраслевого конвейера. Я хотел бы, чтобы мой Jenkinsfile запускался, когда новый контейнер был помещен в мой репозиторий Quay.io. В проекте Freestyle я могу добиться этого с помощью плагина Quay.io Trigger. Переходя к конвейеру сборки Multibranch, я обнаружил этот сообщение, в котором описывается, как запускать триггер 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?


person iotapi322    schedule 03.10.2017    source источник


Ответы (1)


Ответ:

Если вы приведете коллекцию репозиториев как java.util.Set в Jenkinsfile, это будет работать должным образом. Используя приведенный выше список, вам нужно сделать следующее:

#!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. Текущий плагин не разработан с учетом Jenkins Pipeline, поэтому он использует Set в конструкторе для коллекции репозитория.

Здесь происходит исключение приведения, поскольку Groovy обрабатывает список строк как массив, и не может автоматически преобразовать его в Set.

Явно создавая список репозиториев как Set, плагин можно настроить в Jenkinsfile.

Надеюсь это поможет!

person benschumacher    schedule 14.02.2018