「svn」スタイルでごめんなさい。SVNからGIT(CI Jenkins環境を含む)への移行プロセス中です。
必要なのは、JenkinsがGITプロジェクト(リポジトリ?)を特定のディレクトリにチェックアウト(またはクローンと言うべきですか)できるようにすることです。 refspecsマジックを試してみましたが、理解して正常に使用するのはそれほど明白ではありませんでした。
さらに、同じJenkinsプロジェクトで、プロジェクトルートの下にあるいくつかのプライベートGitHubリポジトリをいくつかの個別のディレクトリにチェックアウトする必要がある場合、どうすればよいですか?
GitHubプラグインがインストールされています。正しいことを言いたいと思います。
Jenkinsのデフォルトの gitプラグイン は、非常にうまく機能します。
新しいgitリポジトリ(プロジェクト構成>Source Code Management> GITオプションをチェック)をプロジェクトに追加した後、プラグイン設定の一番下リポジトリブラウザリージョン。 Advancedボタンがあるはずです。クリックすると、新しいフォームが表示され、値がrepoのローカルサブディレクトリ(オプション)として記述されます。これをfolder
に設定すると、プラグインは、リポジトリをワークスペースに関連するフォルダーにチェックアウトします。これにより、プロジェクト内の必要な数のリポジトリをすべて別々の場所に配置できます。
または、使用しているプロジェクトで許可されている場合は、SVNの外部パスに似たGITサブモジュールを使用できます。 GIT Book には、まさにそのトピックに関するセクションがあります。それが何らかのポリシーに反しない場合、サブモジュールは非常に使いやすく、インポートされる場所、バージョン/タグ/ブランチを制御する強力な方法を提供し、ローカルリポジトリで利用可能であり、移植性が向上します。
明らかにGITプラグインはサブモジュールのチェックアウトをサポートしているため、Jenkinsはサブモジュールを非常に効果的に使用できます。
@ŁukaszRżanekに同意します- git plugin
しかし、私はオプションを使用します:次のように有効になっているサブ方向へのチェックアウト:
Source Code Managementで、Gitにチェックマークを付けます
追加ボタンをクリックして、サブディレクトリへのチェックアウトを選択します
新しいJenkins 2.0パイプライン(以前はワークフロープラグインと呼ばれていました)では、これは次の場合に異なる方法で実行されます。
ここでは、特にMultibranch Pipelineバージョン2.9について言及しています。
メインリポジトリ
これは、Jenkinsfile
を含むリポジトリです。
パイプラインプロジェクトのConfigure画面で、リポジトリ名などを入力します。
Additional Behaviors>サブディレクトリへのチェックアウトを使用しないでください。これにより、Jenkinsfile
がサブディレクトリ Jenkinsが見つけられない場所 に配置されます。
Jenkinsfile
で、dir()
を使用してサブディレクトリ内のメインリポジトリをチェックアウトします。
dir('subDir') {
checkout scm
}
追加のリポジトリ
さらにリポジトリをチェックアウトする場合は、Pipeline Syntaxジェネレーターを使用して、Groovyコードスニペットを自動的に生成します。
パイプラインプロジェクトのConfigure画面で:
env.BRANCH_NAME
にメインリポジトリのブランチ名が含まれていることに注意してください。Jenkinsfile
にコピーします。Pipelineプラグインを調査する価値があります。プラグインを使用すると、複数のVCSプロジェクトを相対ディレクトリパスにチェックアウトできます。 VCSチェックアウトごとに事前にディレクトリを作成します。次に、新しくチェックアウトしたVCSワークスペースにコマンドを発行します。私の場合、gitを使用しています。しかし、あなたはアイデアを得る必要があります。
node{
def exists = fileExists 'foo'
if (!exists){
new File('foo').mkdir()
}
dir ('foo') {
git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
......
}
def exists = fileExists 'bar'
if (!exists){
new File('bar').mkdir()
}
dir ('bar') {
git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
......
}
def exists = fileExists 'baz'
if (!exists){
new File('baz').mkdir()
}
dir ('baz') {
git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
......
}
}
さらに、同じJenkinsプロジェクトで、プロジェクトルートの下にあるいくつかのプライベートGitHubリポジトリをいくつかの個別のディレクトリにチェックアウトする必要がある場合。どうすればできますか?
Jenkin's Multiple SCMs Plugin は、いくつかのリポジトリの問題を非常にうまく解決しました。共通のフォルダーの下に4つの異なるgitリポジトリをチェックアウトするプロジェクトビルドを作成しました。 (gitはサブモジュールなしで十分に複雑なので、 以前に提案された ŁukaszRżanekとしてgitスーパープロジェクトを使用することに少し抵抗があります。)