다음을 통해 공유


파이프라인에서 여러 리포지토리 체크아웃

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

파이프라인은 원본, 도구, 스크립트 또는 코드를 빌드하는 데 필요한 기타 항목이 포함된 여러 리포지토리에 의존하는 경우가 많습니다. 파이프라인에서 여러 checkout 단계를 사용하여 YAML 파이프라인을 저장하는 데 사용하는 리포지토리 외에도 다른 리포지토리를 가져오고 체크 아웃할 수 있습니다.

여러 리포지토리 지정

리포지토리를 리포지토리 리소스로 지정하거나 단계와 인라인으로 checkout 지정할 수 있습니다.

지원되는 리포지토리 유형은 다음과 같습니다.


  • 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

리포지토리 유형에 서비스 연결이 필요하지 않은 경우에도 리포지토리 리소스를 사용할 수 있습니다( 예를 들어 다른 리포지토리의 템플릿에 대해 이미 정의된 리포지토리 리소스가 있는 경우).

다음 예제에서는 세 개의 리포지토리가 리포지토리 리소스로 선언되어 있습니다. 다른 조직GitHubBitbucket 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 이름이 지정 CurrentReposcript 되면 명령은 다음 출력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 추가 소스 코드가 포함된 다음 예제 selfA 생각해 보세요.

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
selfmain main 파이프라인을 트리거한 커밋 main 파이프라인을 트리거한 커밋 최신 버전 main 최신 버전 release
selffeature feature 파이프라인을 트리거한 커밋 feature 파이프라인을 트리거한 커밋 최신 버전 main 최신 버전 release
Amain 최신 버전 main 최신 버전 main main 파이프라인을 트리거한 커밋 최신 버전 release
Bmain 최신 버전 main 최신 버전 main 최신 버전 main main 파이프라인을 트리거한 커밋
Brelease 최신 버전 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 파이프라인 권한 부여 문제 해결을 참조하세요.