Я новичок в Jenkins, и я хотел бы получить почти то же поведение, что и в GitLab CI для одного из моих проектов PHP.
Я использую Docker для тестирования своего проекта на нескольких версиях PHP.
Что я хочу?
Параллельно выполняю сборку и тестирование.
- Сборка создает мое приложение, исходники приходят из репозитория git, и я запускаю
composer install
команда. - Dockerfile хранится в
/var/lib/jenkins/Docker
- Мой Dockerfile имеет параметр (
PHP_VERSION
), который позволяет мне выбрать нужную версию PHP customWorkspace
кажется, работает
Вот мой Jenkinsfile, чтобы сделать это:
updateGitlabCommitStatus name: 'build', state: 'pending'
pipeline {
agent none
post {
failure {
updateGitlabCommitStatus name: 'build', state: 'failed'
}
success {
updateGitlabCommitStatus name: 'build', state: 'success'
}
}
stages {
stage('build') {
parallel {
stage('build-php5.4') {
agent {
dockerfile {
additionalBuildArgs '--build-arg PHP_VERSION=54'
dir '/var/lib/jenkins/Docker'
customWorkspace './build-php5.4'
}
}
steps {
sh 'pwd'
sh 'ls'
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
}
}
stage('build-php7.0') {
agent {
dockerfile {
additionalBuildArgs '--build-arg PHP_VERSION=70'
dir '/var/lib/jenkins/Docker'
customWorkspace './build-php7.0'
}
}
steps {
sh 'pwd'
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
}
}
}
}
stage('tests') {
parallel {
stage('test-php5.4') {
agent {
dockerfile {
additionalBuildArgs '--build-arg PHP_VERSION=54'
dir '/var/lib/jenkins/Docker'
customWorkspace './build-php5.4'
}
}
steps {
sh 'pwd'
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
}
}
stage('test-php7.0') {
agent {
dockerfile {
additionalBuildArgs '--build-arg PHP_VERSION=70'
dir '/var/lib/jenkins/Docker'
customWorkspace './build-php7.0'
}
}
steps {
sh 'pwd'
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
}
}
}
}
}
}
И вот результат:

Это выглядит хорошо, но это не так, и я не совсем понимаю, как это работает.
Как вы можете видеть, на этапе test-php54 используется последний созданный контейнер Docker:

Я уверен, что я ошибаюсь во многих шагах, но вы думаете, я могу сделать это таким образом?