異なるリポジトリからの Jenkinsfile を使用した Jenkins マルチブランチ パイプライン 質問する

異なるリポジトリからの Jenkinsfile を使用した Jenkins マルチブランチ パイプライン 質問する

ビルドしたいコードが入った Git リポジトリがあるのですが、Jenkinsfileそのルートに を追加することが「許可」されていません (Debian パッケージなので、アップストリーム ソースにファイルを追加できません)。 をJenkinsfile1 つのリポジトリに保存し、別のリポジトリからコードをビルドする方法はありますか? コード リポジトリにはビルドするブランチが複数あるため (Debian リリースごとに 1 つ)、マルチブランチ パイプラインにする必要があります。コードまたはJenkinsfileリポジトリのいずれかでコミットすると、ビルドがトリガーされます。

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

ベストアンサー1

短い答えは:あなたできないこれを を使用して行いますmultibranch pipeline。マルチブランチ パイプラインは、(少なくとも現時点では)プロジェクトのルートにPipeline script from SCMを固定して、特定のパイプラインを スタイルで実行するためにのみ設計されています。Jenkinsfile

ただし、マルチブランチプロジェクトマルチブランチ用に作られたプラグインフリースタイルmultibranch freestyle configurationプロジェクト。まず、の場合と同じようにを定義する必要がありますmultibranch pipeline configuration。以下に示すように、この新しい項目を選択します。

新しいフリースタイルマルチブランチプロジェクト

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

実装は簡単なはずです:

  1. SCMマルチブランチ構成でリポジトリを指定する
  2. 標準のフリースタイル プロジェクトと同じように、ビルド/ポストビルドの一部として別のビルドを呼び出します。ただし、パラメーター化されたジョブ ( と呼びます) を呼び出して、リポジトリ情報 (Git URL と現在のブランチなど) を指定する必要があります (この目的にはbuild-job、定義済みの変数$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...
}

もちろん、異なるマルチブランチ プロジェクトを少し異なる方法で処理する必要がある場合は、中間プロジェクト (、、... など) を使用して、汎用パイプラインを呼び出すこともbuild-project-Aできbuild-project-Bますbuild-job

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

おすすめ記事