IBM Cloud Docs
clone_repo() 函数

clone_repo() 函数

clone_repo() 函数旨在克隆一个 Git版本库,可选择包括子模块,支持分支和提交 ID 选择,以及处理连接超时的重试机制。 它还会对错误信息进行安全处理。

参数:

  • repository : 要克隆的 Git 仓库的 URL。
  • git_branch : 要签出的分支。 如果未提供,则使用默认分支。
  • directory_name:将克隆版本库的目录名称。
  • token_path : 包含 Git 身份验证令牌的文件路径。
  • use_submodules:(可选)设置为 "1 "可克隆子模块,默认为 "0"。
  • 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) 协议声明的子模块。 脚本依赖于所提供的 Git 身份验证令牌,该令牌在 HTTP(S) URL 中使用。 使用其他协议声明的子模块(如 SSH)将无法无缝运行,因为脚本未配置为处理 SSH 密钥或其他身份验证方法。
  • 变量 opt-in-clone-submodulesopt-in-clone-remote-submodules 在决定脚本如何处理子模块的克隆方面起着至关重要的作用。
  • opt-in-clone-submodules:控制是否在版本库克隆过程中克隆子模块。
    • 如果 opt-in-clone-submodules 设置为 1,脚本就会在 Git 克隆命令中包含 --recurse-submodules 参数,指示 Git 初始化和更新版本库中的每个子模块。
    • 如果未设置或设置为其他值,子模块将不会被克隆,脚本将仅克隆主版本库。
  • opt-in-clone-remote-submodules:扩展了 opt-in-clone-submodules 的行为,允许从远程版本库克隆子模块,而不是使用父版本库中指定的本地路径。
    • 如果 opt-in-clone-remote-submodules 设置为 1,脚本就会在 --recurse-submodules 旁边添加 --remote-submodules 参数。 这样,Git 就能从远程源获取并克隆子模块,而不是仅仅依赖父版本库中指定的路径。
    • 如果未设置或设置为其他值,子模块将使用父版本库的 .gitmodules 文件中提供的默认本地路径克隆。

重要说明:

  • Retry Mechanism:如果出现“连接超时”错误,脚本会重试克隆命令,最多 5 次,两次重试之间有 2 秒钟的延迟。
  • Error Handling:如果出现身份验证或其他重要错误,脚本将以非零状态退出,并提供解决常见问题的指导。
  • Error Message Sanitisation:脚本会对错误信息进行消毒,以确保敏感信息(如身份验证令牌)不会在输出中暴露。 使用 sed 将 URL 的敏感部分替换为占位符。