IBM Cloud Docs
clone_repo()関数

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_SUBMODULES1 に設定されている場合、スクリプトはパイプライン環境変数をチェックし、 サブモジュールがクローンされるべきかどうか、どのように設定されるべきかを決定します。
  • サブモジュールの複製は、.gitmodules ファイルで HTTP(S) プロトコルで宣言されたサブモジュールにのみ対応しています。 このスクリプトは、HTTP(S) URL で使われる Git 認証トークンに依存しています。 SSH のような他のプロトコルで宣言されたサブモジュールは、スクリプトがSSH鍵や他の認証方法を扱うように設定されていないため、シームレスに動作しません。
  • 変数 opt-in-clone-submodulesopt-in-clone-remote-submodules は、スクリプトがサブモジュールのクローンをどのように扱うかを決める重要な役割を果たします。
  • opt-in-clone-submodules:リポジトリのクローン作成時にサブモジュールをクローンするかどうかを制御します。
    • opt-in-clone-submodules1 に設定すると、スクリプトは Git clone コマンドに --recurse-submodules パラメータを含み、Git にリポジトリ内の各サブモジュールを初期化して更新するように指示します。
    • 設定されていないか、他の値に設定されている場合、サブモジュールはクローンされず、スクリプトはメインリポジトリのみのクローンを進めます。
  • opt-in-clone-remote-submodules: opt-in-clone-submodules の動作を拡張し、サブモジュールを親リポジトリで指定されたローカルパスを使うのではなく、リモートリポジトリからクローンできるようにします。
    • opt-in-clone-remote-submodules1 に設定されている場合、スクリプトは --remote-submodules パラメータを --recurse-submodules と一緒に追加します。 これにより、Git は親リポジトリで指定されたパスだけに頼るのではなく、サブモジュールをリモートのオリジンから取得してクローンするようになります。
    • 設定されていないか、他の値に設定されている場合、サブモジュールは親リポジトリの .gitmodules ファイルで指定されたデフォルトのローカルパスを使用してクローンされます。

重要なメモ:

  • Retry Mechanism : スクリプトは、"Connection timed out "エラーが発生した場合、2秒間の遅延を挟んで最大5回までcloneコマンドを再試行します。
  • Error Handling : 認証エラーやその他の重大なエラーが発生した場合、スクリプトはゼロ以外のステータスで終了し、一般的な問題を解決するためのガイダンスを提供します。
  • Error Message Sanitisation: スクリプトはエラーメッセージをサニタイズし、 認証トークンなどの機密情報が出力に含まれないようにします。 これは、URLの機密部分をプレースホルダーに置き換えるためにsedを使って行われる。