IBM Cloud Docs
clone_repo() 함수

clone_repo() 함수

clone_repo() 함수는 브랜치 및 커밋 ID 선택과 연결 시간 초과 처리를 위한 재시도 메커니즘을 지원하며 선택적으로 하위 모듈을 포함하여 Git 리포지토리를 복제하도록 설계되었습니다. 또한 보안을 위해 오류 메시지를 살균합니다.

매개변수:

  • 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_SUBMODULES1 로 설정된 경우 스크립트는 파이프라인 환경 변수를 확인하여 하위 모듈을 복제해야 하는지 여부와 구성 방법을 결정합니다.
  • 서브모듈 복제는 HTTP(S) 파일에서 .gitmodules 프로토콜로 선언된 서브모듈만 지원합니다. 이 스크립트는 HTTP(S) URL에 사용되는 제공된 Git 인증 토큰에 의존합니다. SSH 와 같이 다른 프로토콜로 선언된 하위 모듈은 스크립트가 SSH 키 또는 기타 인증 방법을 처리하도록 구성되지 않았기 때문에 원활하게 작동하지 않습니다.
  • opt-in-clone-submodulesopt-in-clone-remote-submodules 변수는 스크립트에서 하위 모듈 복제를 처리하는 방법을 결정하는 데 중요한 역할을 합니다.
  • opt-in-clone-submodules: 리포지토리 복제 프로세스 중에 서브모듈을 복제할지 여부를 제어합니다.
    • opt-in-clone-submodules1 로 설정된 경우 스크립트는 Git 복제 명령에 --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 : '연결 시간 초과' 오류가 발생하면 스크립트에서 복제 명령을 최대 5회까지 다시 시도하고 시도 사이에 2초의 지연이 있습니다.
  • Error Handling : 인증 또는 기타 심각한 오류가 발생하면 스크립트가 0이 아닌 상태로 종료되고 일반적인 문제 해결에 대한 안내를 제공합니다.
  • Error Message Sanitisation: 스크립트는 오류 메시지를 살균하여 인증 토큰과 같은 민감한 정보가 출력에 노출되지 않도록 합니다. 이 작업은 sed를 사용하여 URL의 민감한 부분을 자리 표시자로 대체합니다.