2016-12-14 3 views
1

Ich bin in der Lage, Jenkinsfile automatisch über Multi-Branch-Pipeline-Plugin mit einer Beschränkung von nur einer jenkinsfile pro Zweig zu laden.Multi-Zweig Pipeline-Plugin laden mehrere jenkinsfile pro Zweig

Ich habe mehrere Jenkinsfiles pro Zweig, die ich laden möchte, habe ich mit unten Methode versucht, indem Sie Jenkins Master-Datei erstellen und bestimmte Dateien laden. Im folgenden Code werden 1.Jenkinsfile und 2.Jenkinsfile als eine Pipeline zusammengeführt.

node { 
    git url: '[email protected]:xxxxxxxxx/pipeline.git', branch: 'B1P1' 
     sh "ls -latr" 
      load '1.Jenkinsfile' 
       load '2.Jenkinsfile' 

} 

Gibt es eine Möglichkeit, mehrere Jenkins-Pipeline-Code getrennt von einem Zweig zu laden?

Antwort

0

Höchstwahrscheinlich möchten Sie alte Jenkins-Jobs (Pre-Pipeline), die auf einem einzelnen Zweig eines Projekts arbeiten, auf eine einzige Multi-Branch-Pipeline abbilden. Der geeignete Ansatz wäre, Stufen zu erstellen, die input-abhängig sind (wie ein Frage-Benutzer, wenn er/sie in staging/live bereitstellen möchte).

Alternativ können Sie auch einen neuen separaten jenkins-Job erstellen, der tatsächlich auf den SCM Ihres Projekts verweist und auf Ihre andere Jenkins-Datei zeigt (dann einen Pipeline-Job für jede andere jenkins-Datei).

+0

so dass wir verschiedene Aufträge für verschiedene Aufgaben wie Plan jenkinsfile zur Überprüfung haben, gelten jenkinsfile zum anwenden zerstöre jenkinsfile, um alles zu zerstören, was wir erschaffen haben. Also kein alter Job. Alle müssen über einen Zweig geladen werden, stage approach noch die Pipeline zusammen, wenn ich versuche, mehrere jenkinsfile über Master Jenkins-Datei zu laden. Ich brauche Hilfe für den automatisierten Ansatz, anstatt jede jenkinsfile manuell zu konfigurieren. –

+0

Wenn Sie [groovy code zwischen Jenkinsfile teilen müssen, gibt es ein Plugin dafür] (https://github.com/jenkinsci/workflow-cps-global-lib-plugin). – hakamairi

1

Ich habe dies einen Anteil Bibliothek (ref https://jenkins.io/doc/book/pipeline/shared-libraries/) Schreiben Sie die folgende Datei (in Vars/generateJobsForJenkinsfiles.groovy) enthält:

/** 
* Creates jenkins pipeline jobs from pipeline script files 
* @param gitRepoName name of github repo, e.g. <organisation>/<repository> 
* @param filepattern ant style pattern for pipeline script files for which we want to create jobs 
* @param jobPath closure of type (relativePathToPipelineScript -> jobPath) where jobPath is a string of formated as '<foldername>/../<jobname>' (i.e. jenkins job path) 
*/ 
def call(String gitRepoName, String filepattern, def jobPath) { 
    def pipelineJobs = [] 
    def base = env.WORKSPACE 
    def pipelineFiles = new FileNameFinder().getFileNames(base, filepattern) 

    for (pipelineFil in pipelineFiles) { 

     def relativeScriptPath = (pipelineFil - base).substring(1) 
     def _jobPath = jobPath(relativeScriptPath).split('/') 
     def jobfolderpath = _jobPath[0..-2] 
     def jobname = _jobPath[-1] 

     echo "Create jenkins job ${jobfolderpath.join('/')}:${jobname} for $pipelineFil" 

     def dslScript = [] 
     //create folders 
     for (i=0; i<jobfolderpath.size(); i++) 
      dslScript << "folder('${jobfolderpath[0..i].join('/')}')" 

     //create job 
     dslScript << """ 
      pipelineJob('${jobfolderpath.join('/')}/${jobname}') { 
       definition { 
        cpsScm { 
         scm { 
          git { 
           remote { 
            github('$gitRepoName', 'https') 
            credentials('github-credentials') 
           } 
           branch('master') 
          } 
         } 
         scriptPath("$relativeScriptPath") 
        } 
       } 
       configure { d -> 
        d/definition/lightweight(true) 
       } 
      } 
      """ 
     pipelineJobs << dslScript.join('\n') 
     //println dslScript 
    } 

    if (!pipelineJobs.empty) 
     jobDsl sandbox: true, scriptText: pipelineJobs.join('\n'), removedJobAction: 'DELETE', removedViewAction: 'DELETE' 

}