81

'svn' スタイルで申し訳ありません。現在、SVN から GIT (CI Jenkins 環境を含む) に移行中です。

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

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

GitHub プラグインをインストールしました。私たちが物事を正しく表現したことを願っています。

4

9 に答える 9

57

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

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

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

メインリポジトリ

これは、Jenkinsfile.

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

[Additional Behaviors] > [Check out to a sub-directory]​​は使用しないでください。これにより、Jenkins が見つからないJenkinsfileサブディレクトリに配置されます。

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

dir('subDir') {
    checkout scm
}

追加のリポジトリ

さらに多くのリポジトリをチェックアウトする場合は、パイプライン シンタックスジェネレーターを使用して、Groovy コード スニペットを自動的に生成します。

パイプライン プロジェクトの [構成] 画面で:

  1. [パイプラインの構文]を選択します。[ Sample Step ] ドロップダウン メニューで、[checkout: General SCM ] を選択します。
  2. Gitなどの SCM システムを選択します。リポジトリまたはデポに関する通常の情報を入力します。
  3. マルチブランチ パイプラインでは、環境変数 env.BRANCH_NAMEにメイン リポジトリのブランチ名が含まれていることに注意してください。
  4. [追加の動作] ドロップダウン メニューで、[ サブディレクトリにチェックアウト] を選択します。
  5. [ Groovy を生成] をクリックします。Jenkins は、指定した SCM チェックアウトに対応する Groovy コード スニペットを表示します。
  6. このコードをパイプライン スクリプトまたは にコピーしますJenkinsfile
于 2016-11-03T01:30:26.483 に答える
50

gitプラグインを使用できるという@Łukasz Rżanekに同意します


ただし、オプションを使用します。次のように有効になっているサブ方向へのチェックアウト: ソースコード管理で、Git に チェックを入れ
、追加ボタンをクリックし、サブディレクトリへのチェックアウトを選択します。

ここに画像の説明を入力

于 2015-03-03T09:26:35.677 に答える
48

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

プロジェクトに新しい git リポジトリを追加した後 ([プロジェクト構成] > [ソース コード管理] > [GIT] オプションをチェック)、プラグイン設定の一番下、リポジトリ ブラウザー領域のすぐ上に移動します。Advancedボタンがあるはずです。クリックすると、新しいフォームが表示され、値がLocal subdirectory for repo (optional) と記述されます。これを に設定するfolderと、プラグインはワークスペースに関連するフォルダーにリポジトリをチェックアウトします。このようにして、プロジェクトに必要な数のリポジトリをすべて別々の場所に配置できます。

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

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

于 2012-03-20T17:26:53.923 に答える
23

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>'
        ......
    }
}
于 2016-10-07T07:45:42.897 に答える
6

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

JenkinのMultiple SCMs Pluginは、いくつかのリポジトリの問題をうまく解決してくれました。共通フォルダーの下にある 4 つの異なる git リポジトリーをチェックアウトするプロジェクトのビルドに取り掛かりました。(以前Łukasz Rżanekによって提案されたように、gitスーパープロジェクトを使用するのは少し気が進まない.gitはサブモジュールがなくても十分に複雑だから.)

于 2013-02-21T17:46:22.047 に答える
2

URL から repoName を検索し、指定したディレクトリにチェックアウトします。

String url = 'https://github.com/foo/bar.git';
String[] res = url.split('/');
String repoName = res[res.length-1];
if (repoName.endsWith('.git')) repoName=repoName.substring(0, repoName.length()-4);

checkout([
  $class: 'GitSCM', 
  branches: [[name: 'refs/heads/'+env.BRANCH_NAME]],
  doGenerateSubmoduleConfigurations: false,
  extensions: [
    [$class: 'RelativeTargetDirectory', relativeTargetDir: repoName],
    [$class: 'GitLFSPull'],
    [$class: 'CheckoutOption', timeout: 20],
    [$class: 'CloneOption',
        depth: 3,
        noTags: false,
        reference: '/other/optional/local/reference/clone',
        shallow: true,
        timeout: 120],
    [$class: 'SubmoduleOption', depth: 5, disableSubmodules: false, parentCredentials: true, recursiveSubmodules: true, reference: '', shallow: true, trackingSubmodules: true]
  ],
  submoduleCfg: [],
  userRemoteConfigs: [
    [credentialsId: 'foobar',
    url: url]
  ]
])
于 2021-02-24T09:45:09.457 に答える
-9

私はgithubプラグインを使用していませんが、紹介ページからは、多かれ少なかれgerrit-triggerプラグインに似ています。

プロジェクトをチェックアウトするのに役立つgitプラグインをインストールできます。1つのjenkinsジョブにマルチプロジェクトを含めたい場合は、リポジトリをジョブに追加するだけです。

于 2012-03-19T09:58:49.967 に答える