파이프라인 실행 순서

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

실행은 파이프라인의 한 실행을 나타냅니다. 실행하는 동안 파이프라인이 처리되고 에이전트가 하나 이상의 작업을 처리합니다. 파이프라인 실행에는 작업, 단계 및 태스크가 포함됩니다. CI(연속 통합) 및 CD(지속적인 업데이트) 파이프라인을 모두 실행합니다.

파이프라인 개요

파이프라인을 실행할 때 많은 작업이 커버 아래에 발생합니다. 종종 그들에 대해 알 필요가 없지만, 때로는 큰 그림을 갖는 것이 유용합니다. 높은 수준에서 Azure Pipelines는 다음을 수행합니다.

에이전트 쪽에서 각 작업에 대해 에이전트는 다음을 수행합니다.

작업이 성공하거나 실패하거나 취소될 수 있습니다. 작업이 완료되지 않을 수도 있는 상황도 있습니다. 이런 일이 어떻게 발생하는지 이해하면 문제를 해결하는 데 도움이 될 수 있습니다.

각 작업을 하나씩 세분화해 보겠습니다.

파이프라인 처리

YAML 템플릿 확장

파이프라인을 실행으로 전환하기 위해 Azure Pipelines는 다음 순서로 여러 단계를 수행합니다.

  1. 먼저 템플릿을 확장하고 템플릿 식을 평가합니다.
  2. 다음으로, 단계 수준에서 종속성을 평가하여 실행할 첫 번째 단계를 선택합니다.
  3. 실행하도록 선택한 각 단계에 대해 다음 두 가지가 발생합니다.
  4. 실행하도록 선택한 각 작업에 대해 다중 구성 (strategy: matrix 또는 strategy: parallel YAML에서)을 여러 런타임 작업으로 확장합니다.
  5. 각 런타임 작업에 대해 조건을 평가하여 해당 작업을 실행할 수 있는지 여부를 결정합니다.
  6. 적합한 각 런타임 작업에 대한 에이전트를 요청합니다.

런타임 작업이 완료되면 Azure Pipelines에서 실행할 수 있는 새 작업이 있는지 확인합니다. 그렇다면 4-6단계는 새 작업과 함께 반복됩니다. 마찬가지로 스테이지가 완료되면 모든 새 스테이지에 대해 2-6단계가 반복됩니다.

이 순서는 일반적인 질문에 대답하는 데 도움이 됩니다. 템플릿 매개 변수에서 특정 변수를 사용할 수 없는 이유는 무엇인가요? 1단계, 템플릿 확장은 YAML 문서의 텍스트에서만 작동합니다. 해당 단계에서는 런타임 변수가 존재하지 않습니다. 1단계 후에 템플릿 매개 변수가 확인되어 더 이상 존재하지 않습니다.

또한 또 다른 일반적인 문제에 대한 답변입니다. 변수를 사용하여 서비스 연결/환경 이름을 resolve 수 없는 이유는 무엇인가요? 리소스는 스테이지 실행을 시작하기 전에 승인되므로 스테이지 및 작업 수준 변수를 사용할 수 없습니다. 파이프라인 수준 변수는 사용할 수 있지만 파이프라인에 명시적으로 포함된 변수만 사용할 수 있습니다. 변수 그룹 자체가 권한 부여 대상 리소스이므로 리소스 권한 부여를 확인할 때도 해당 데이터를 사용할 수 없습니다.

에이전트 요청

Azure Pipelines는 작업을 실행해야 할 때마다 에이전트를 요청합니다. (서버 작업은 Azure Pipelines 서버 자체에서 실행되므로 예외입니다.) Microsoft 호스팅자체 호스팅 에이전트 풀은 약간 다르게 작동합니다.

Microsoft 호스팅 에이전트 풀 요청

