私はGitに大きなリポジトリを持っています。 Jenkinsでプロジェクトからサブフォルダを1つだけチェックアウトするジョブを作成するにはどうすればよいですか?JenkinsとGitの疎なチェックアウト
答えて
Jenkins Git Pluginサポートスパースチェックアウト git-plugin 2.1.0(2014年4月)以降です。この機能には、git> = 1.7.0が必要です。 「追加動作」→「スパースチェックアウトパス」の下にあります。
参照してください:JIRA課題JENKINS-21809
残念ながら、Gitはリポジトリ全体をローカルにコピーする必要があります。 Gitがサーバーからファイルを取得する速度が向上しないことがあります。 – luka5z
残念ながら、元の "パス構造"をそのままチェックしているので、実際には "1つのディレクトリ"をチェックアウトするのとは異なり、FWIW – rogerdpack
というだけですが、サブディレクトリの名前はスペースで区切ります。チェックアウトしたい "フォルダ/ to/include/directory withSpace" .. – OK999
Gitのsparse checkout機能を使用できます。 Gitはリポジトリ全体をローカルディスクにクローンしていることに注意してください。しかし、それは圧縮されているので、それほど悪くはありません。
- Jenkinsで新しいジョブを作成するには、Gitリポジトリを[ソースコード管理]セクションに設定します。
- プロジェクトをビルドします。リポジトリ全体をローカルディスクにクローンします。
- プロジェクトのワークスペースフォルダを開き、.gitフォルダ以外のすべてを削除します。
プロジェクトのワークスペースフォルダのGitシェルを開きます。
git config core.sparsecheckout true
更新作業ツリー:
git read-tree -mu HEAD
.git /情報フォルダに
sparse-checkout
ファイルを作成し、スパース・チェックアウトを有効にします。あなたがそう(ノート末尾のスラッシュ)のように、そのファイルにチェックアウトしたいサブフォルダへのパスを追加します。folder/to/include/
再度プロジェクトをビルドします。今回は、ワークスペースフォルダにサブフォルダが1つだけ表示されます。
すべてのジョブでこれらのコマンドを実行する必要がありますか? –
@RuudLendersはい、1つのサブフォルダだけをチェックアウトしたいすべてのジョブに対して実行する必要があります。 –
ステップ5の「読み込みツリー-mu HEAD」をステップ6に従わないでください。私が従う限り、まずGitにどのファイルを見るべきかを伝え(ステップ6)、ツリー情報をインデックスに読み込まなければなりません。 – borisdiakur
あなたはただあなただけ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
このすべては、あなたがジェンキンスを知ってどれだけに依存します。
問題はJenkinsが通常プラグインを使用してソースコードを取得し、Gitプラグインでチェックアウトのコマンドを変更できないということです。 –
私は既存のプラグインを書いたり変更したりするのは問題が多いと思います。 –
は、その複雑さを追加することが本当に必要ですか?リポジトリが最初にクローン化されると、gitは新しいオブジェクトを取得するだけです。あなたのjenkinsサーバに十分なストレージがない場合を除いて、私はすべてをクローンして複雑さを避けるだけです。 – wadesworld