Вот ситуация:
Есть контейнер docker (Дженкинс). Я установил сокеты в свой контейнер, чтобы я мог выполнять команды docker внутри своего контейнера jenkins. Все настроено правильно, и у меня есть подчиненное устройство Jenkins, которое само является контейнером Ubuntu docker.
Я бы хотел запустить команду внутри отдельного docker контейнера, созданного Jenkinsfile. Плагин Docker Pipeline обещает предложить решение для этого общего требования.
Вот мой Jenkinsfile:
pipeline {
agent any
stages {
stage('Test') {
agent {
docker { image 'maven:3-alpine' }
}
steps {
sh 'mvn --version'
}
}
}
}
Запуск вышеупомянутого, где подчиненный узел jenkins не находится внутри docker контейнер работает как положено. Он печатает:
- mvn --version Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T19: 39: 06Z) Maven home: / usr / share / maven Java версия: 1.8.0_131, поставщик: Oracle Corporation Java home: /usr/lib/jvm/java-1.8-openjdk/jre Язык по умолчанию: en_US, кодировка платформы: UTF-8 Имя ОС: "linux ", версия:" 5.4.8-gentoo ", arch:" amd64 ", семейство:" unix "
Это также работает, когда я запускаю вышеупомянутое на Jenkins Master (который сам по себе является docker контейнером).
Однако, когда ведомое устройство работает (как контейнер Ubuntu docker), я получаю следующую ошибку. Fix-Jenkins-Local
- это имя репозитория github (ветви), содержащего файл Jenkinsfile:
Ведомый 1, кажется, работает внутри контейнера 5cf4397c3abff105818b2ab92e275fa8265bd491170f47723a8e2cef9b308a3b / Могут / не найдены / не найдены среди [] но / tmp / jenkins_workspace / workspace / Fix-Jenkins-Local@2@tmp не удалось найти среди [] $ docker run -t -d -u 1000: 1000 -w / tmp / jenkins_workspace / workspace / Fix-Jenkins-Local@2 -v / tmp / jenkins_workspace / workspace / Fix-Jenkins-Local@2: / tmp / jenkins_workspace / workspace / Fix-Jenkins-Local@2: rw, z -v / tmp / jenkins_workspace / workspace / Fix-Jenkins-Local@2@tmp: / tmp / jenkins_workspace / workspace / Fix-Jenkins-Local@2@tmp: rw, z -e ******** -e ******** -e ******** -e ******** -e ******* * -e ******** -e ******** -e ******** -e ******** -e ******* * -e ******** -e ******** -e ******** -e ******** -e ******* * -e ******** -e ******** -e ******** -e ******** -e ******* * -e ******** -e ******** -e ******** -e ******** -e ******* * -e ******** -e ******** -e ******** -e ******** -e ******* * -e ******** -e ******** maven: 3-альпийский ок t $ docker top 977b4035f431b617eab29e6b8292bc66fc71e3fed82af4788d89d6f9b803c4c7 -eo pid, комм [Pipeline] {[Pipeline] * [1083 *] процесс, по-видимому, никогда не запускался в / tmp / jenkins_workspace / works50 / временный_документ_3-й рабочей области 3 .plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS = true может прояснить проблему)
У кого-нибудь есть опыт запуска docker конвейерного плагина внутри контейнера jenkins docker? Любые мысли приветствуются.
Другой подход, который я пробовал без использования Docker Плагин конвейера здесь
Чтение другого SOF вопроса здесь , Похоже, вы должны помнить следующее:
Для работы внутри сервера Docker и агент Jenkins должны использовать одну и ту же файловую систему, чтобы можно было смонтировать рабочее пространство. Самый простой способ убедиться в том, что сервер Docker работает на локальном хосте (на том же компьютере, что и агент). В настоящее время ни плагин Jenkins, ни Docker CLI не будут автоматически определять случай, когда сервер работает удаленно; Когда Jenkins может обнаружить, что агент сам работает внутри контейнера Docker, он автоматически передаст аргумент --volumes-from во внутренний контейнер, гарантируя, что он может совместно использовать рабочее пространство с агентом.
Вот два снимка экрана, когда я успешно запускаю задание на главном сервере Jenkins (контейнер docker) и безуспешно на подчиненном устройстве (также * docker контейнер):
Master:
Раб: