다음을 통해 공유


파이프라인 스크립트에서 Git 명령 실행

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

Git 명령은 Microsoft 호스팅자체 호스팅 에이전트의 빌드 워크플로에 사용할 수 있습니다. 예를 들어 기능 분기에서 CI(연속 통합) 빌드가 완료된 후 분기를 기본으로 병합할 수 있습니다. 이 문서에서는 Azure Pipelines 빌드 스크립트에서 Git 명령을 실행하는 방법을 설명합니다.

스크립트를 사용하여 Git 명령 실행

GitHub에서 Azure DevOps 계정의 기본 ID를 사용하는지 확인합니다. 필요한 경우 체크 아웃 후 GitHub 사용자를 첫 번째 단계로 설정합니다.

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

빌드 서비스에 사용 권한 부여

프로젝트 빌드 서비스에는 원본 리포지토리에 쓸 수 있는 권한이 있어야 합니다. 필요한 사용 권한을 다음과 같이 설정합니다.

  1. 프로젝트 설정에서, Repos 아래의 리포지토리를 선택합니다.

  2. 모든 리포지토리 페이지에서 보안을 선택하여 프로젝트의 모든 리포지토리에 대한 권한을 설정합니다. 또는 Git 명령을 실행할 리포지토리를 선택한 다음 해당 리포지토리 페이지에서 보안을 선택합니다.

    리포지토리의 보안을 선택하는 화면 캡처입니다.

  3. 사용자 권한 페이지에서 빌드 서비스 ID를 선택합니다. 사용자 아래에서 프로젝트 이름 빌드 서비스(조직)를 선택하고, 프로젝트 컬렉션 빌드 서비스 계정을 선택하지 않도록 합니다. 기본적으로 이 ID는 리포지토리에서 읽을 수 있지만 변경 내용을 푸시할 수는 없습니다.

  4. 목록을 드롭다운하여 실행하려는 Git 명령에 필요한 각 권한 옆의 허용을 선택합니다. 일반적으로 분기 만들기, 참가, 읽기, 태그 만들기입니다.

    리포지토리에 대한 ID 권한 부여를 보여 주는 스크린샷.

스크립트가 시스템 토큰에 액세스하도록 허용

스크립트가 GitHub OAuth 토큰에 액세스할 수 있도록 허용하려면 다음을 수행합니다.

YAML 파이프라인에 checkout 단계를 추가하고 persistCredentialstrue로 설정합니다.

steps:
- checkout: self
  persistCredentials: true

checkout 단계에 대한 자세한 정보는 steps.checkout 정의를 참조하세요.

로컬 리포지토리 정리

빌드 파이프라인은 로컬 분기 삭제 또는 git config 로컬 변경 취소와 같은 로컬 리포지토리의 특정 변경 내용을 자동으로 정리하지 않습니다. 자체 호스팅 에이전트를 사용하는 데 문제가 발생하면 빌드를 실행하기 전에 리포지토리를 정리할 수 있습니다.

일반적으로 자체 호스팅 에이전트의 성능을 향상시키려면 리포지토리를 정리하지 마세요. 정리는 매번 새 에이전트를 사용하기 때문에 Microsoft 호스팅 에이전트에 효과적이지 않습니다. 자세한 내용은 에이전트의 로컬 리포지토리 정리를 참조하세요.

빌드를 실행하기 전에 리포지토리를 정리하려면 다음을 수행합니다.

clean 단계에서 truecheckout로 설정합니다. 이 옵션은 git clean -ffdxgit reset --hard HEAD을 순서대로 실행한 후 가져오기를 수행합니다.

steps:
- checkout: self
  clean: true

파이프라인 편집기에서 변수 를 선택하고, 변수를 Build.Clean 만들거나 수정하고, 해당 값을 .로 source설정합니다.

Git 명령 예제

다음 예제에서는 명령줄 태스크 및 Batch 스크립트 태스크에서 Git 명령을 실행합니다.

리포지토리의 파일 나열

Git 리포지토리의 파일을 나열하려면 다음과 같이 YAML 파이프라인에서 명령줄 작업을 사용합니다.

- task: CmdLine@2
  inputs:
    script: 'git ls-files'

기능 브랜치를 메인에 병합

