web-dev-qa-db-ja.com

Jenkinsで、プロジェクトを特定のディレクトリにチェックアウトする方法(GITを使用)

「svn」スタイルでごめんなさい。SVNからGIT(CI Jenkins環境を含む)への移行プロセス中です。

必要なのは、JenkinsがGITプロジェクト(リポジトリ?)を特定のディレクトリにチェックアウト(またはクローンと言うべきですか)できるようにすることです。 refspecsマジックを試してみましたが、理解して正常に使用するのはそれほど明白ではありませんでした。

さらに、同じJenkinsプロジェクトで、プロジェクトルートの下にあるいくつかのプライベートGitHubリポジトリをいくつかの個別のディレクトリにチェックアウトする必要がある場合、どうすればよいですか?

GitHubプラグインがインストールされています。正しいことを言いたいと思います。

55
viebel

Jenkinsのデフォルトの gitプラグイン は、非常にうまく機能します。

新しいgitリポジトリ(プロジェクト構成>Source Code Management> GITオプションをチェック)をプロジェクトに追加した後、プラグイン設定の一番下リポジトリブラウザリージョン。 Advancedボタンがあるはずです。クリックすると、新しいフォームが表示され、値がrepoのローカルサブディレクトリ(オプション)として記述されます。これをfolderに設定すると、プラグインは、リポジトリをワークスペースに関連するフォルダーにチェックアウトします。これにより、プロジェクト内の必要な数のリポジトリをすべて別々の場所に配置できます。

または、使用しているプロジェクトで許可されている場合は、SVNの外部パスに似たGITサブモジュールを使用できます。 GIT Book には、まさにそのトピックに関するセクションがあります。それが何らかのポリシーに反しない場合、サブモジュールは非常に使いやすく、インポートされる場所、バージョン/タグ/ブランチを制御する強力な方法を提供し、ローカルリポジトリで利用可能であり、移植性が向上します。

明らかにGITプラグインはサブモジュールのチェックアウトをサポートしているため、Jenkinsはサブモジュールを非常に効果的に使用できます。

39
Łukasz Rżanek

@ŁukaszRżanekに同意します- git plugin

しかし、私はオプションを使用します:次のように有効になっているサブ方向へのチェックアウト:
Source Code Managementで、Gitにチェックマークを付けます
追加ボタンをクリックして、サブディレクトリへのチェックアウトを選択します

enter image description here

46
biolinh

新しいJenkins 2.0パイプライン(以前はワークフロープラグインと呼ばれていました)では、これは次の場合に異なる方法で実行されます。

  • メインリポジトリ
  • その他の追加リポジトリ

ここでは、特にMultibranch Pipelineバージョン2.9について言及しています。

メインリポジトリ

これは、Jenkinsfileを含むリポジトリです。

パイプラインプロジェクトのConfigure画面で、リポジトリ名などを入力します。

Additional Behaviors>サブディレクトリへのチェックアウトを使用しないでください。これにより、Jenkinsfileがサブディレクトリ Jenkinsが見つけられない場所 に配置されます。

Jenkinsfileで、dir()を使用してサブディレクトリ内のメインリポジトリをチェックアウトします。

dir('subDir') {
    checkout scm
}

追加のリポジトリ

さらにリポジトリをチェックアウトする場合は、Pipeline Syntaxジェネレーターを使用して、Groovyコードスニペットを自動的に生成します。

パイプラインプロジェクトのConfigure画面で:

  1. Pipeline Syntaxを選択します。 Sample Stepドロップダウンメニューで、checkout:General SCMを選択します。
  2. GitなどのSCMシステムを選択します。リポジトリまたはデポに関する通常の情報を入力します。
  3. マルチブランチパイプラインでは、環境変数env.BRANCH_NAMEにメインリポジトリのブランチ名が含まれていることに注意してください。
  4. Additional Behaviorsドロップダウンメニューで、サブディレクトリにチェックアウトするを選択します
  5. Groovyの生成をクリックします。 Jenkinsは、指定したSCMチェックアウトに対応するGroovyコードスニペットを表示します。
  6. このコードをパイプラインスクリプトまたはJenkinsfileにコピーします。
33
John McGehee

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>'
        ......
    }
}
17
Jeremy Whiting

さらに、同じJenkinsプロジェクトで、プロジェクトルートの下にあるいくつかのプライベートGitHubリポジトリをいくつかの個別のディレクトリにチェックアウトする必要がある場合。どうすればできますか?

Jenkin's Multiple SCMs Plugin は、いくつかのリポジトリの問題を非常にうまく解決しました。共通のフォルダーの下に4つの異なるgitリポジトリをチェックアウトするプロジェクトビルドを作成しました。 (gitはサブモジュールなしで十分に複雑なので、 以前に提案された ŁukaszRżanekとしてgitスーパープロジェクトを使用することに少し抵抗があります。)

6
Alberto