파이프라인 실행

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

이 문서에서는 Azure Pipelines 파이프라인 실행의 일련의 활동에 대해 설명합니다. 빌드는 파이프라인을 한 번 실행한 것을 나타냅니다. CI(연속 통합) 및 CD(지속적인 업데이트) 파이프라인은 모두 실행으로 구성됩니다. 실행하는 동안 Azure Pipelines는 파이프라인을 처리하고 에이전트는 하나 이상의 작업, 단계 및 작업을 처리합니다.

파이프라인 개요를 보여 주는 다이어그램

각 실행에 대해 Azure Pipelines:

  • 파이프라인을 처리합니다.
  • 하나 이상의 에이전트에게 작업을 실행하도록 요청합니다.
  • 에이전트에게 작업을 제공하고 결과를 수집합니다.

각 작업에 대해 에이전트:

  • 작업을 준비합니다.
  • 작업의 각 단계를 실행합니다.
  • 결과를 보고합니다.

작업이 성공하거나, 실패하거나, 취소되거나, 완료되지 않을 수 있습니다. 이러한 결과를 이해하면 문제를 해결하는 데 도움이 될 수 있습니다.

다음 섹션에서는 파이프라인 실행 프로세스를 자세히 설명합니다.

파이프라인 처리

YAML 템플릿 확장을 보여 주는 다이어그램

실행에 대한 파이프라인을 처리하려면 먼저 Azure Pipelines를 실행합니다.

  1. 템플릿을 확장하고 템플릿 식을 평가합니다.
  2. 단계 수준에서 종속성을 평가하여 실행할 첫 번째 단계를 선택합니다.

실행할 각 단계에 대해 Azure Pipelines:

  1. 권한 부여가 실행되도록 모든 작업 리소스를 수집하고 유효성을 검사합니다.
  2. 작업 수준에서 종속성을 평가하여 실행할 첫 번째 작업을 선택합니다.

Azure Pipelines는 실행하도록 선택한 각 작업에 대해 다음 작업을 수행합니다.

  1. YAML strategy: matrix 또는 strategy: parallel 다중 구성을 여러 런타임 작업으로 확장합니다 .
  2. 조건을 평가하여 작업을 실행할 수 있는지 여부를 결정합니다.
  3. 적격한 각 작업에 대한 에이전트를 요청합니다.

런타임 작업이 완료되면 Azure Pipelines는 실행할 수 있는 새 작업이 있는지 확인합니다. 마찬가지로 단계가 완료되면 Azure Pipelines는 더 많은 단계가 있는지 확인합니다.

변수

처리 순서를 이해하면 템플릿 매개 변수에서 특정 변수를 사용할 수 없는 이유가 명확해집니다. 첫 번째 템플릿 확장 단계는 YAML 파일의 텍스트에서만 작동합니다. 런타임 변수는 해당 단계에서 아직 존재하지 않습니다. 해당 단계 후에는 템플릿 매개 변수가 이미 확인됩니다.

또한 파이프라인이 스테이지 실행을 시작하기 전에 리소스에 권한을 부여하기 때문에 변수를 사용하여 서비스 연결 또는 환경 이름을 확인할 수 없습니다. 스테이지 및 작업 수준 변수는 아직 사용할 수 없습니다. 변수 그룹은 권한 부여가 적용되는 리소스이므로 리소스 권한 부여를 확인할 때 해당 데이터를 사용할 수 없습니다.

파이프라인 리소스 정의에 명시적으로 포함된 파이프라인 수준 변수를 사용할 수 있습니다. 자세한 내용은 파이프라인 리소스 메타데이터를 미리 정의된 변수로 참조 하세요.

에이전트

Azure Pipelines가 작업을 실행해야 하는 경우 풀에서 에이전트요청합니다. 이 프로세스는 Microsoft 호스팅 및 자체 호스팅 에이전트 풀에 대해 다르게 작동합니다.

참고 항목

서버 작업은 Azure Pipelines 서버 자체에서 실행되므로 풀을 사용하지 않습니다.

풀 선택을 보여 주는 다이어그램

병렬 작업

먼저 Azure Pipelines는 조직의 병렬 작업을 확인합니다. 이 서비스는 모든 에이전트에서 실행 중인 모든 작업을 추가하고 이를 부여 또는 구매한 병렬 작업 수와 비교합니다.

사용 가능한 병렬 슬롯이 없으면 작업이 슬롯에서 해제할 때까지 기다려야 합니다. 병렬 슬롯을 사용할 수 있게 되면 작업은 적절한 에이전트 유형으로 라우팅됩니다.

Microsoft 호스팅 에이전트

개념적으로 Microsoft 호스팅 풀은 지리 및 운영 체제 유형으로 분할된 물리적으로 많은 다른 풀이지만 하나의 전역 컴퓨터 풀입니다. 요청된 YAML vmImage 또는 클래식 편집기 풀 이름에 따라 Azure Pipelines는 에이전트를 선택합니다.

Microsoft 풀의 모든 에이전트는 파이프라인을 실행한 적이 없는 새 VM(가상 머신)입니다. 작업이 완료되면 에이전트 VM이 삭제됩니다.

자체 호스팅 에이전트

병렬 슬롯을 사용할 수 있게 되면 Azure Pipelines는 호환되는 에이전트에 대한 자체 호스팅 풀을 검사합니다. 자체 호스팅 에이전트는 특정 소프트웨어가 설치되거나 설정이 구성되었음을 나타내는 기능을 제공합니다. 파이프라인에는 작업을 실행하는 데 필요한 기능인 요구 사항이 있습니다.

Azure Pipelines에서 파이프라인의 요구 사항과 일치하는 기능이 있는 무료 에이전트를 찾을 수 없는 경우 작업은 계속 대기합니다. 풀에 요구 사항과 일치하는 기능이 있는 에이전트가 없으면 작업이 실패합니다.

자체 호스팅 에이전트는 일반적으로 실행에서 실행으로 재사용됩니다. 자체 호스팅 에이전트의 경우 파이프라인 작업은 캐시를 예열하거나 대부분의 커밋을 로컬 리포지토리에서 이미 사용할 수 있는 것과 같은 부작용이 있을 수 있습니다.

작업 준비

에이전트가 작업을 수락하면 다음 준비 작업을 수행합니다.

  1. 작업을 실행하는 데 필요한 모든 작업을 다운로드하고 나중에 사용할 수 있도록 캐시합니다.
  2. 실행에서 사용되는 소스 코드, 아티팩트 및 출력을 저장할 작업 공간을 디스크에 만듭니다.

단계 실행

에이전트는 순서대로 단계를 순차적으로 실행합니다. 단계를 시작하려면 이전 단계를 모두 완료하거나 건너뛰어야 합니다.

각 작업 실행을 보여 주는 다이어그램

단계는 Node.js, PowerShell 또는 기타 스크립트일 수 있는 태스크에 의해 구현됩니다. 작업 시스템은 입력 및 출력을 지원 스크립트로 라우팅합니다. 또한 태스크는 시스템 경로 변경 및 새 파이프라인 변수 만들기와 같은 일반적인 서비스도 제공합니다.

각 단계는 자체 프로세스에서 실행되어 이전 단계와 환경을 격리합니다. 이 단계별 프로세스 모델 때문에 단계 간에 환경 변수가 유지되지 않습니다. 그러나 작업 및 스크립트는 로깅 명령이라는 메커니즘을 사용하여 에이전트와 다시 통신할 수 있습니다. 태스크 또는 스크립트가 로깅 명령을 표준 출력에 쓰면 에이전트는 명령이 요청하는 모든 작업을 수행합니다.

로깅 명령을 사용하여 새 파이프라인 변수를 만들 수 있습니다. 파이프라인 변수는 다음 단계에서 환경 변수로 자동으로 변환됩니다. 스크립트는 다음과 같은 값 myValue 으로 새 변수 myVar 를 설정할 수 있습니다.

echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"

결과 보고 및 수집

각 단계에서 경고, 오류 및 실패를 보고할 수 있습니다. 이 단계에서는 태스크를 성공한 것으로 표시하여 파이프라인 요약 페이지에서 오류 및 경고를 보고하거나 작업을 실패한 것으로 표시하여 오류를 보고합니다. 명령을 사용하여 ##vso 오류를 명시적으로 보고하거나 스크립트를 0이 아닌 종료 코드로 종료하면 단계가 실패합니다.

단계가 실행되면 에이전트는 지속적으로 출력 줄을 Azure Pipelines로 전송하므로 콘솔의 라이브 피드를 볼 수 있습니다. 각 단계가 끝나면 단계의 전체 출력이 로그 파일로 업로드됩니다. 파이프라인이 완료되면 로그를 다운로드할 수 있습니다.

로그 및 결과가 에이전트에서 서비스로 흐르는 방식을 보여 주는 다이어그램

에이전트는 파이프라인이 완료된 후에도 사용할 수 있는 아티팩트 및 테스트 결과를 업로드할 수도 있습니다.

상태 및 조건

에이전트는 각 단계의 성공 또는 실패를 추적합니다. 문제가 발생하거나 실패하는 단계가 성공하면 작업의 상태가 업데이트됩니다. 이 작업은 항상 각 단계의 최악의 결과를 반영합니다. 단계가 실패하면 작업도 실패합니다.

에이전트가 단계를 실행하기 전에 해당 단계의 조건을 확인하여 단계가 실행되어야 하는지 여부를 확인합니다. 기본적으로 단계는 작업의 상태가 성공하거나 문제가 발생한 경우에만 실행되지만 다른 조건을 설정할 수 있습니다.

