파이프라인에서 여러 리포지토리 체크아웃
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
파이프라인은 원본, 도구, 스크립트 또는 코드를 빌드하는 데 필요한 기타 항목이 포함된 여러 리포지토리에 의존하는 경우가 많습니다. 파이프라인에서 여러 checkout
단계를 사용하여 YAML 파이프라인을 저장하는 데 사용하는 리포지토리 외에도 다른 리포지토리를 가져오고 체크 아웃할 수 있습니다.
여러 리포지토리 지정
리포지토리를 리포지토리 리소스로 지정하거나 단계와 인라인으로 checkout
지정할 수 있습니다.
지원되는 리포지토리 유형은 다음과 같습니다.
Azure Repos Git (git
)
- Azure DevOps Server(동일한 조직의 리포지토리로 제한됨)
- Azure DevOps Services
GitHub (github
)
- Azure DevOps Services
GitHubEnterprise (githubenterprise
)
- Azure DevOps Services
Bitbucket Cloud (bitbucket
)
- Azure DevOps Services
Important
파이프라인과 동일한 조직의 Azure Repos Git(git
) 리포지토리만 Azure DevOps Server의 다중 리포지토리 체크 아웃에 대해 지원됩니다.
참고 항목
Azure Pipelines는 Azure Repos Git 리포지토리에 대한 제한 작업 범위 설정을 제공합니다. 다른 프로젝트에서 호스트되는 Azure Repos Git 리포지토리를 확인하려면 액세스를 허용하도록 작업 범위 제한을 구성해야 합니다. 자세한 내용은 작업 권한 부여 범위 제한을 참조하세요.
다음 단계 조합 checkout
이 지원됩니다.
단계 없음 checkout
기본 동작은 마치 첫 번째 단계인 것처럼 checkout: self
현재 리포지토리가 체크 아웃된 것입니다.
단일 checkout: none
단계
동기화되거나 체크 아웃된 리포지토리가 없습니다.
단일 checkout: self
단계
현재 리포지토리가 체크 아웃되었습니다.
checkout
단일 단계가 아닌 self
경우none
지정된 리포지토리는 self
.
여러 checkout
단계
지정된 각 리포지토리는 단계에서 다른 path
리포지토리를 지정하지 않는 한 리포지토리의 이름을 따서 명명된 폴더로 checkout
체크 아웃됩니다. 리포지토리 중 하나로 확인 self
하려면 단계 중 checkout
하나로 사용합니다checkout: self
.
참고 항목
파이프라인이 포함된 리포지토리 이외의 Azure Repos Git 리포지토리를 체크 아웃할 때 파이프라인이 처음으로 실행되기 전에 해당 리소스에 대한 액세스 권한을 부여하라는 메시지가 표시될 수 있습니다. 자세한 내용은 FAQ 섹션에서 다른 리포지토리를 처음으로 체크 아웃하려고 할 때 리소스에 권한을 부여하라는 메시지가 표시되는 이유를 참조하세요.
리포지토리 리소스 정의
리포지토리 유형에 서비스 연결 또는 기타 확장 리소스 필드가 필요한 경우 리포지토리 리소스를 사용해야 합니다. 다음 리포지토리 유형에는 서비스 연결이 필요합니다.
리포지토리 유형 | 서비스 연결 |
---|---|
Bitbucket Cloud | Bitbucket Cloud |
GitHub | GitHub |
GitHub Enterprise 서버 | GitHub Enterprise Server |
파이프라인과 다른 조직의 Azure Repos Git 리포지토리 | Azure Repos/Team Foundation Server |
리포지토리 유형에 서비스 연결이 필요하지 않은 경우에도 리포지토리 리소스를 사용할 수 있습니다( 예를 들어 다른 리포지토리의 템플릿에 대해 이미 정의된 리포지토리 리소스가 있는 경우).
다음 예제에서는 세 개의 리포지토리가 리포지토리 리소스로 선언되어 있습니다. 다른 조직인 GitHub 및 Bitbucket Cloud 리포지토리 리소스의 Azure Repos Git 리포지토리에는 해당 리포지토리 리소스에 대해 지정된 endpoint
서비스 연결이 필요합니다. 이 예제에는 파이프라인 YAML이 포함된 현재 self
리포지토리와 함께 리포지토리 리소스로 선언된 세 개의 리포지토리를 확인하는 네 checkout
가지 단계가 있습니다.
resources:
repositories:
- repository: MyGitHubRepo # The name used to reference this repository in the checkout step
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
- repository: MyBitbucketRepo
type: bitbucket
endpoint: MyBitbucketServiceConnection
name: MyBitbucketOrgOrUser/MyBitbucketRepo
- repository: MyAzureReposGitRepository # In a different organization
endpoint: MyAzureReposGitServiceConnection
type: git
name: OtherProject/MyAzureReposGitRepo
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
- checkout: MyGitHubRepo
- checkout: MyBitbucketRepo
- checkout: MyAzureReposGitRepository
- script: dir $(Build.SourcesDirectory)
리포지토리의 self
이름이 지정 CurrentRepo
script
되면 명령은 다음 출력CurrentRepo MyAzureReposGitRepo MyBitbucketRepo MyGitHubRepo
을 생성합니다. 이 예제에서는 체크 아웃 단계에서 지정되지 않으므로 path
리포지토리의 이름(리포지토리 리소스의 속성에 의해 지정됨name
)이 폴더에 사용됩니다. 리포지토리 폴더 이름 및 위치에 대한 자세한 내용은 다음 체크 아웃 경로 섹션을 참조하세요.
인라인 구문 체크 아웃
리포지토리에 서비스 연결이 필요하지 않은 경우 단계와 함께 인라인으로 checkout
선언할 수 있습니다.
참고 항목
동일한 조직의 Azure Repos Git 리포지토리만 인라인 구문을 사용할 수 있습니다. 다른 조직의 Azure 리포지토리 Git 리포지토리 및 지원되는 다른 리포지토리 유형에는 서비스 연결이 필요하며 리포지토리 리소스로 선언되어야 합니다.
steps:
- checkout: self
- checkout: git://MyProject/MyRepo # Azure Repos Git repository in the same organization
참고 항목
이전 예제 self
에서는 파이프라인과 연결된 리포지토리의 원본을 체크 아웃하기 위해 체크 아웃 리포지토리가 지정되었습니다.
프로젝트와 이름이 같은 기본 Azure Repos Git 리포지토리를 사용하는 경우 형식 - checkout: git://MyProject/MyRepo
을 사용합니다.
체크 아웃 경로
단계에서 지정 checkout
하지 않는 한 path
소스 코드는 기본 디렉터리에 배치됩니다. 이 디렉터리는 단일 리포지토리 또는 여러 리포지토리를 체크 아웃하는지 여부에 따라 다릅니다.
단일 리포지토리: 작업에 단일
checkout
단계가 있거나 동일한checkout: self
체크 아웃 단계가 없는 경우 소스 코드는 하위 폴더(Agent.BuildDirectory)
로 있는 디렉터s
리로 체크 아웃됩니다. 이C:\agent\_work\1
경우(Agent.BuildDirectory)
코드가 .로 체크 아웃됩니다C:\agent\_work\1\s
.여러 리포지토리: 작업에 여러
checkout
단계가 있는 경우 소스 코드가 리포지토리의 하위 폴더s
로 명명된 디렉터리로 체크 아웃됩니다(Agent.BuildDirectory)
. 있는 경우(Agent.BuildDirectory)
리포지토리의 이름이 지정tools
되고code
코드가 체크 아웃C:\agent\_work\1\s\tools
되어 있습니다C:\agent\_work\1\s\code
.C:\agent\_work\1
참고 항목
단계에서 지정되지
path
checkout
않은 경우 리포지토리의 이름은 단계에서 리포지토리를 참조하는 데 사용되는 값이 아니라repository
폴더에checkout
사용됩니다.
단계에 대해 checkout
지정된 path
경우 해당 경로는 상대적으로 (Agent.BuildDirectory)
사용됩니다.
참고 항목
기본 경로를 사용하는 경우 두 번째 리포지토리 단계를 추가하면 첫 번째 리포 checkout
지토리에 대한 코드의 기본 경로가 변경됩니다. 예를 들어 이름이 지정된 tools
리포지토리에 대한 코드는 유일한 리포지토리인 경우 tools
체크 아웃 C:\agent\_work\1\s
되지만 두 번째 리포지토리가 추가 tools
되면 체크 아웃됩니다C:\agent\_work\1\s\tools
. 원본 위치에 있는 소스 코드에 따라 달라지는 단계가 있는 경우 해당 단계를 업데이트해야 합니다.
특정 참조 확인
특정 참조를 지정하지 않으면 기본 분기 체크 아웃됩니다.
인라인 구문을 사용하는 경우 참조를 추가하여 지정합니다 @<ref>
. 예시:
- checkout: git://MyProject/MyRepo@features/tools # checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/heads/features/tools # also checks out the features/tools branch
- checkout: git://MyProject/MyRepo@refs/tags/MyTag # checks out the commit referenced by MyTag.
리포지토리 리소스를 사용하는 경우 속성을 사용하여 ref를 지정합니다 ref
. 다음 예제에서는 지정된 리포지토리의 분기를 확인 features/tools/
합니다.
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: features/tools
steps:
- checkout: MyGitHubRepo
다음 예제에서는 태그를 사용하여 .에서 참조하는 MyTag
커밋을 확인합니다.
resources:
repositories:
- repository: MyGitHubRepo
type: github
endpoint: MyGitHubServiceConnection
name: MyGitHubOrgOrUser/MyGitHubRepo
ref: refs/tags/MyTag
steps:
- checkout: MyGitHubRepo
트리거
업데이트가 리포지토리 또는 리소스로 선언된 self
리포지토리로 푸시될 때 파이프라인을 트리거할 수 있습니다. 예를 들어 다음과 같은 시나리오에서 유용합니다.
- 다른 리포지토리의 도구 또는 라이브러리를 사용합니다. 도구 또는 라이브러리를 업데이트할 때마다 애플리케이션에 대한 테스트를 실행하려고 합니다.
- YAML 파일을 애플리케이션 코드와 별도의 리포지토리에 보관합니다. 업데이트가 애플리케이션 리포지토리에 푸시될 때마다 파이프라인을 트리거하려고 합니다.
Important
리포지토리 리소스 트리거는 동일한 조직의 Azure Repos Git 리포지토리 및 리포지토리 유형이 Azure Repos Git인 경우에만 self
작동합니다. GitHub 또는 Bitbucket 리포지토리 리소스에는 작동하지 않습니다.
batch
는 리포지토리 리소스 트리거에서 지원되지 않습니다.
리포지토리 리소스에서 섹션을 trigger
지정하지 않으면 해당 리포지토리의 변경 내용에 의해 파이프라인이 트리거되지 않습니다. 섹션을 trigger
지정하는 경우 트리거 동작은 자체 리포지토리에 대해 CI 트리거가 작동하는 방식과 유사합니다.
여러 리포지토리 리소스에 대한 섹션을 지정 trigger
하는 경우 해당 리소스를 변경하면 새 실행이 시작됩니다.
파이프라인이 트리거되면 Azure Pipelines는 사용해야 하는 YAML 파일의 버전과 체크 아웃해야 하는 각 리포지토리의 버전을 결정해야 합니다. 리포지토리를 self
변경하면 파이프라인이 트리거되는 경우 파이프라인을 트리거한 커밋을 사용하여 YAML 파일의 버전을 확인합니다. 다른 리포지토리 리소스를 변경하면 파이프라인이 트리거되면 리포지토리 기본 분기 self
최신 버전의 YAML이 사용됩니다.
리포지토리 중 하나에 대한 업데이트가 파이프라인을 트리거하는 경우 트리거 리포지토리에 따라 다음 변수가 설정됩니다.
Build.Repository.ID
Build.Repository.Name
Build.Repository.Provider
Build.Repository.Uri
Build.SourceBranch
Build.SourceBranchName
Build.SourceVersion
Build.SourceVersionMessage
트리거 리포지토리의 경우 파이프라인을 트리거한 커밋은 체크 아웃된 코드의 버전을 결정합니다. 다른 리포지토리의 ref
경우 해당 리포지토리 리소스에 대한 YAML에 정의된 내용은 체크 아웃된 기본 버전을 결정합니다.
리포지토리에 YAML 파일 및 리포지토리가 포함되어 있고 B
추가 소스 코드가 포함된 다음 예제 self
를 A
생각해 보세요.
trigger:
- main
- feature
resources:
repositories:
- repository: A
type: git
name: MyProject/A
ref: main
trigger:
- main
- repository: B
type: git
name: MyProject/B
ref: release
trigger:
- main
- release
steps:
- checkout: self
- checkout: A
- checkout: B
다음 표에서는 위의 YAML 파일을 사용하여 파이프라인에서 각 리포지토리에 대해 체크 아웃된 버전을 보여 있습니다.
변경 내용 | 트리거된 파이프라인 | YAML 버전 | 버전 self |
버전 A |
버전 B |
---|---|---|---|---|---|
self 의 main |
예 | main 파이프라인을 트리거한 커밋 |
main 파이프라인을 트리거한 커밋 |
최신 버전 main |
최신 버전 release |
self 의 feature |
예 | feature 파이프라인을 트리거한 커밋 |
feature 파이프라인을 트리거한 커밋 |
최신 버전 main |
최신 버전 release |
A 의 main |
예 | 최신 버전 main |
최신 버전 main |
main 파이프라인을 트리거한 커밋 |
최신 버전 release |
B 의 main |
예 | 최신 버전 main |
최신 버전 main |
최신 버전 main |
main 파이프라인을 트리거한 커밋 |
B 의 release |
예 | 최신 버전 main |
최신 버전 main |
최신 버전 main |
release 파이프라인을 트리거한 커밋 |
리포지토리에서 끌어오기 요청을 만들거나 업데이트할 때 파이프라인을 트리거할 수도 있습니다. 이렇게 하려면 위의 예제와 같이 YAML 파일에서 리포지토리 리소스를 선언하고 리포지토리에서 분기 정책을 구성합니다(Azure 리포지토리에만 해당).
리포지토리 세부 정보
여러 리포지토리를 체크 아웃하면 리포지토리에 대한 self
일부 세부 정보를 변수로 사용할 수 있습니다.
다중 리포지토리 트리거를 사용하는 경우 일부 변수에는 트리거 리포지토리에 대한 정보가 대신 있습니다.
작업에서 사용하는 모든 리포지토리에 대한 세부 정보는 라는 resources.repositories
템플릿 컨텍스트 개체로 사용할 수 있습니다.
예를 들어 비 리self
포지토리의 참조를 얻으려면 다음과 같은 파이프라인을 작성할 수 있습니다.
resources:
repositories:
- repository: other
type: git
name: MyProject/OtherTools
variables:
tools.ref: $[ resources.repositories['other'].ref ]
steps:
- checkout: self
- checkout: other
- bash: |
echo "Tools version: $TOOLS_REF"
FAQ
- 다른 프로젝트에서 리포지토리를 체크 아웃할 수 없는 이유는 무엇인가요? 작업에 사용됩니다.
- 다른 리포지토리를 처음 체크 아웃하려고 할 때 리소스에 권한을 부여하라는 메시지가 표시되는 이유는 무엇인가요?
다른 프로젝트에서 리포지토리를 체크 아웃할 수 없는 이유는 무엇인가요? 작업에 사용됩니다.
Azure Pipelines는 현재 프로젝트 설정에 대한 제한 작업 권한 부여 범위를 제공합니다. 이 설정을 사용하면 파이프라인이 파이프라인이 포함된 프로젝트 외부의 리소스에 액세스하는 것을 허용하지 않습니다. 이 설정은 조직 또는 프로젝트 수준에서 설정할 수 있습니다. 이 설정을 사용하면 명시적으로 액세스 권한을 부여하지 않는 한 다른 프로젝트의 리포지토리를 체크 아웃할 수 없습니다. 자세한 내용은 작업 권한 부여 범위를 참조하세요.
다른 리포지토리를 처음 체크 아웃하려고 할 때 리소스에 권한을 부여하라는 메시지가 표시되는 이유는 무엇인가요?
파이프라인이 포함된 리포지토리 이외의 Azure Repos Git 리포지토리를 체크 아웃할 때 파이프라인이 처음으로 실행되기 전에 해당 리소스에 대한 액세스 권한을 부여하라는 메시지가 표시될 수 있습니다. 이러한 프롬프트는 파이프라인 실행 요약 페이지에 표시됩니다.
리소스 보기 또는 권한 부여를 선택하고 프롬프트에 따라 리소스에 권한을 부여합니다.
자세한 내용은 YAML 파이프라인 권한 부여 문제 해결을 참조하세요.