2012-05-28 15 views
43

私はGitに大きなリポジトリを持っています。 Jenkinsでプロジェクトからサブフォルダを1つだけチェックアウトするジョブを作成するにはどうすればよいですか?JenkinsとGitの疎なチェックアウト

+2

は、その複雑さを追加することが本当に必要ですか?リポジトリが最初にクローン化されると、gitは新しいオブジェクトを取得するだけです。あなたのjenkinsサーバに十分なストレージがない場合を除いて、私はすべてをクローンして複雑さを避けるだけです。 – wadesworld

答えて

42

Jenkins Git Pluginサポートスパースチェックアウト git-plugin 2.1.0(2014年4月)以降です。この機能には、git> = 1.7.0が必要です。 「追加動作」→「スパースチェックアウトパス」の下にあります。

screenshot

参照してください:JIRA課題JENKINS-21809

+0

残念ながら、Gitはリポジトリ全体をローカルにコピーする必要があります。 Gitがサーバーからファイルを取得する速度が向上しないことがあります。 – luka5z

+5

残念ながら、元の "パス構造"をそのままチェックしているので、実際には "1つのディレクトリ"をチェックアウトするのとは異なり、FWIW – rogerdpack

+1

というだけですが、サブディレクトリの名前はスペースで区切ります。チェックアウトしたい "フォルダ/ to/include/directory withSpace" .. – OK999

20

Gitのsparse checkout機能を使用できます。 Gitはリポジトリ全体をローカルディスクにクローンしていることに注意してください。しかし、それは圧縮されているので、それほど悪くはありません。

  1. Jenkinsで新しいジョブを作成するには、Gitリポジトリを[ソースコード管理]セクションに設定します。
  2. プロジェクトをビルドします。リポジトリ全体をローカルディスクにクローンします。
  3. プロジェクトのワークスペースフォルダを開き、.gitフォルダ以外のすべてを削除します。
  4. プロジェクトのワークスペースフォルダのGitシェルを開きます。

    git config core.sparsecheckout true 
    
  5. 更新作業ツリー:

    git read-tree -mu HEAD 
    
  6. .git /情報フォルダにsparse-checkoutファイルを作成し、スパース・チェックアウトを有効にします。あなたがそう(ノート末尾のスラッシュ)のように、そのファイルにチェックアウトしたいサブフォルダへのパスを追加します。

    folder/to/include/ 
    
  7. 再度プロジェクトをビルドします。今回は、ワークスペースフォルダにサブフォルダが1つだけ表示されます。

+0

すべてのジョブでこれらのコマンドを実行する必要がありますか? –

+1

@RuudLendersはい、1つのサブフォルダだけをチェックアウトしたいすべてのジョブに対して実行する必要があります。 –

+0

ステップ5の「読み込みツリー-mu HEAD」をステップ6に従わないでください。私が従う限り、まずGitにどのファイルを見るべきかを伝え(ステップ6)、ツリー情報をインデックスに読み込まなければなりません。 – borisdiakur

1

あなたはただあなただけrm -rf作業フォルダ可能性、それをクリアしてmkdir workingdirでそれを再作成するには

git checkout your-branch -- the/desired/path anthother/desired/path 

を使用するカスタム・ステップを持つことができます。これは、上記のコマンドのgitのレベルでこのオプションを指定する必要があります:

git --working-dir="/path/to/workingdir" checkout your-branch -- the/desired/path anthother/desired/path 

このすべては、あなたがジェンキンスを知ってどれだけに依存します。

+0

問題はJenkinsが通常プラグインを使用してソースコードを取得し、Gitプラグインでチェックアウトのコマンドを変更できないということです。 –

+0

私は既存のプラグインを書いたり変更したりするのは問題が多いと思います。 –