많은 작업에는 다른 어떤 일이 일어나더라도 실행해야 하는 정리 단계가 있으므로 조건을 always()지정할 수 있습니다. 정리 또는 다른 단계는 취소 시만 실행되도록 설정할 수도 있습니다.

성공적인 정리 단계에서는 작업이 실패하지 않도록 저장할 수 없습니다. 실패를 입력한 후에는 작업이 성공으로 돌아갈 수 없습니다.

시간 제한 및 연결 끊기

각 작업에는 시간 제한이 있습니다. 지정된 시간에 작업이 완료되지 않으면 서버에서 작업을 취소합니다. 서버는 에이전트에 중지 신호를 보내려고 시도하고 작업을 취소된 것으로 표시합니다. 에이전트 쪽에서 취소는 나머지 모든 단계를 취소하고 나머지 결과를 업로드하는 것을 의미합니다.

작업에는 취소 작업을 완료할 취소 시간 제한이라는 유예 기간이 있습니다. 취소 시에도 실행할 단계를 표시할 수 있습니다. 작업 시간 제한과 취소 시간 제한이 발생한 후 에이전트가 해당 작업이 중지되었다고 보고하지 않으면 서버는 작업을 실패로 표시합니다.

에이전트의 호스트 컴퓨터가 전원을 끊거나 꺼져 있거나 네트워크 오류가 발생하는 경우 에이전트 컴퓨터는 서버에 대한 응답을 중지할 수 있습니다. 이러한 조건을 감지하기 위해 에이전트는 분당 한 번씩 하트비트 메시지를 보내 서버가 여전히 작동하고 있다는 것을 알 수 있습니다.

서버가 5분 연속 하트비트를 받지 못하면 에이전트가 돌아오지 않는다고 가정합니다. 작업이 실패로 표시되어 사용자에게 파이프라인을 다시 시도해야 한다는 것을 알 수 있습니다.

Azure DevOps CLI를 통해 실행 관리

Azure DevOps CLI에서 az pipelines 실행을 사용하여 파이프라인 실행을 관리할 수 있습니다. 시작하려면 Azure DevOps CLI 시작을 참조하세요. 전체 명령 참조는 Azure DevOps CLI 명령 참조를 참조하세요.

다음 예제에서는 Azure DevOps CLI를 사용하여 프로젝트에서 파이프라인 실행을 나열하고, 특정 실행에 대한 세부 정보를 보고, 파이프라인 실행에 대한 태그를 관리하는 방법을 보여 줍니다.

필수 조건

파이프라인 실행 나열

az pipelines runs list 명령을 사용하여 프로젝트에서 파이프라인 실행을 나열 합니다.

다음 명령은 완료된 상태와 성공 결과가 있는 처음 세 개의 파이프라인 실행을 나열하고 결과를 테이블 형식으로 반환합니다.

az pipelines runs list --status completed --result succeeded --top 3 --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  ------
125       20200124.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 18:56:10.067588  manual
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual
122       20200123.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:48:05.574742  manual

파이프라인 실행 세부 정보 표시

az pipelines runs show 명령을 사용하여 프로젝트에서 파이프라인 실행에 대한 세부 정보를 표시 합니다.

다음 명령은 ID 123을 사용하여 파이프라인 실행에 대한 세부 정보를 표시하고, 결과를 테이블 형식으로 반환하고, 웹 브라우저를 Azure Pipelines 빌드 결과 페이지로 엽니다.

az pipelines runs show --id 122 --open --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  --------
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual

파이프라인 실행에 태그 추가

az pipelines runs tag add 명령을 사용하여 프로젝트에서 파이프라인 실행에 태그를 추가 합니다.

다음 명령은 ID 123을 사용하여 파이프라인 실행에 YAML 태그를 추가하고 결과를 JSON 형식으로 반환합니다.

az pipelines runs tag add --run-id 123 --tags YAML --output json

[
  "YAML"
]

파이프라인 실행 태그 나열

az pipelines runs tag list 명령을 사용하여 프로젝트에서 파이프라인 실행에 대한 태그를 나열 합니다. 다음 명령은 ID 가 123 인 파이프라인 실행에 대한 태그를 나열하고 결과를 테이블 형식으로 반환합니다.

az pipelines runs tag list --run-id 123 --output table

Tags
------
YAML

파이프라인 실행에서 태그 삭제

az pipelines runs tag delete 명령을 사용하여 프로젝트의 파이프라인 실행에서 태그를 삭제 합니다. 다음 명령은 ID가 123인 파이프라인 실행에서 YAML 태그를 삭제합니다.

az pipelines runs tag delete --run-id 123 --tag YAML