ビルドしたいコードが入った Git リポジトリがあるのですが、Jenkinsfile
そのルートに を追加することが「許可」されていません (Debian パッケージなので、アップストリーム ソースにファイルを追加できません)。 をJenkinsfile
1 つのリポジトリに保存し、別のリポジトリからコードをビルドする方法はありますか? コード リポジトリにはビルドするブランチが複数あるため (Debian リリースごとに 1 つ)、マルチブランチ パイプラインにする必要があります。コードまたはJenkinsfile
リポジトリのいずれかでコミットすると、ビルドがトリガーされます。
ボーナスの複雑さ:このようなコード/パッケージ リポジトリがいくつかあり、それらすべてに同じものを再利用したいと考えていますJenkinsfile
。そのため、使用する適切な Git URL を何らかの方法で動的に取得する必要があります。ビルドするブランチは、すべてのリポジトリで同じ名前になります。
ベストアンサー1
短い答えは:あなたできないこれを を使用して行いますmultibranch pipeline
。マルチブランチ パイプラインは、(少なくとも現時点では)プロジェクトのルートにPipeline script from SCM
を固定して、特定のパイプラインを スタイルで実行するためにのみ設計されています。Jenkinsfile
ただし、マルチブランチプロジェクトマルチブランチ用に作られたプラグインフリースタイルmultibranch freestyle configuration
プロジェクト。まず、の場合と同じようにを定義する必要がありますmultibranch pipeline configuration
。以下に示すように、この新しい項目を選択します。
このタイプの構成は、タイプとまったく同じように動作しますmultibranch pipeline
。つまり、構成の名前が付いたフォルダーと、自動的に検出された各ブランチのサブプロジェクトが作成されます。
実装は簡単なはずです:
SCM
マルチブランチ構成でリポジトリを指定する- 標準のフリースタイル プロジェクトと同じように、ビルド/ポストビルドの一部として別のビルドを呼び出します。ただし、パラメーター化されたジョブ ( と呼びます) を呼び出して、リポジトリ情報 (Git URL と現在のブランチなど) を指定する必要があります (この目的には
build-job
、定義済みの変数$GIT_URL
とを使用できます)。$GIT_BRANCH
- では
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
ビルドの実際の問題を見つけるには、呼び出された場所に戻る必要があります。