먼저 서비스는 organization 병렬 작업을 확인합니다. 모든 Microsoft 호스팅 에이전트에서 실행 중인 모든 작업을 추가하고 구매한 병렬 작업 수와 비교합니다. 사용 가능한 병렬 슬롯이 없으면 작업이 슬롯에서 해제되기를 기다려야 합니다.

병렬 슬롯을 사용할 수 있게 되면 작업이 요청된 에이전트 유형으로 라우팅됩니다. 개념적으로 Microsoft 호스팅 풀은 하나의 거대한 글로벌 컴퓨터 풀입니다. (실제로는 지리 및 운영 체제 유형별로 분할된 다양한 물리적 풀입니다.) 요청된 vmImage (YAML) 또는 풀 이름(클래식 편집기)에 따라 에이전트가 선택됩니다.

풀 선택

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

자체 호스팅 에이전트 풀 요청

Microsoft 호스팅 풀과 마찬가지로 서비스는 먼저 organization 병렬 작업을 확인합니다. 모든 자체 호스팅 에이전트에서 실행 중인 모든 작업을 추가하고 구매한 병렬 작업 수와 비교합니다. 사용 가능한 병렬 슬롯이 없으면 작업이 슬롯에서 해제되기를 기다려야 합니다.

병렬 슬롯을 사용할 수 있게 되면 자체 호스팅 풀이 호환되는 에이전트에 대해 검사됩니다. 자체 호스팅 에이전트는 특정 소프트웨어가 설치되었거나 설정이 구성되었음을 나타내는 문자열인 기능을 제공합니다. 파이프라인에는 작업을 실행하는 데 필요한 기능인 요구 사항이 있습니다. 파이프라인의 요구 사항과 일치하는 무료 에이전트를 찾을 수 없는 경우 작업은 계속 대기합니다. 풀에 요구 사항과 일치하는 기능이 있는 에이전트가 없으면 작업이 실패합니다.

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

작업 실행 준비

에이전트가 작업을 수락하면 수행할 몇 가지 준비 작업이 있습니다. 에이전트는 작업을 실행하는 데 필요한 모든 작업을 다운로드(및 다음에 캐시)합니다. 실행에서 사용되는 소스 코드, 아티팩트 및 출력을 저장할 작업 공간을 디스크에 만듭니다. 그런 다음 , 단계를 실행하기 시작합니다.

각 단계 실행

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

각 작업 실행

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

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

새 파이프라인 변수를 만드는 에이전트 명령이 있습니다. 파이프라인 변수는 다음 단계에서 환경 변수로 자동으로 변환됩니다. 값myValue이 인 새 변수 myVar 를 설정하려면 스크립트에서 다음을 수행할 수 있습니다.

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

결과 보고 및 수집

각 단계에서는 경고, 오류 및 실패를 보고할 수 있습니다. 오류 및 경고는 파이프라인 요약 페이지에 보고되어 작업을 "문제 발생"으로 표시합니다. 오류는 요약 페이지에도 보고되지만 작업을 "실패"로 표시합니다. 단계가 오류를 명시적으로 보고하거나(명령을 사용하여) 스크립트를 ##vso 0이 아닌 종료 코드로 종료하는 경우 실패입니다.

에이전트에서 서비스로 로그 및 결과 흐름

단계가 실행되면 에이전트는 지속적으로 출력 줄을 서비스로 보냅니다. 따라서 콘솔의 라이브 피드를 볼 수 있습니다. 각 단계가 끝나면 단계의 전체 출력도 로그 파일로 업로드됩니다. 파이프라인이 완료되면 로그를 다운로드할 수 있습니다. 에이전트가 업로드할 수 있는 다른 항목에는 아티팩트테스트 결과가 포함됩니다. 파이프라인이 완료된 후에도 사용할 수 있습니다.

상태 및 조건

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

