Jenkinsfile - вопросы агентов - PullRequest
       6

Jenkinsfile - вопросы агентов

0 голосов
/ 21 сентября 2018

У меня есть два вопроса к следующему примеру:

pipeline {
    agent { label "docker" }
    stages {
        stage('Build') {
            agent {
                docker {
                    image 'maven:3.5.0-jdk-8'
                }
            }
            steps {
                ...
            }
        }
    }
}

Вопрос 1:

Когда я объявляю агента на верхнем уровне Jenkinsfile, это означает, что он будетиспользуется для всех следующих этапов.Так в чем же разница между:

agent { label "docker" }

и

agent {
    docker {
        image 'maven:3.5.0-jdk-8'
    }
}

Первый из них будет использовать агент Docker, а второй будет использовать агент Docker с образом Maven в качестве исполняемой среды?Где сконфигурирован / установлен агент метки «docker»?

Вопрос 2:

Как работает метка label ?Я знаю, что где-то уже создан агент, и, используя метку, я просто указываю на него - как в примере выше: по умолчанию я использую агент "docker"?это также означает, что в течение steps {...} этот агент будет переопределен maven agent?

Вопрос 3:

Последний вопрос для следующего примера:

pipeline {

    agent {
       docker {
            image 'maven:3-alpine'
            args '-v ... -e ...'
       }
    }

    stages {
        stage('Maven Build') {
            steps {
                sh '...'
            }
        }
        stage('Docker push') {
            agent { 
                docker 'openjdk:8-jdk-alpine' 
            } 
            steps {
                script {
                    docker.build("my-image")
                }
            }
        }
    }
    post {
        ...
    }
}

Я хочу построить первый этап, используя докер-контейнер с maven: 3-alpine image.Во время сборки выводится следующая ошибка:

...tmp/durable-54b54bdc/script.sh: line 1: docker: not found

Итак, я изменил этот пример, вот рабочий результат:

pipeline {

    agent any

    stages {
        stage('Docker push') {
            steps {
                script {
                    docker.build("my-image")
                }
            }
        }
    }
}

Как это работает агент любой вэтот случай?Какой агент может выполнить docker.build?

1 Ответ

0 голосов
/ 21 сентября 2018

Ответ 1:

agent { label "docker" }

При попытке найти агента с меткой docker и выполнить действия в этом агенте.

agent {
    docker {
        image 'maven:3.5.0-jdk-8'
    }
}

Это попытается получить образ докера с именем maven:3.x.x, запустить контейнер и выполнить шаги, упомянутые в конвейере.Если вы используете MultiJob, это будет выполняться в ведомом устройстве с меткой, основанной на этой конфигурации:

enter image description here

Ответ 2:

Определение agent на верхнем уровне конвейера гарантирует, что исполнитель будет назначен агенту с пометкой docker.Насколько мне известно, я предполагаю, что в агенте с пометкой docker будет создан докер-контейнер, а внутри контейнера будут выполнены шаги.

Ответ 3:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...