Как обрабатывать одновременный вход в docker

#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