단계를 실행하기 전에 에이전트는 해당 단계의 조건을 검사 실행 여부를 결정합니다. 기본적으로 단계는 작업의 상태 성공하거나 문제가 발생한 경우에만 실행됩니다. 많은 작업에는 다른 일이 발생하더라도 실행해야 하는 정리 단계가 있으므로 "always()" 조건을 지정할 수 있습니다. 정리 단계는 취소 시만 실행되도록 설정할 수도 있습니다. 성공한 정리 단계에서는 작업이 실패하지 않도록 저장할 수 없습니다. 작업은 실패를 입력한 후 성공으로 돌아갈 수 없습니다.

시간 제한 및 연결 끊기

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

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

Azure Pipelines는 때때로 에이전트 머신에 작업을 배포하기 때문에 에이전트가 서버에 대한 응답을 중지할 수 있습니다. 에이전트의 호스트 컴퓨터가 사라지거나(전원 손실, VM이 꺼져 있음) 네트워크 오류가 발생할 수 있습니다. 이러한 조건을 감지하기 위해 에이전트는 분당 한 번씩 하트비트 메시지를 보내 서버가 여전히 작동하고 있다는 것을 알 수 있습니다. 서버가 5분 연속 하트비트를 받지 못하면 에이전트가 돌아오지 않는다고 가정합니다. 작업이 실패로 표시되어 사용자에게 파이프라인을 다시 시도해야 한다는 것을 알 수 있습니다.

CLI를 통해 실행 관리

Azure DevOps CLI를 사용하여 프로젝트의 파이프라인 실행을 나열하고 특정 실행에 대한 세부 정보를 볼 수 있습니다. 파이프라인 실행에서 태그를 추가하고 삭제할 수도 있습니다.

필수 구성 요소

  • Azure DevOps CLI 시작에 설명된 대로 Azure DevOps CLI 확장을 설치해야 합니다.
  • 를 사용하여 az loginAzure DevOps에 로그인합니다.
  • 이 문서의 예제에서는 를 사용하여 az devops configure --defaults organization=YourOrganizationURL기본 organization 설정합니다.

파이프라인 실행 나열

az pipelines runs list 명령을 사용하여 프로젝트에서 파이프라인 실행을 나열합니다. 시작하려면 Azure DevOps CLI 시작을 참조하세요.

az pipelines runs list [--branch]
                       [--org]
                       [--pipeline-ids]
                       [--project]
                       [--query-order {FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc, StartTimeDesc}]
                       [--reason {all, batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated, validateShelveset}]
                       [--requested-for]
                       [--result {canceled, failed, none, partiallySucceeded, succeeded}]
                       [--status {all, cancelling, completed, inProgress, none, notStarted, postponed}]
                       [--tags]
                       [--top]

선택적 매개 변수

  • branch: 이 분기에 대한 빌드별로 필터링합니다.
  • org: Azure DevOps organization URL. 를 사용하여 az devops configure -d organization=ORG_URL기본 organization 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다. 예: --org https://dev.azure.com/MyOrganizationName/.
  • pipeline-ids: 빌드를 나열할 정의의 공간으로 구분된 ID입니다.
  • project: 프로젝트의 이름 또는 ID입니다. 를 사용하여 az devops configure -d project=NAME_OR_ID기본 프로젝트를 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다.
  • query-order: 파이프라인 실행이 나열되는 순서를 정의합니다. 허용되는 값은 FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAscStartTimeDesc입니다.
  • reason: 지정된 이유로만 목록 빌드가 작성됩니다. 허용되는 값은 batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreatedvalidateShelveset입니다.
  • requested-for: 지정된 사용자 또는 그룹에 대해 요청된 빌드로 제한합니다.
  • result: 지정된 결과를 사용하여 빌드로 제한합니다. 허용되는 값은 취소, 실패, 없음, 부분적으로Succeeded성공입니다.
  • 상태: 지정된 상태 사용하여 빌드로 제한합니다. 허용되는 값은 모두취소, 완료됨, inProgress, none, notStartedpostponed입니다.
  • tags: 지정된 각 태그를 사용하여 빌드로 제한합니다. 공백을 구분합니다.
  • top: 나열할 빌드의 최대 수입니다.

