#jenkins #jenkins-pipeline
#дженкинс #дженкинс-конвейер
Вопрос:
В моем конвейерном коде я использую docker compose для создания всех локальных изображений, а затем помечаю их тегами и отправляю в репозиторий docker. Проблема в том, что я не могу запускать несколько сборок одновременно, так как я выполняю вход в docker для нажатия, а затем выполняю выход из docker.
Как я могу обрабатывать одновременный вход в docker.
Ответ №1:
Вы можете использовать изоляцию в виде контейнеров Docker в конвейере Дженкинса:https://www.jenkins.io/doc/book/pipeline/docker /
Каждый запуск запускает отдельный контейнер с Docker compose и гарантирует, что текущий рабочий каталог смонтирован внутри этого контейнера. Любые входы / выходы из docker будут происходить только внутри этого контейнера, поэтому все хорошо изолировано, что позволяет выполнять несколько одновременных запусков.
pipeline {
agent {
docker {
image 'docker/compose:1.26.2'
registryUrl '[YOUR REGISTRY URL]'
registryCredentialsId '[YOUR_USERNAME PASSWORD_CREDENTIALS_ID]'
args '-u 1000:[GROUP_ID_OF_THE_DOCKER_GROUP] -v /var/run/docker.sock:/var/run/docker.sock --entrypoint=""'
}
}
stages {
stage('Package') {
steps {
sh 'docker version'
sh 'docker-compose version'
}
}
}
}
В этом примере мы говорим Дженкинсу, чтобы он выполнял работу внутри контейнера Docker, содержащего Docker compose. Этот контейнер может быть аутентифицирован в частном реестре Docker, указав registryUrl
и registryCredentialsId
(из хранилища учетных данных Дженкинса). Аргумент args
, который мы передаем контейнеру, гарантирует, что 1) сокет Docker является томом, установленным в контейнер (чтобы предотвратить unix:////var/run/docker.носок не найден, запущен ли Docker? ошибки) и 2) мы запускаемся как пользователь в группе Docker (предотвращает ошибки отказа в разрешении). Этот идентификатор группы группы docker можно найти, выполнив cut -d: -f3 < <(getent group sudo)
в агенте Jenkins, который запускает этот конвейер.
В stage
теперь доступны как Docker, так и Docker compose, которые могут получить доступ к вашему частному реестру.
Комментарии:
1. Можем ли мы реализовать это без использования нового контейнера docker