クローンレポ
Git リポジトリのクローニングは、パイプラインにおける重要なステップであり、ソースコードが安全かつ確実に取得されることを保証する。 クローン作成プロセスでは、特定のブランチをチェックアウトしたり、サブモジュールを扱ったり、特定のコミットにリセットしたりすることもできる。 この文書では、clone_repo関数の2つのバージョンについて概説する:
- クローンレポ v1
- クローンレポ v2
クローン作成は、PR(Pull Request)、CI(Continuous Integration)、CC(Code Commit)、CD(Continuous Deployment)パイプラインで重要な役割を果たす。 v1
クローンの作成方法は、環境プロパティ git-clone-version
を使って設定することができる。 このプロパティにより、ユーザーはクローン作成方法 v1
と v2
のどちらかを選択することができ、特定のパイプライン要件に基づくリポジトリの取得方法に柔軟性を提供します。
clone_repo v1( ) 関数
clone_repo() 関数は、Git リポジトリをクローンするためのもので、オプションでサブモジュールを含むこともできます。 また、セキュリティのためにエラーメッセージをサニタイズする。
パラメーター:
パラメーター | 説明 |
---|---|
repository |
クローンする Git リポジトリの URL。 |
git_branch |
チェックアウトするブランチ。 提供されない場合、デフォルトのブランチが使用される。 |
directory_name |
リポジトリをクローンするディレクトリの名前。 |
token_path |
Git 認証トークンを含むファイルへのパス。 |
use_submodules |
(オプ シ ョ ナル) サブモ ジ ュ ールの ク ロ ーン を行 う には 「1」 を設定。 デフ ォル ト は 「0」。 |
commit_id |
(オプション)クローン後にリセットする特定のコミットID。 |
force-exit |
(オプション)
|
機能の実装:
Initialize Variables
: 環境変数とデフォルトの設定。Token and User Validation
: 認証の詳細が利用可能であることを確認します。Clone Repository
: リトライメカニズム(オプション)を使ってリポジトリをクローンします。Submodule Handling
: サブモジュールが有効な場合は、必要な環境を設定し、サブモジュールをクローンします。Checkout Branch or Commit
: 指定したブランチやコミットをチェックアウトします。Finalize and Export
: 環境変数を設定し、ステータスメッセージを表示します。
戻り値:
clone_repo
関数は、完了時にいくつかの環境変数/プロパティを設定します:
git_branch
: チェックアウトされたブランチ。git_commit
: リポジトリがリセットされたコミットID。directory_name
: リポジトリがクローンされたディレクトリ。submodules_status
: サブモジュールがあれば、そのステータス。
関数呼び出し:
clone_repo <repo url e.g. https://github.ibm.com/owner/repo.git> <branch e.g. master> <repo directory e.g. repo_directory> <token path e.g. /path/to/token> <if submodules to be used e.g. 1> <commit id e.g. abcd1234>
サブモジュールのクローニング:
USE_SUBMODULES
が1
に設定されている場合、スクリプトはパイプライン環境変数をチェックし、 サブモジュールがクローンされるべきかどうか、どのように設定されるべきかを決定します。- サブモジュールの複製は、
.gitmodules
ファイルでHTTP(S)
プロトコルで宣言されたサブモジュールにのみ対応しています。 このスクリプトは、HTTP(S)
URL で使われる Git 認証トークンに依存しています。SSH
のような他のプロトコルで宣言されたサブモジュールは、スクリプトがSSH鍵や他の認証方法を扱うように設定されていないため、シームレスに動作しません。 - 変数
opt-in-clone-submodules
とopt-in-clone-remote-submodules
は、スクリプトがサブモジュールのクローンをどのように扱うかを決める重要な役割を果たします。 opt-in-clone-submodules
:リポジトリのクローン作成時にサブモジュールをクローンするかどうかを制御します。opt-in-clone-submodules
を1
に設定すると、スクリプトは Git clone コマンドに--recurse-submodules
パラメータを含み、Git にリポジトリ内の各サブモジュールを初期化して更新するように指示します。- 設定されていないか、他の値に設定されている場合、サブモジュールはクローンされず、スクリプトはメインリポジトリのみのクローンを進めます。
opt-in-clone-remote-submodules
:opt-in-clone-submodules
の動作を拡張し、サブモジュールを親リポジトリで指定されたローカルパスを使うのではなく、リモートリポジトリからクローンできるようにします。opt-in-clone-remote-submodules
が1
に設定されている場合、スクリプトは--remote-submodules
パラメータを--recurse-submodules
と一緒に追加します。 これにより、Git は親リポジトリで指定されたパスだけに頼るのではなく、サブモジュールをリモートのオリジンから取得してクローンするようになります。- 設定されていないか、他の値に設定されている場合、サブモジュールは親リポジトリの
.gitmodules
ファイルで指定されたデフォルトのローカルパスを使用してクローンされます。
重要なメモ:
Retry Mechanism
: スクリプトは、"Connection timed out "エラーが発生した場合、2秒間の遅延を挟んで最大5回までcloneコマンドを再試行します。Error Handling
: 認証エラーやその他の重大なエラーが発生した場合、スクリプトはゼロ以外のステータスで終了し、一般的な問題を解決するためのガイダンスを提供します。Error Message Sanitisation
: スクリプトはエラーメッセージをサニタイズし、 認証トークンなどの機密情報が出力に含まれないようにします。 これは、URLの機密部分をプレースホルダーに置き換えるためにsedを使って行われる。
clone_repo v2( ) 関数
clone_repo v2 関数は、 v1 の改良版で、浅いクローンをサポートし、エラー処理も改善されている。
パラメーター
パラメーター | 説明 |
---|---|
repository |
Git リポジトリ url. |
token-path |
(オプション) Git トークン・ファイルへのパス。 |
directory |
(オプション)リポジトリをクローンするターゲット・ディレクトリ。 |
commit-id |
(オプション)チェックアウトする特定のコミットID。 |
clone-submodules |
(オプション)サブモジュールのクローンを作成し、初期化する。 |
depth |
(オプション)浅いクローンのための深さ。 |
use-lfs |
(オプション)
|
force-exit |
(オプション)
|
git-clone-options |
(オプション) Git フェッチの追加オプション。 |
機能呼び出し
clone_repo_v2 --repository <e.g. https://github.ibm.com/owner/repo.git> --branch <e.g. master> --directory <e.g. repo_directory> --token-path <e.g. /path/to/token> --clone-submodules <if submodules to be used e.g. 1> --force-exit <false/true> --use-lfs <false/true> --depth ''
サブモジュールのクローニング
v1、 v2、どちらもサブモジュールのクローニングをサポートしている。
環境のプロパティー
以下の環境プロパティにより、 Git クローニングプロセスのカスタマイズが可能になり、パイプラインの要件に応じた最適なパフォーマンスと柔軟性が確保されます。 これらのプロパティは、CI(継続的インテグレーション)、PR(プルリクエスト)、または必要に応じて他のパイプラインで設定されるべきである。
プロパティー | 説明 |
---|---|
git-depth |
浅いクローニングの深さを指定する。 空のままだと、完全なクローンが実行される。 これを数値(たとえば1)に設定すると、シャロークローニングが有効になり、最新のコミットのみをフェッチして高速なパフォーマンスを実現する。 |
git-use-lfs |
Git Large File Storage (LFS) を使用するかどうかを決定する。 true/false . |
git-options |
カスタム Git オプションを追加で渡せるようにする 例: --verbose --quiet . |
clone_repo v2 関数は、より効率的で柔軟なリポジトリ・クローニング・アプローチを導入し、浅いクローニング、 Git LFS サポート、カスタマイズ可能な Git オプションなどの機能でパフォーマンスを最適化します。