Это мой Jenkinsfile:
pipeline {
agent {
dockerfile true
}
stages {
stage('Run tests') {
steps {
sh 'pwd'
sh 'vendor/bin/phpunit'
}
}
}
}
Я работаю в Jenkins, и хотя я могу успешно создать образ, «Выполнить тесты» запускается вне новогоКонтейнер в хосте.Это не хорошо;Я хочу, чтобы команда запускалась из нового контейнера, созданного с помощью агента dockerfile.
Я знаю, что команда оболочки запускается на хосте, потому что я уже попробовал отладку с sh pwd
длякоторый я получил /var/jenkins_home/workspace/youtube-delete-tracker_jenkins
.
Вот конец вывода в консоли для задания Jenkins:
Step 18/18 : RUN chmod a+rw database/
---> Using cache
---> 0fedd44ea512
Successfully built 0fedd44ea512
Successfully tagged e74bf5ee4aa59afc2c4524c57a81bdff8a341140:latest
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // stage
[Pipeline] sh
+ docker inspect -f . e74bf5ee4aa59afc2c4524c57a81bdff8a341140
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:116 -w /var/jenkins_home/workspace/ube-delete-tracker_stackoverflow -v /var/jenkins_home/workspace/ube-delete-tracker_stackoverflow:/var/jenkins_home/workspace/ube-delete-tracker_stackoverflow:rw,z -v /var/jenkins_home/workspace/ube-delete-tracker_stackoverflow@tmp:/var/jenkins_home/workspace/ube-delete-tracker_stackoverflow@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 ******** e74bf5ee4aa59afc2c4524c57a81bdff8a341140 cat
$ docker top 64bbdf257492046835d7cfc17413fb2d78c858234aa5936d7427721f0038742b -eo pid,comm
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Run tests)
[Pipeline] sh
+ pwd
/var/jenkins_home/workspace/ube-delete-tracker_stackoverflow
[Pipeline] sh
+ vendor/bin/phpunit
/var/jenkins_home/workspace/ube-delete-tracker_stackoverflow@tmp/durable-4049973d/script.sh: 1: /var/jenkins_home/workspace/ube-delete-tracker_stackoverflow@tmp/durable-4049973d/script.sh: vendor/bin/phpunit: not found
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
$ docker stop --time=1 64bbdf257492046835d7cfc17413fb2d78c858234aa5936d7427721f0038742b
$ docker rm -f 64bbdf257492046835d7cfc17413fb2d78c858234aa5936d7427721f0038742b
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Как видите, pwd
дает мне путь нахост (папка заданий Jenkins) и vendor/bin/phpunit
не были найдены (что должно быть в контейнере, поскольку менеджер пакетов успешно скомпилировал его в соответствии с выводом сборки докера, который я не включил).
Так как мне запустить команды sh из контейнера?Или как получить имя тега изображения, сгенерированное агентом dockerfile, чтобы я мог вручную выполнить docker run
из-за пределов нового контейнера для запуска нового контейнера?
ИНФОРМАЦИЯ: Проблема, похоже, не возникаетЯ имею в виду декларативные конвейеры, потому что я только что попытался сделать это в императивном стиле, а также получить тот же pwd
контейнера Jenkins: https://github.com/amcsi/youtube-delete-tracker/blob/4bf584a358c9fecf02bc239469355a2db5816905/Jenkinsfile.groovy#L6
INFO 2: Сначала я думал, что это Jenkins-проблема в Docker, и я написал свой вопрос как таковой ... но оказалось, что у меня возникает та же проблема, если я запускаю Jenkins на своем хосте, а не в контейнере.
ИНФОРМАЦИЯ 3: Версии ...
Jenkins ver. 2.150.1
Docker version 18.09.0, build 4d60db4
Ubuntu 18.04.1 LTS