Jenkins 1.501およびJenkins Gitプラグイン1.1.26の使用
それぞれに複数のプロジェクトを持つ3つの異なるgitリポジトリがあります。
次に、3 gitリポジトリのすべてのプロジェクトをJenkinsスレーブの同じワークスペースにチェックアウトする必要があります。各gitリポジトリを定義しました:ソースコード管理:複数のSCM。ただし、レポがチェックアウトされるたびに、以前のレポ(および関連するプロジェクト)は削除されます。
私はこれを読みました:
http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html
しかし、それは本当に助けにはなりません。 すべてのリポジトリのレポジトリ(オプション)のローカルサブディレクトリの下に同じフォルダを指定しようとしましたが、同じ結果になります。
Jenkinsを使用してこれが単に不可能な場合は、ビルド前のステップ/スクリプトを使用してプロジェクトを適切な場所に移動できると思います。プロジェクトのビルド構成を変更するオプションではありません。
Jenkins + Gitプラグインでは、1つのワークスペースで一度に複数のリポジトリをチェックアウトすることはできません。
回避策として、それぞれ単一のレポをチェックアウトする複数のアップストリームジョブを作成し、最終的なプロジェクトワークスペースにコピーする(いくつかのレベルで問題がある)か、必要な各レポをチェックアウトするシェルスクリプトステップを設定することができます。ビルド時のジョブワークスペース。
以前は、Multiple SCMプラグインがこの問題を解決できましたが、現在では非推奨です。マルチSCMプラグインページから:「ユーザーは https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin に移行する必要があります。パイプラインは複数のSCMをチェックアウトするためのより良い方法を提供します、Jenkinsコア開発チームによってサポートされています。」
マルチSCMプラグインの場合:
チェックアウトする必要のあるリポジトリ(メインプロジェクトまたは依存プロジェクト)ごとに異なるリポジトリエントリを作成します。
各プロジェクトの「詳細」メニュー(2番目の「詳細」メニュー、リポジトリごとに「詳細」というラベルの付いたボタンが2つあります)で、「リポジトリのローカルサブディレクトリ(オプション)」テキストフィールドを見つけます。プロジェクトをコピーする「ワークスペース」ディレクトリのサブディレクトリを指定できます。私の開発用コンピューターのファイルシステムをマップできます。
「2番目の詳細メニュー」はもう存在しません。代わりに、「追加」ボタン(「追加の動作」セクション)を使用して、「サブディレクトリにチェックアウト」を選択します。
お役に立てば幸いです。
Multiple SCMs Plugin は推奨されないため。
Jenkins Pipeline を使用すると、複数のgitリポジトリをチェックアウトし、gradleを使用してビルドした後、
node {
def gradleHome
stage('Prepare/Checkout') { // for display purposes
git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'
dir('a-child-repo') {
git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
}
env.Java_HOME="${tool 'JDK8'}"
env.PATH="${env.Java_HOME}/bin:${env.PATH}" // set Java home in jdk environment
gradleHome = tool '3.4.1'
}
stage('Build') {
// Run the gradle build
if (isUnix()) {
sh "'${gradleHome}/bin/gradle' clean build"
} else {
bat(/"${gradleHome}\bin\gradle" clean build/)
}
}
}
このようなカスタムパイプラインの代わりに git submodules を使用することを検討してください。
Jenkinsで Multiple SCMs Plugin をGit Pluginと組み合わせて使用しました。
リポジトリの関係に応じて、別のアプローチは、リポジトリの1つに git submodules として他のリポジトリ(リポジトリ)を追加することです。 gitサブモジュールは、他のリポジトリへの参照を作成します。これらのサブモジュールリポジトリは、 "superproject"(公式用語)を複製するときに--recursive
フラグを指定しない限り複製されません。
現在のプロジェクトにサブモジュールを追加するコマンドは次のとおりです。
git submodule add <repository URI path to clone>
Jenkins v1.645を使用しており、git SCMはすぐにスーパープロジェクトの再帰クローンを実行します。これで、同じJenkinsジョブワークスペース内のそれぞれのディレクトリにあるスーパープロジェクトファイルとすべての依存(サブモジュール)レポファイルを取得できます。
これがcorrectアプローチであることを保証するのではなく、むしろアプローチです。
Jenkins: Multiple SCM-非推奨です。 GITプラグイン-複数のリポジトリでは機能しません。
コードとしてのスクリプティング/パイプライン-行く方法です。
私もこの問題を抱えていました。他のプロジェクトでトリガー/呼び出しビルドを使用して解決しました。リポジトリごとに、パラメータを使用してダウンストリームプロジェクトを呼び出します。
主なプロジェクト:
This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None
次に、各リポジトリに対して、次のようなダウンストリームプロジェクトを呼び出します。
Trigger/call builds on other projects:
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>
下流プロジェクト:Linux-Tag-Checkout:
This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<Host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/Origin/tags/${TAG}
Branch Specifier: */tags/${TAG}
git-repo を使用して、複数のGITリポジトリを管理しています。 Jenkins Repoプラグイン もあり、git-repoによって管理されるリポジトリのすべてまたは一部を同じJenkinsジョブワークスペースにチェックアウトできます。