How to re-use pre process jenkins/groovy in each test












3















Im using the following code to run our voter , currently I’ve one target which is called Run Tests
Which use exactly the same steps as the last (lint) , currently I duplicate it which I think is not a good solution ,
Is there is nice way to avoid this duplication and done it only once as per-requisite process ?



I need all the steps until the cd to the project



The only difference is one target I run



go test ...


and the second



go lint 


All steps before are equal



#!/usr/bin/env groovy

try {
parallel(
'Run Tests': {
node {

//————————Here we start
checkout scm
def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
setupPipelineEnvironment script: this,
measureDuration(script: this, measurementName: 'build') {
executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
sh """
mkdir -p /go/src/github.com/ftr/myGoProj
cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
cd /go/src/github.com/ftr/MyGoProj
//————————Here we finish and TEST
go test -v ./...
"""
}
}
}
},
‘Lint’: {
node {
//————————Here we start
checkout scm
def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
setupPipelineEnvironment script: this,
measureDuration(script: this, measurementName: 'build') {
executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
sh """
mkdir -p /go/src/github.com/ftr/myGoProj
cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
cd /go/src/github.com/ftr/MyGoProj
//————————Here we finish and LINT
go lint
"""

}
}
)
}

}
}









share|improve this question





























    3















    Im using the following code to run our voter , currently I’ve one target which is called Run Tests
    Which use exactly the same steps as the last (lint) , currently I duplicate it which I think is not a good solution ,
    Is there is nice way to avoid this duplication and done it only once as per-requisite process ?



    I need all the steps until the cd to the project



    The only difference is one target I run



    go test ...


    and the second



    go lint 


    All steps before are equal



    #!/usr/bin/env groovy

    try {
    parallel(
    'Run Tests': {
    node {

    //————————Here we start
    checkout scm
    def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
    setupPipelineEnvironment script: this,
    measureDuration(script: this, measurementName: 'build') {
    executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
    sh """
    mkdir -p /go/src/github.com/ftr/myGoProj
    cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
    cd /go/src/github.com/ftr/MyGoProj
    //————————Here we finish and TEST
    go test -v ./...
    """
    }
    }
    }
    },
    ‘Lint’: {
    node {
    //————————Here we start
    checkout scm
    def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
    setupPipelineEnvironment script: this,
    measureDuration(script: this, measurementName: 'build') {
    executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
    sh """
    mkdir -p /go/src/github.com/ftr/myGoProj
    cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
    cd /go/src/github.com/ftr/MyGoProj
    //————————Here we finish and LINT
    go lint
    """

    }
    }
    )
    }

    }
    }









    share|improve this question



























      3












      3








      3


      1






      Im using the following code to run our voter , currently I’ve one target which is called Run Tests
      Which use exactly the same steps as the last (lint) , currently I duplicate it which I think is not a good solution ,
      Is there is nice way to avoid this duplication and done it only once as per-requisite process ?



      I need all the steps until the cd to the project



      The only difference is one target I run



      go test ...


      and the second



      go lint 


      All steps before are equal



      #!/usr/bin/env groovy

      try {
      parallel(
      'Run Tests': {
      node {

      //————————Here we start
      checkout scm
      def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
      setupPipelineEnvironment script: this,
      measureDuration(script: this, measurementName: 'build') {
      executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
      sh """
      mkdir -p /go/src/github.com/ftr/myGoProj
      cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
      cd /go/src/github.com/ftr/MyGoProj
      //————————Here we finish and TEST
      go test -v ./...
      """
      }
      }
      }
      },
      ‘Lint’: {
      node {
      //————————Here we start
      checkout scm
      def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
      setupPipelineEnvironment script: this,
      measureDuration(script: this, measurementName: 'build') {
      executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
      sh """
      mkdir -p /go/src/github.com/ftr/myGoProj
      cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
      cd /go/src/github.com/ftr/MyGoProj
      //————————Here we finish and LINT
      go lint
      """

      }
      }
      )
      }

      }
      }









      share|improve this question
















      Im using the following code to run our voter , currently I’ve one target which is called Run Tests
      Which use exactly the same steps as the last (lint) , currently I duplicate it which I think is not a good solution ,
      Is there is nice way to avoid this duplication and done it only once as per-requisite process ?



      I need all the steps until the cd to the project



      The only difference is one target I run



      go test ...


      and the second



      go lint 


      All steps before are equal



      #!/usr/bin/env groovy

      try {
      parallel(
      'Run Tests': {
      node {

      //————————Here we start
      checkout scm
      def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
      setupPipelineEnvironment script: this,
      measureDuration(script: this, measurementName: 'build') {
      executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
      sh """
      mkdir -p /go/src/github.com/ftr/myGoProj
      cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
      cd /go/src/github.com/ftr/MyGoProj
      //————————Here we finish and TEST
      go test -v ./...
      """
      }
      }
      }
      },
      ‘Lint’: {
      node {
      //————————Here we start
      checkout scm
      def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09’
      setupPipelineEnvironment script: this,
      measureDuration(script: this, measurementName: 'build') {
      executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
      sh """
      mkdir -p /go/src/github.com/ftr/myGoProj
      cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
      cd /go/src/github.com/ftr/MyGoProj
      //————————Here we finish and LINT
      go lint
      """

      }
      }
      )
      }

      }
      }






      shell go jenkins groovy






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 29 '18 at 7:48







      shopia T

















      asked Nov 28 '18 at 19:45









      shopia Tshopia T

      32281957




      32281957
























          1 Answer
          1






          active

          oldest

          votes


















          1














          You can use function and pass Go arguments:



          try {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          setupPipelineEnvironment script: this,
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Update



          If some actions can be separated out of runTestsInDocker they probably should be.



          For example setupPipelineEnvironment step. I don't know exact logic but maybe it can be run once before running test.



          node {
          stage('setup') {
          setupPipelineEnvironment script: this
          }
          stage ('Tests') {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Note



          If you are running parallel on remote agents you must remember that setup performed on master may be not aviailable on remote slave.






          share|improve this answer


























          • Thanks, but still the commands (pre-process) will be called twice , I want to reduce the time if possible

            – shopia T
            Nov 29 '18 at 9:42













          • Do you mean setupPipelineEnvironment step? I don't know the exact logic, but you could call it on beggining of your pipeline (before the parallel step).

            – lichensky
            Nov 29 '18 at 10:25












          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%2f53526996%2fhow-to-re-use-pre-process-jenkins-groovy-in-each-test%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









          1














          You can use function and pass Go arguments:



          try {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          setupPipelineEnvironment script: this,
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Update



          If some actions can be separated out of runTestsInDocker they probably should be.



          For example setupPipelineEnvironment step. I don't know exact logic but maybe it can be run once before running test.



          node {
          stage('setup') {
          setupPipelineEnvironment script: this
          }
          stage ('Tests') {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Note



          If you are running parallel on remote agents you must remember that setup performed on master may be not aviailable on remote slave.






          share|improve this answer


























          • Thanks, but still the commands (pre-process) will be called twice , I want to reduce the time if possible

            – shopia T
            Nov 29 '18 at 9:42













          • Do you mean setupPipelineEnvironment step? I don't know the exact logic, but you could call it on beggining of your pipeline (before the parallel step).

            – lichensky
            Nov 29 '18 at 10:25
















          1














          You can use function and pass Go arguments:



          try {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          setupPipelineEnvironment script: this,
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Update



          If some actions can be separated out of runTestsInDocker they probably should be.



          For example setupPipelineEnvironment step. I don't know exact logic but maybe it can be run once before running test.



          node {
          stage('setup') {
          setupPipelineEnvironment script: this
          }
          stage ('Tests') {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Note



          If you are running parallel on remote agents you must remember that setup performed on master may be not aviailable on remote slave.






          share|improve this answer


























          • Thanks, but still the commands (pre-process) will be called twice , I want to reduce the time if possible

            – shopia T
            Nov 29 '18 at 9:42













          • Do you mean setupPipelineEnvironment step? I don't know the exact logic, but you could call it on beggining of your pipeline (before the parallel step).

            – lichensky
            Nov 29 '18 at 10:25














          1












          1








          1







          You can use function and pass Go arguments:



          try {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          setupPipelineEnvironment script: this,
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Update



          If some actions can be separated out of runTestsInDocker they probably should be.



          For example setupPipelineEnvironment step. I don't know exact logic but maybe it can be run once before running test.



          node {
          stage('setup') {
          setupPipelineEnvironment script: this
          }
          stage ('Tests') {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Note



          If you are running parallel on remote agents you must remember that setup performed on master may be not aviailable on remote slave.






          share|improve this answer















          You can use function and pass Go arguments:



          try {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          setupPipelineEnvironment script: this,
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Update



          If some actions can be separated out of runTestsInDocker they probably should be.



          For example setupPipelineEnvironment step. I don't know exact logic but maybe it can be run once before running test.



          node {
          stage('setup') {
          setupPipelineEnvironment script: this
          }
          stage ('Tests') {
          parallel(
          'Run Tests': {
          node {
          checkout scm
          runTestsInDocker('test -v ./...')
          }
          },
          'Lint': {
          node {
          checkout scm
          runTestsInDocker('lint')
          }
          }
          )
          }
          }


          def runTestsInDocker(goArgs) {
          def dockerImage = 'docker.company:50001/crt/deg:0.1.3-09'
          measureDuration(script: this, measurementName: 'build') {
          executeDocker(dockerImage: dockerImage, dockerWorkspace: '/go/src') {
          sh """
          mkdir -p /go/src/github.com/ftr/myGoProj
          cp -R $WORKSPACE/* /go/src/github.com/ftr/MyGoProj
          cd /go/src/github.com/ftr/MyGoProj
          go ${goArgs}
          """
          }
          }
          }


          Note



          If you are running parallel on remote agents you must remember that setup performed on master may be not aviailable on remote slave.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 29 '18 at 11:25

























          answered Nov 29 '18 at 9:03









          lichenskylichensky

          463




          463













          • Thanks, but still the commands (pre-process) will be called twice , I want to reduce the time if possible

            – shopia T
            Nov 29 '18 at 9:42













          • Do you mean setupPipelineEnvironment step? I don't know the exact logic, but you could call it on beggining of your pipeline (before the parallel step).

            – lichensky
            Nov 29 '18 at 10:25



















          • Thanks, but still the commands (pre-process) will be called twice , I want to reduce the time if possible

            – shopia T
            Nov 29 '18 at 9:42













          • Do you mean setupPipelineEnvironment step? I don't know the exact logic, but you could call it on beggining of your pipeline (before the parallel step).

            – lichensky
            Nov 29 '18 at 10:25

















          Thanks, but still the commands (pre-process) will be called twice , I want to reduce the time if possible

          – shopia T
          Nov 29 '18 at 9:42







          Thanks, but still the commands (pre-process) will be called twice , I want to reduce the time if possible

          – shopia T
          Nov 29 '18 at 9:42















          Do you mean setupPipelineEnvironment step? I don't know the exact logic, but you could call it on beggining of your pipeline (before the parallel step).

          – lichensky
          Nov 29 '18 at 10:25





          Do you mean setupPipelineEnvironment step? I don't know the exact logic, but you could call it on beggining of your pipeline (before the parallel step).

          – lichensky
          Nov 29 '18 at 10:25




















          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%2f53526996%2fhow-to-re-use-pre-process-jenkins-groovy-in-each-test%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

          Contact image not getting when fetch all contact list from iPhone by CNContact

          count number of partitions of a set with n elements into k subsets

          A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks