2016-12-14 26 views
1

ブランチあたり1つのjenkinsfileの制限で、マルチブランチパイプラインプラグインを使用して自動的にJenkinsfileをロードできます。マルチブランチパイプラインプラグインブランチごとに複数のjenkinsfileをロード

私はロードしたいブランチごとに複数のJenkinsファイルを持っていますが、私はマスターJenkinsファイルを作成して特定のファイルをロードすることで以下の方法で試してみました。下のコードでは、1.Jenkinsfile2.Jenkinsfileを1つのパイプラインとしてマージします。

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

} 

複数のJenkinsパイプラインコードを1つのブランチから個別にロードする方法はありますか?

答えて

0

ほとんどの場合、あるプロジェクトの単一ブランチ上で動作する古いJenkinsのジョブ(パイプライン前)を、単一のマルチブランチパイプラインにマップしたいと考えています。適切なアプローチは、入力に依存するステージを作成することです(ステージング/ライブにデプロイする場合は質問ユーザーのように)。

また、プロジェクトのSCMを実際に参照し、他のJenkinsfileをポイントする新しいPipeline jenkinsジョブを作成することもできます(他のすべてのjenkinsファイルごとに1つのパイプラインジョブ)。

+0

ので、レビューのために計画jenkinsfileのようなさまざまなタスクのための異なった仕事を持って、jenkinsfileを適用適用するために、私たちが作成したものを破壊するためのjenkinsfileを破壊する。だから古い仕事はない。 すべてが1つのブランチにロードされる必要がありますが、ステージ・アプローチでは、マスター・ジェンキン・ファイルから複数のjenkinsfileをロードしようとすると、パイプラインがマージされます。 それぞれのjenkinsfileを手動で設定するのではなく、自動化されたアプローチの助けが必要です。 –

+0

[Jenkinsfileの間にいくつかのグルーヴィーコードを共有する必要がある場合は、そのプラグインがあります](https://github.com/jenkinsci/workflow-cps-global-lib-plugin)。 – hakamairi

1

私はこの(VARS/generateJobsForJenkinsfiles.groovyで)次のファイルを含む共有ライブラリー(REF https://jenkins.io/doc/book/pipeline/shared-libraries/)を書いた:

/** 
* 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' 

} 
関連する問題