2017-10-30 2 views
0

Der Versuch, einen Workflow in Jenkins mit deklarative Pipeline zu erstellen, so etwas zu tun:Jenkins mehrfach verzweigten Job mit deklarative Pipeline Repo für jede Phase Klonen

  1. Kasse der Code auf 'Master'
  2. Build-Lösung auf ' Master '(Ich weiß, das ist kein sicherer Weg, aber Jenkins ist im Intranet, also sollte es für uns in Ordnung sein)
  3. Verstecke Artefakte (.dll, .exe, .pdb, etc) => 1. Stufe
  4. Artefakte auf Knoten entfernen, je nachdem, was benötigt wird (Komponententests an einem Slave, Integration te M. auf ein anderes und Selenium-Tests auf einem anderen ein) => 2. Stufe
  5. Run-Tests auf dem Slave abhängig => 3. parallel

Das Problem, das ich bin vor läuft Stadium, dass die git checkout (GitSCM) wird für jede Stufe ausgeführt.

Meine Pipeline sieht wie folgt aus:

pipeline { 
    agent { 
     label { 
      label "master" 
      customWorkspace "C:\\Jenkins\\workspace\\CustomWorkspace" 
     } 
    } 

    options { 
     timestamps() 
    } 

    stages { 
     stage("Build") { 
      agent { 
       label { 
        label "master" 
        customWorkspace "C:\\Jenkins\\workspace\\CustomWorkspace" 
       } 
      } 
      steps { 
       /* 
        steps to build the solution here 
       */ 

       //Sleep because stashing fails otherwise 
       script { 
        sleep(1) 
       } 

       dir("${env.WORKSPACE}\\UnitTests\\bin\\Release") { 
        stash name: 'unit-tests' 
       } 

       dir("${env.WORKSPACE}\\WebUnitTests\\bin\\x64\\Release") { 
        stash name: 'web-unit-tests' 

      } 
     } 

     stage('Export artefacts') { 
      agent { 
       label { 
        label "UnitTest" 
        customWorkspace "C:\\Jenkins\\workspace\\CustomWorkspace" 
       } 
      } 
      steps { 
       echo "Copying dlls from master to ${env.NODE_NAME}" 
       dir("${env.WORKSPACE}\\UnitTests\\bin\\Release") { 
        unstash 'unit-tests' 
       } 
      } 
     } 

     stage('Run tests') { 
      parallel { 
       stage("Run tests #1") { 
        agent { 
         label { 
          label "UnitTest" 
          customWorkspace "C:\\Jenkins\\workspace\\CustomWorkspace" 
         } 
        } 
        steps { 
         /* 
          run tests here 
         */ 
        } 
        post { 
         //post results here 
        } 
       } 
       //other parallel stages 
      } 
     } 
    } 
} 

So, wie bereits erwähnt, die GitSCM (Code Kasse) ist ein Teil von und für jede Phase durchgeführt: Build-Stufe enter image description here

Export Bühne enter image description here

Antwort

1

Ein paar einfache Änderungen sollten das lösen. Sie müssen das Pipelineskript jedes Mal, wenn ein Knoten zugewiesen wird, nicht standardmäßig auschecken. Dann müssen Sie es sagen, um die Kasse zu tun, wo Sie es brauchen:

Ich habe 2 Zeilen dort hinzugefügt. Eine in der Options-Sektion (skipDefaultCheckout()) und eine in der ersten Stufe.

Verwandte Themen