예제

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

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 명령을 사용하여 프로젝트에서 파이프라인 실행에 대한 세부 정보를 표시합니다. 시작하려면 Azure DevOps CLI 시작을 참조하세요.

az pipelines runs show --id
                       [--open]
                       [--org]
                       [--project]

매개 변수

  • id: 필수입니다. 파이프라인 실행의 ID입니다.
  • open: 선택 사항입니다. 웹 브라우저에서 빌드 결과 페이지를 엽니다.
  • org: Azure DevOps organization URL. 를 사용하여 az devops configure -d organization=ORG_URL기본 organization 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다. 예: --org https://dev.azure.com/MyOrganizationName/.
  • project: 프로젝트의 이름 또는 ID입니다. 를 사용하여 az devops configure -d project=NAME_OR_ID기본 프로젝트를 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다.

예제

다음 명령은 ID 가 123 인 파이프라인 실행에 대한 세부 정보를 보여주고 결과를 테이블 형식으로 반환합니다. 또한 빌드 결과 페이지에 웹 브라우저가 열립니다.

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 명령을 사용하여 프로젝트에서 실행되는 파이프라인에 태그를 추가합니다. 시작하려면 Azure DevOps CLI 시작을 참조하세요.

az pipelines runs tag add --run-id
                          --tags
                          [--org]
                          [--project]

매개 변수

  • run-id: 필수입니다. 파이프라인 실행의 ID입니다.
  • tags: 필수입니다. 파이프라인 실행에 추가할 태그(쉼표로 구분된 값).
  • org: Azure DevOps organization URL. 를 사용하여 az devops configure -d organization=ORG_URL기본 organization 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다. 예: --org https://dev.azure.com/MyOrganizationName/.
  • project: 프로젝트의 이름 또는 ID입니다. 를 사용하여 az devops configure -d project=NAME_OR_ID기본 프로젝트를 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다.

예제

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

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

[
  "YAML"
]

파이프라인 실행 태그 나열

az pipelines runs tag list 명령을 사용하여 프로젝트에서 파이프라인 실행에 대한 태그를 나열합니다. 시작하려면 Azure DevOps CLI 시작을 참조하세요.

az pipelines runs tag list --run-id
                           [--org]
                           [--project]

매개 변수

  • run-id: 필수입니다. 파이프라인 실행의 ID입니다.
  • org: Azure DevOps organization URL. 를 사용하여 az devops configure -d organization=ORG_URL기본 organization 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다. 예: --org https://dev.azure.com/MyOrganizationName/.
  • project: 프로젝트의 이름 또는 ID입니다. 를 사용하여 az devops configure -d project=NAME_OR_ID기본 프로젝트를 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다.

예제

다음 명령은 ID가 123 인 파이프라인 실행에 대한 태그를 나열하고 결과를 테이블 형식으로 반환합니다.

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

Tags
------
YAML

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

az pipelines runs tag delete 명령을 사용하여 프로젝트의 파이프라인 실행에서 태그를 삭제합니다. 시작하려면 Azure DevOps CLI 시작을 참조하세요.

az pipelines runs tag delete --run-id
                             --tag
                             [--org]
                             [--project]

매개 변수

  • run-id: 필수입니다. 파이프라인 실행의 ID입니다.
  • tag: 필수입니다. 파이프라인 실행에서 삭제할 태그입니다.
  • org: Azure DevOps organization URL. 를 사용하여 az devops configure -d organization=ORG_URL기본 organization 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다. 예: --org https://dev.azure.com/MyOrganizationName/.
  • project: 프로젝트의 이름 또는 ID입니다. 를 사용하여 az devops configure -d project=NAME_OR_ID기본 프로젝트를 구성할 수 있습니다. 기본값으로 구성되지 않았거나 를 사용하여 git config선택한 경우 필수입니다.

예제

다음 명령은 ID가 123인 파이프라인 실행에서 YAML 태그를 삭제합니다.

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