Как шаг конвейера Дженкинса получает заявление от заводных замыканий - PullRequest
0 голосов
/ 05 ноября 2019

Таким образом, шаг конвейера докера работает следующим образом:

docker.image('maven:3.3.3-jdk-8').inside {
  sh "git clone .."
  sh 'mvn -B clean install'
}

, где каждый оператор замыкания выполняется на работающем контейнере, обернутом docker exec

Я хочу использовать ту же технику, но на контейнере побежал docker-compose.

Я хочу создать шаг (если его там уже нет).

Предположим, на ранней стадии у меня есть набор служб, работающих с docker-compose. Я знаю идентификатор контейнера, в котором я хочу выполнить несколько шагов jenkins. Шаг будет выглядеть следующим образом:

withContainer(<id_of_the_container>) {
    sh "date"
    sh "cat mydog"
}

, где каждый оператор в замыкании будет выполняться в контейнере, как если бы я фактически делал следующее:

docker exec <id_of_the_container> sh "date"
docker exec <id_of_the_container> sh "cat mydog"

Я могуначать определять шаг, подобный

def withContainer(containerId, Closure cl) {
   // I know I need to do something like
   // docker exec $containerId ...
}

, как мне получить доступ к операторам в замыкании? Или я поступаю неправильно?

1 Ответ

0 голосов
/ 06 ноября 2019

Я полагаю, это связано с вашей проблемой:

Возможность запуска docker-exec и т. Д. Из рабочего процесса

https://issues.jenkins -ci.org / browse /JENKINS-26178

и разрешение: Won't Do

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

//this funstion just for test purpose in a usual groovyconsole
//def sh(a){println "sh $a"}

class DockerHelper{
    Object delegate
    String containerId

    def withContainer(id, Closure cl){
        this.containerId=id
        this.with(cl)
        return this
    }

    def exec(command){
        delegate.sh(script: "docker exec -it $containerId /bin/bash -c '$command'")
    }
}

new DockerHelper(delegate:this).withContainer('my-running-mvn'){
    exec "date"
    exec "cat mydog"
}
...