Я хотел создать класс в каталоге /src, который будет иметь доступ к докеру и другим шагам плагина.

Итак, у меня есть класс, который выглядит так:

class someClassName implements Serializable {
    def env
    def steps
    def docker

    someclassName(env, steps, docker){
        this.step = step
        this.docker = docker
        this.env = env
    }

    def runCommands(String img, List commands){
       docker.image(img).inside {
           commands.each {
             steps.sh it
           }
       }
    }

Теперь в Jenkinsfile у меня будет

@Library('name@branch') _
def x = new com.JenkinsLibrary.someClassName(env, steps, docker)
x.runCommands('maven:latest', ['mvn clean', 'mvn test'])

Что мне не нравится, так это то, как у меня есть конструктор для каждого объекта, чтобы я мог вызывать методы, принадлежащие этому объекту. Есть ли лучший объект, который я могу использовать для своего конструктора вместо использования env, steps, docker и т. Д.?

Кроме того, какие шаги конвейера доступны в объекте шагов? то же самое для env?

3
Z Y . 5 Май 2018 в 22:22

1 ответ

Лучший ответ

Попробуйте отправить по окружающим CPSScript:

class someClassName implements Serializable {
    def script

    someclassName(script){
        this.script = script
    }

    def runCommands(String img, List commands){
        script.docker.image(img).inside {
            commands.each {
                script.sh it
           }
       }
    }
}

И вы предоставляете сценарий, используя this в сценарии конвейера:

@Library('name@branch') _
def x = new com.JenkinsLibrary.someClassName(this)
x.runCommands('maven:latest', ['mvn clean', 'mvn test'])
4
mkobit 6 Май 2018 в 15:19