Сборка с помощью docker в общей библиотеке jenkins

Я пытаюсь определить конвейеры Jenkins как (общие) объекты, как это сделано здесь. Но я хочу добавить возможность запускать действия сборки внутри контейнера докеров.

Мой Jenkinsfile работает так:

@Library('ci-scons-jenkins') _

def image = docker.image("praqma/native-scons")
org.ipiq.buildci.scons.SConsPipeline.builder(this, steps, image).buildDefaultPipeline().execute()

Как видите, экземпляр докера создается в файле Jenkins и передается объекту построителя для создания построителя. Пока все работает. Этапы выполнены inside контейнером.

Теперь я хочу передать создание экземпляра Docker классу конвейера SconsPipeline.groovy. Я пытался сделать это с помощью:

// I hoped it would import `Docker`
import org.jenkinsci.plugins.docker.workflow.*

class SConsPipeline implements Serializable {

    def script
    def stages
    def image
    DSL steps

    static builder(script, DSL steps) {
        // create the image to use in this build instead of using a parameter
        def docker = Docker(script)
        image = docker.image("praqma/native-scons")
        return new Builder(script, steps, image)
    }

Но Дженкинсу не удается найти нужный объект:

groovy.lang.MissingMethodException: No signature of method: java.lang.Class.Docker() is applicable for argument types: (WorkflowScript) values: 

Итак, мой вопрос в том, как использовать докер-рабочий процесс внутри объектного кода в общей библиотеке.

Мое первое предположение заключается в том, что плагин не импортируется правильно или что вы не создали экземпляр объекта из класса внутри плагина для вызова в вашем методе.

Matt Schuchard 10.08.2018 16:42

Спасибо за ответ, Мэтт. Из-за ошибки, которую я получаю, кажется, что это так. Я просмотрел исходный код плагин, но не вижу проблемы. В любом случае, у меня впереди ОГРОМНЫЙ путь с Groovy и Jenkins, поэтому я ожидаю, что в конце я найду свою ошибку. Спасибо и BR.

Natxo.Piq 14.08.2018 08:47

На самом деле, при втором взгляде кажется, что вы сделали и то, и другое правильно. Похоже, ваша настоящая проблема в том, что вы вызываете конструктор Docker() с неправильными типами ввода.

Matt Schuchard 14.08.2018 15:45
2
3
1 705
1

Ответы 1

Следует попробовать :

import org.jenkinsci.plugins.docker.workflow.*
import org.jenkinsci.plugins.workflow.cps.CpsScript


static builder(script, DSL steps) {
    // create the image to use in this build instead of using a parameter
    def docker script.getClass().getClassLoader().loadClass("org.jenkinsci.plugins.docker.workflow.Docker").getConstructor(CpsScript.class).newInstance(script);
    image = docker.image("praqma/native-scons")
    return new Builder(script, steps, image)
}

Другие вопросы по теме