다음 클래식 파이프라인 예제에서는 빌드가 성공하면 CI 빌드를 main에 병합합니다.

  1. 다음 내용을 사용하여 리포지토리의 루트에 merge.bat 파일을 만듭니다.

    @echo off
    ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
    IF %BUILD_SOURCEBRANCH% == refs/heads/main (
       ECHO Building main branch so no merge is needed.
       EXIT
    )
    SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
    ECHO GIT CHECKOUT MAIN
    git checkout main
    ECHO GIT STATUS
    git status
    ECHO GIT MERGE
    git merge %sourceBranch% -m "Merge to main"
    ECHO GIT STATUS
    git status
    ECHO GIT PUSH
    git push origin
    ECHO GIT STATUS
    git status
    
  2. 클래식 파이프라인의 트리거 탭에서 연속 통합을 사용하도록 설정하려면 확인란을 선택합니다.

  3. 분기 필터 및경로 필터 아래에서 빌드에서 포함 또는 제외할 분기 및 경로를 선택합니다.

  4. Batch 스크립트를 파이프라인의 마지막 작업으로 추가합니다.

  5. 작업 구성의 경로 아래에서 merge.bat 파일의 위치와 이름을 입력합니다.

자주 묻는 질문(FAQ)

원격 리포지토리가 GitHub 또는 Bitbucket Cloud와 같은 다른 Git 서비스에 있는 경우 Git 명령을 실행할 수 있나요?

예, 원격 리포지토리가 GitHub 또는 Bitbucket Cloud와 같은 다른 Git 서비스에 있는 경우 Git 명령을 실행할 수 있습니다.

Git 명령을 실행하는 데 사용할 수 있는 작업은 무엇입니까?

다음 Azure Pipelines 작업을 사용하여 Git 명령을 실행할 수 있습니다.

스크립트를 푸시할 때 CI 빌드를 트리거하지 않도록 하려면 어떻게 해야 하나요?

스크립트가 푸시할 때 CI 빌드가 트리거되는 것을 방지하려면 커밋 메시지 또는 설명에 추가 [skip ci] 합니다. 다음은 그 예입니다.

  • git commit -m "This is a commit message [skip ci]"
  • git merge origin/features/hello-world -m "Merge to main [skip ci]"

Azure Repos Git, Bitbucket Cloud, GitHub 또는 GitHub Enterprise Server에 대한 커밋에 다음 변형을 사용할 수도 있습니다.

  • [skip ci] 또는 [ci skip]
  • skip-checks: true 또는 skip-checks:true
  • [skip azurepipelines] 또는 [azurepipelines skip]
  • [skip azpipelines] 또는 [azpipelines skip]
  • [skip azp] 또는 [azp skip]
  • ***NO_CI***

파이프라인을 실행하는 데 에이전트가 필요한가요?

예, 빌드 또는 릴리스 파이프라인을 실행하려면 하나 이상의 에이전트 가 필요합니다.

문제를 해결하려면 어떻게 해야 하나요?

파이프라인 실행 문제 해결을 참조하세요.

기본 에이전트 풀을 선택할 수 없거나 파이프라인 실행을 큐에 대기할 수 없는 문제를 어떻게 해결할 수 있나요?

에이전트 풀 만들기 및 관리를 참조하세요.

"오류: 로컬 발급자 인증서를 가져올 수 없음"으로 NuGet 푸시 작업이 실패하는 문제를 해결하려면 어떻게 해야 하나요?

신뢰할 수 있는 루트 인증서를 추가하여 이 문제를 해결할 수 있습니다. 빌드 에이전트에 NODE_EXTRA_CA_CERTS=file 환경 변수를 추가하거나 파이프라인에 작업 변수를 NODE.EXTRA.CA.CERTS=file 추가합니다.

이 변수에 대한 자세한 내용은 Node.js 설명서의 NODE_EXTRA_CA_CERTS=file 을 참조하세요. 파이프라인에서 변수를 설정하는 방법에 대한 지침은 파이프라인에서 변수 설정을 참조하세요.

온-프레미스 Azure DevOps Server에 이러한 기능 중 일부가 표시되지 않는 이유는 무엇인가요?

이러한 기능 중 일부는 Azure DevOps Services 에서만 사용할 수 있으며 온-프레미스 Azure DevOps Server에는 사용할 수 없습니다. 일부 기능은 최신 버전의 Azure DevOps Server에서만 사용할 수 있습니다.