2016-08-19 52 views
15

私は構築したいコードを持つGitリポジトリを持っていますが、私はそのルートにJenkinsfileを追加することを「許可」していません(Debianパッケージです。アップストリームソースにファイルを追加する)。 Jenkinsfileを1つのリポジトリに格納し、別のリポジトリからコードをビルドする方法はありますか?私のコードリポジトリにはビルドするいくつかのブランチがあり(Debianリリースごとに1つ)、これはマルチブランチパイプラインでなければなりません。コードまたはJenkinsfileリポジトリのいずれかをコミットするとビルドが開始されます。Jenkinsfileと異なるリポジトリからのJenkinsfileのマルチブランチパイプライン

ボーナスの複雑さ:私はこのようないくつかのコード/パッケージリポジトリを持っており、それらのすべてに同じJenkinsfileを再利用したいと思います。したがって、何らかの形で動的に正しいGit URLを取得して使用する必要があります。ビルドするブランチは、すべてのリポジトリで同じ名前になります。

答えて

6

短い答えは:できませんmultibranch pipelineで。マルチブランチパイプラインは、特定のパイプラインをPipeline script from SCMスタイルで実行するよう設計されています(少なくとも今のところは、プロジェクトのルートに固定Jenkinsfile)。

しかし、マルチブランチ用に作成されたMulti-Branch Projectプラグインfreestyleプロジェクトを使用することはできます。まず、multibranch pipeline configurationのようにmultibranch freestyle configurationを定義する必要があります。以下に示すように、この新しい項目を選択し :

New Freestyle multi-branch project

を、それはあなたの構成の名前とするサブプロジェクトとフォルダが作成されます。すなわちこのタイプの構成は、multibranch pipelineタイプとまったく同じように動作します各ブランチは自動的に検出されます。

実装は、ケーキの一部でなければなりません:あなたは標準で行うよう

  1. は、ビルド/ビルド後の一環として、マルチブランチの構成
  2. コール別のビルドであなたのSCMリポジトリを指定しますフリースタイルのプロジェクトですが、パラメータ化されたジョブ(build-jobと呼ぶ)を呼び出して、Git URLと現在のブランチのようなリポジトリ情報を与える必要があります($GIT_URL$GIT_BRANCHをこの目的のために使用できます)
  3. build-jobでは、SCMからチェックアウトされたインラインパイプラインまたはパイプラインスクリプトを定義するだけで、このスクリプト内でSCMチェックアウトを行い、構築する必要がある手順を実行します。 build-jobパイプラインの内容の例:

もちろん

node() { 
    stage 'Checkout' 
    checkout scm: [$class: 'GitSCM', branches: [[name: '*/${GIT_BRANCH}']], userRemoteConfigs: [[url: '${GIT_URL}']]] 

    stage 'Build' 
    // Build steps... 
} 

あなたの異なるmultibranchesプロジェクトが少し異なる扱いをする必要がある場合、あなたはまた、順番に、一般的なbuild-jobパイプラインを呼び出すと、中間のプロジェクト(のはbuild-project-Abuild-project-B、...を言わせて))

を使用することができます

このソリューションの主な欠点の1つは、すべてのビルドを担当するジョブが1つしかなく、デバッグが難しいことです。成功/エラーが発生した場合でも、マルチブランチプロジェクトは青/赤になりますが、ビルドの実際の問題を見つけるには、build-jobに戻る必要があります。

+5

フリースタイルのマルチブランチオプションは正式に廃止されたようです。 Jenkinsfileは現在、Jenkinsfileが存在しないプロジェクト用にマルチブランチビルドを行うオプションを提供していません。それは本当に吸う – kert

関連する問題