Jenkins - Parallel stages with docker for PHP
I'm new with Jenkins, and I would like to get almost the same behavior as in GitLab CI for one of my PHP project.
I use Docker to test my project on several PHP versions.
What I want ?
Running build and test in parallel.
- Build creates my application, sources come from a git repository, and I run the
composer install
command. - Dockerfile is stored in
/var/lib/jenkins/Docker
- My Dockerfile has a parameter (
PHP_VERSION
) which allow me to choose the PHP version I want customWorkspace
seems to work
Here is my Jenkinsfile to do so :
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'
And here is the result :
It looks good, but it isn't, and I don't really understand the underlying behavior.
As you can see, the test-php54 stage uses the last created Docker container :
I'm sure I'm wrong on a lot of steps, but do you think I can do it this way ?
docker jenkins jenkins-pipeline dockerfile
add a comment |
I'm new with Jenkins, and I would like to get almost the same behavior as in GitLab CI for one of my PHP project.
I use Docker to test my project on several PHP versions.
What I want ?
Running build and test in parallel.
- Build creates my application, sources come from a git repository, and I run the
composer install
command. - Dockerfile is stored in
/var/lib/jenkins/Docker
- My Dockerfile has a parameter (
PHP_VERSION
) which allow me to choose the PHP version I want customWorkspace
seems to work
Here is my Jenkinsfile to do so :
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'
And here is the result :
It looks good, but it isn't, and I don't really understand the underlying behavior.
As you can see, the test-php54 stage uses the last created Docker container :
I'm sure I'm wrong on a lot of steps, but do you think I can do it this way ?
docker jenkins jenkins-pipeline dockerfile
add a comment |
I'm new with Jenkins, and I would like to get almost the same behavior as in GitLab CI for one of my PHP project.
I use Docker to test my project on several PHP versions.
What I want ?
Running build and test in parallel.
- Build creates my application, sources come from a git repository, and I run the
composer install
command. - Dockerfile is stored in
/var/lib/jenkins/Docker
- My Dockerfile has a parameter (
PHP_VERSION
) which allow me to choose the PHP version I want customWorkspace
seems to work
Here is my Jenkinsfile to do so :
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'
And here is the result :
It looks good, but it isn't, and I don't really understand the underlying behavior.
As you can see, the test-php54 stage uses the last created Docker container :
I'm sure I'm wrong on a lot of steps, but do you think I can do it this way ?
docker jenkins jenkins-pipeline dockerfile
I'm new with Jenkins, and I would like to get almost the same behavior as in GitLab CI for one of my PHP project.
I use Docker to test my project on several PHP versions.
What I want ?
Running build and test in parallel.
- Build creates my application, sources come from a git repository, and I run the
composer install
command. - Dockerfile is stored in
/var/lib/jenkins/Docker
- My Dockerfile has a parameter (
PHP_VERSION
) which allow me to choose the PHP version I want customWorkspace
seems to work
Here is my Jenkinsfile to do so :
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'
And here is the result :
It looks good, but it isn't, and I don't really understand the underlying behavior.
As you can see, the test-php54 stage uses the last created Docker container :
I'm sure I'm wrong on a lot of steps, but do you think I can do it this way ?
docker jenkins jenkins-pipeline dockerfile
docker jenkins jenkins-pipeline dockerfile
edited Nov 12 '18 at 13:25
Ulti
asked Nov 12 '18 at 13:21
UltiUlti
358315
358315
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Ok, I found the main problem.
The fact is I use the same Dockerfile, but with different parameters.
If I create one Dockerfile for PHP 5.4 and another one for PHP 7.0, the stages are parallelized correctly.
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
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('build-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('tests')
parallel
stage('test-php5.4')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
stage('test-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
This seems to work ! :)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53263101%2fjenkins-parallel-stages-with-docker-for-php%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Ok, I found the main problem.
The fact is I use the same Dockerfile, but with different parameters.
If I create one Dockerfile for PHP 5.4 and another one for PHP 7.0, the stages are parallelized correctly.
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
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('build-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('tests')
parallel
stage('test-php5.4')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
stage('test-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
This seems to work ! :)
add a comment |
Ok, I found the main problem.
The fact is I use the same Dockerfile, but with different parameters.
If I create one Dockerfile for PHP 5.4 and another one for PHP 7.0, the stages are parallelized correctly.
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
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('build-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('tests')
parallel
stage('test-php5.4')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
stage('test-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
This seems to work ! :)
add a comment |
Ok, I found the main problem.
The fact is I use the same Dockerfile, but with different parameters.
If I create one Dockerfile for PHP 5.4 and another one for PHP 7.0, the stages are parallelized correctly.
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
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('build-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('tests')
parallel
stage('test-php5.4')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
stage('test-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
This seems to work ! :)
Ok, I found the main problem.
The fact is I use the same Dockerfile, but with different parameters.
If I create one Dockerfile for PHP 5.4 and another one for PHP 7.0, the stages are parallelized correctly.
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
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('build-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'rm -Rf composer.lock vendor'
sh 'composer install'
stage('tests')
parallel
stage('test-php5.4')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php5.4'
customWorkspace './build-php5.4'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
stage('test-php7.0')
agent
dockerfile
dir '/var/lib/jenkins/Docker'
filename 'Dockerfile-php7.0'
customWorkspace './build-php7.0'
steps
sh 'php --version'
sh 'php vendor/phpunit/phpunit/phpunit tests'
This seems to work ! :)
answered Nov 12 '18 at 14:58
UltiUlti
358315
358315
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53263101%2fjenkins-parallel-stages-with-docker-for-php%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown