web-dev-qa-db-ja.com

複数のGitリポジトリを同じJenkinsワークスペースにチェックアウトする

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を使用してこれが単に不可能な場合は、ビルド前のステップ/スクリプトを使用してプロジェクトを適切な場所に移動できると思います。プロジェクトのビルド構成を変更するオプションではありません。

112
u123

Jenkins + Gitプラグインでは、1つのワークスペースで一度に複数のリポジトリをチェックアウトすることはできません。

回避策として、それぞれ単一のレポをチェックアウトする複数のアップストリームジョブを作成し、最終的なプロジェクトワークスペースにコピーする(いくつかのレベルで問題がある)か、必要な各レポをチェックアウトするシェルスクリプトステップを設定することができます。ビルド時のジョブワークスペース。

以前は、Multiple SCMプラグインがこの問題を解決できましたが、現在では非推奨です。マルチSCMプラグインページから:「ユーザーは https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin に移行する必要があります。パイプラインは複数のSCMをチェックアウトするためのより良い方法を提供します、Jenkinsコア開発チームによってサポートされています。」

63
CIGuy

マルチSCMプラグインの場合:

  • チェックアウトする必要のあるリポジトリ(メインプロジェクトまたは依存プロジェクト)ごとに異なるリポジトリエントリを作成します。

  • 各プロジェクトの「詳細」メニュー(2番目の「詳細」メニュー、リポジトリごとに「詳細」というラベルの付いたボタンが2つあります)で、「リポジトリのローカルサブディレクトリ(オプション)」テキストフィールドを見つけます。プロジェクトをコピーする「ワークスペース」ディレクトリのサブディレクトリを指定できます。私の開発用コンピューターのファイルシステムをマップできます。

「2番目の詳細メニュー」はもう存在しません。代わりに、「追加」ボタン(「追加の動作」セクション)を使用して、「サブディレクトリにチェックアウト」を選択します。

  • antを使用している場合、ワークスペースのルートディレクトリではなくサブディレクトリにあるビルドターゲットを含むbuild.xmlファイルのように、「Invoke Ant」構成にそれを反映する必要があります。これを行うには、「Invoke ant」で「Advanced」を押し、build.xmlが配置されているサブディレクトリの名前を含む「Build file」入力テキストを入力します。

お役に立てば幸いです。

76
GaRRaPeTa

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 を使用することを検討してください。

30
Joker

Jenkinsで Multiple SCMs Plugin をGit Pluginと組み合わせて使用​​しました。

19

リポジトリの関係に応じて、別のアプローチは、リポジトリの1つに git submodules として他のリポジトリ(リポジトリ)を追加することです。 gitサブモジュールは、他のリポジトリへの参照を作成します。これらのサブモジュールリポジトリは、 "superproject"(公式用語)を複製するときに--recursiveフラグを指定しない限り複製されません。

現在のプロジェクトにサブモジュールを追加するコマンドは次のとおりです。

git submodule add <repository URI path to clone>

Jenkins v1.645を使用しており、git SCMはすぐにスーパープロジェクトの再帰クローンを実行します。これで、同じJenkinsジョブワークスペース内のそれぞれのディレクトリにあるスーパープロジェクトファイルとすべての依存(サブモジュール)レポファイルを取得できます。

これがcorrectアプローチであることを保証するのではなく、むしろアプローチです。

5
mikehwang

Jenkins: Multiple SCM-非推奨です。 GITプラグイン-複数のリポジトリでは機能しません。

コードとしてのスクリプティング/パイプライン-行く方法です。

4
Arun Sangal

私もこの問題を抱えていました。他のプロジェクトでトリガー/呼び出しビルドを使用して解決しました。リポジトリごとに、パラメータを使用してダウンストリームプロジェクトを呼び出します。

主なプロジェクト:

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} 
1
Torbjörn Gard

git-repo を使用して、複数のGITリポジトリを管理しています。 Jenkins Repoプラグイン もあり、git-repoによって管理されるリポジトリのすべてまたは一部を同じJenkinsジョブワークスペースにチェックアウトできます。

0
vladisld