clone_repo()関数
clone_repo() 関数は、Git リポジトリをクローンするためのもので、オプションでサブモジュールを含むこともできます。 また、セキュリティのためにエラーメッセージをサニタイズする。
パラメーター:
repository
: クローンする Git リポジトリの URL。git_branch
: チェックアウトするブランチ。 提供されない場合、デフォルトのブランチが使用される。directory_name
: リポジトリをクローンするディレクトリの名前です。token_path
: Git 認証トークンを含むファイルへのパス。use_submodules
: (オプション) サブモジュールをクローンするには "1" を設定します。commit_id
: (オプション) 複製後にリセットする特定のコミットID。
機能の実装:
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を使って行われる。