리포지토리
리포지토리는 플레이북과 역할 같은 Ansible 콘텐츠를 저장하고 관리하는 공간입니다.

목록에는 이름, 브랜치가 포함된 Git URL, 인증에 사용되는 키가 표시됩니다.
Semaphore는 다음과 같은 리포지토리를 인식합니다:
- 로컬 파일 시스템(
/path/to/the/repo) - 로컬 Git 리포지토리(
file://) - HTTPS(
https://) 또는 SSH(ssh://또는 짧은 형식git@host:org/repo.git)로 접근하는 원격 Git 리포지토리 git://프로토콜도 지원되지만 보안상의 이유로 권장하지 않습니다.
모든 작업 템플릿은 실행하려면 리포지토리가 필요합니다.
인증
인증이 필요한 원격 리포지토리를 사용하는 경우 Semaphore의 키 저장소 섹션에서 키를 설정해야 합니다.
SSH를 사용하는 원격 리포지토리의 경우 키 저장소에 있는 SSH 키를 사용해야 합니다.
인증이 없는 원격 리포지토리의 경우 None 유형의 키를 생성할 수 있습니다.
리포지토리의 키는 해당 리포지토리에만 사용됩니다. 다른 곳에 호스팅되어 별도의 자격 증명이 필요한 서브모듈, requirements.yml 역할 또는 기타 리포지토리에 접근하려면 Host config에서 매핑을 추가하세요.
새 리포지토리 생성
-
추가하려는 리포지토리에 대한 키를 키 저장소 섹션에서 설정했는지 확인합니다.
-
Semaphore의 리포지토리 섹션으로 이동하여 오른쪽 상단의 새 리포지토리 버튼을 클릭합니다.
-
리포지토리를 설정합니다:
- 리포지토리 이름 지정
- URL 추가. URL은 다음으로 시작해야 합니다:
- 파일 시스템의 로컬 폴더는
/path/to/the/repo - HTTPS로 접근하는 원격 Git 리포지토리는
https:// - SSH로 접근하는 원격 Git 리포지토리는
ssh:// - 로컬 Git 리포지토리는
file:// - Git 프로토콜로 접근하는 원격 Git 리포지토리는
git://
- 파일 시스템의 로컬 폴더는
- 리포지토리의 브랜치를 설정합니다. 어떤 값이어야 할지 확실하지 않다면 대개 master 또는 main입니다
- 리포지토리가 모든 템플릿이 공유하는 모노레포라면 모든 템플릿에 단일 체크아웃을 선택합니다. 모노레포를 참조하십시오
- 이 리포지토리를 설정하기 전에 구성해 둔 액세스 키를 선택합니다.
-
모든 설정이 완료되면 저장을 클릭합니다.
모노레포: 모든 템플릿에 하나의 체크아웃
모든 템플릿에 단일 체크아웃 옵션은 Semaphore 2.20부터 사용할 수 있습니다. 이전 버전은 항상 템플릿마다 리포지토리를 한 번씩 복제합니다.
기본적으로 Semaphore는 템플릿마다 리포지토리를 한 번씩 복제하므로 각 템플릿은 자체 복사본에서 작업합니다. 많은 템플릿이 공유하는 큰 리포지토리의 경우 복사본이 디스크 공간을 차지하고, 각 작업은 자체 복사본의 복제 또는 풀로 시작됩니다.
모든 템플릿에 단일 체크아웃을 선택하면 리포지토리를 한 번만 복제하고 그 체크아웃을 프로젝트의 모든 템플릿이 공유합니다. 이 옵션은 복제되지 않는 로컬 폴더(/path/to/the/repo)에는 사용할 수 없습니다.

공유 체크아웃의 동작 방식:
- 작업이 시작되기 전에 Semaphore는 체크아웃에 잠금을 걸고 리포지토리에 설정된 브랜치를 fetch 및 pull한 다음 잠금을 해제합니다. 체크아웃이 업데이트되는 동안 다른 템플릿의 작업은 잠금을 기다리지만, 작업 자체는 병렬로 실행됩니다.
- 브랜치마다 여전히 자체 체크아웃을 가지므로 브랜치가 다른 리포지토리는 작업 트리를 공유하지 않습니다.
- 체크아웃은 공유되지만 Ansible 홈 디렉터리(
requirements.yml에서 설치된 역할과 컬렉션)는 템플릿마다 분리되어 있습니다.
모든 템플릿이 같은 브랜치의 같은 체크아웃에서 작업하므로 모노레포의 템플릿은 자체 브랜치를 가질 수 없고, 작업이 브랜치나 커밋을 선택할 수 있게 하는 브랜치 프롬프트도 활성화할 수 없습니다. 템플릿 폼은 둘 다 비활성화하고 그 이유를 설명하며, API는 그러한 템플릿을 거부합니다. 플레이북이 체크아웃에 쓰지 않도록 하십시오. 작업 트리가 변경되면 다음 pull이 실패하고, Semaphore는 체크아웃을 제거한 뒤 다시 복제합니다.
기존 리포지토리 편집
-
Semaphore의 리포지토리 섹션으로 이동합니다.
-
변경하려는 리포지토리 옆의 연필 아이콘을 클릭하면 리포지토리 설정이 표시됩니다.
리포지토리 삭제
삭제하려는 리포지토리가 어떤 작업 템플릿에서도 사용되지 않는지 확인하십시오. 작업 템플릿에서 사용되고 있는 리포지토리는 삭제할 수 없습니다:
-
Semaphore의 리포지토리 섹션으로 이동합니다.
-
삭제하려는 리포지토리의 휴지통 아이콘을 클릭합니다.
-
이 리포지토리를 삭제하려는 것이 확실하면 확인 팝업에서 예를 클릭합니다.
요구 사항
프로젝트를 초기화할 때 Semaphore는 다음 위치를 아래 순서대로 검색하여 requirements.yml에 명시된 Ansible 역할과 컬렉션을 설치합니다.
역할
playbook_dir/roles/requirements.ymlplaybook_dir/requirements.ymlrepo_path/roles/requirements.ymlrepo_path/requirements.yml
컬렉션
playbook_dir/collections/requirements.ymlplaybook_dir/requirements.ymlrepo_path/collections/requirements.ymlrepo_path/requirements.yml
처리 로직
- 각 파일은 독립적으로 처리됩니다
- 파일이 존재하면 해당 유형(역할 또는 컬렉션)에 따라 처리됩니다
- 파일 처리 중 오류가 발생하면 설치 과정이 중단되고 오류를 반환합니다
- 루트 디렉터리에 있는 동일한 requirements.yml 파일(
playbook_dir/requirements.yml 및repo_path/requirements.yml)은 두 번 처리됩니다 - 한 번은 역할에 대해, 한 번은 컬렉션에 대해 처리됩니다
Semaphore는 오류가 발생하는 경우를 제외하고, 이전 위치가 발견되었거나 성공적으로 처리되었는지 여부와 관계없이 이 모든 위치를 처리하려고 시도합니다.