Jenkins - Parallel stages with docker for PHP










0















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 :



enter image description here



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 :



enter image description here



I'm sure I'm wrong on a lot of steps, but do you think I can do it this way ?










share|improve this question




























    0















    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 :



    enter image description here



    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 :



    enter image description here



    I'm sure I'm wrong on a lot of steps, but do you think I can do it this way ?










    share|improve this question


























      0












      0








      0








      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 :



      enter image description here



      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 :



      enter image description here



      I'm sure I'm wrong on a lot of steps, but do you think I can do it this way ?










      share|improve this question
















      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 :



      enter image description here



      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 :



      enter image description here



      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 12 '18 at 13:25







      Ulti

















      asked Nov 12 '18 at 13:21









      UltiUlti

      358315




      358315






















          1 Answer
          1






          active

          oldest

          votes


















          0














          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 ! :)






          share|improve this answer






















            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
            );



            );













            draft saved

            draft discarded


















            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









            0














            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 ! :)






            share|improve this answer



























              0














              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 ! :)






              share|improve this answer

























                0












                0








                0







                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 ! :)






                share|improve this answer













                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 ! :)







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 12 '18 at 14:58









                UltiUlti

                358315




                358315



























                    draft saved

                    draft discarded
















































                    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.




                    draft saved


                    draft discarded














                    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





















































                    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







                    Popular posts from this blog

                    How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

                    Syphilis

                    Darth Vader #20