파이프라인 데코레이터 식 컨텍스트

Azure DevOps Services

파이프라인 데코레이터 는 실행되는 파이프라인에 대한 컨텍스트에 액세스할 수 있습니다. 파이프라인 데코레이터 작성자는 이 컨텍스트를 사용하여 데코레이터의 동작을 결정할 수 있습니다. 컨텍스트에서 사용할 수 있는 정보는 파이프라인 및 릴리스에 대해 다릅니다. 또한 작업 이름이 GUID(Globally Unique Identifier)로 확인된 후 데코레이터가 실행됩니다. 데코레이터가 작업을 참조하려는 경우 이름이나 키워드(keyword) 대신 GUID를 사용해야 합니다.

Azure DevOps 확장 SDK사용하여 확장 개발에 대한 최신 설명서를 확인하세요.

리소스

파이프라인 리소스는 개체에서 resources 사용할 수 있습니다.

리포지토리

현재 키 repositories는 하나뿐입니다. repositories 는 리포지토리 ID에서 리포지토리에 대한 정보로의 맵입니다.

디자이너 빌드에서 기본 리포지토리 별칭은 __designer_repo. YAML 파이프라인에서 기본 리포지토리를 호출 self합니다. 릴리스 파이프라인에서는 리포지토리를 사용할 수 없습니다. 릴리스 아티팩트 변수를 사용할 수 있습니다.

예를 들어 YAML 파이프라인에서 리포지토리의 self 이름을 인쇄하려면 다음을 수행합니다.

steps:
- script: echo ${{ resources.repositories['self'].name }}

리포지토리에는 다음 속성이 포함됩니다.

resources['repositories']['self'] =
{
	"alias": "self",
	"id": "<repo guid>",
	"type": "Git",
	"version": "<commit hash>",
	"name": "<repo name>",
	"project": "<project guid>",
	"defaultBranch": "<default ref of repo, like 'refs/heads/main'>",
	"ref": "<current pipeline ref, like 'refs/heads/topic'>",
	"versionInfo": {
		"author": "<author of tip commit>",
		"message": "<commit message of tip commit>"
	},
	"checkoutOptions": {}
}

작업

작업 세부 정보는 개체에서 job 사용할 수 있습니다.

데이터는 다음과 유사합니다.

job = 
{
	"steps": [
		{
			"environment": null,
			"inputs": {
				"script": "echo hi"
			},
			"type": "Task",
			"task": {
				"id": "d9bafed4-0b18-4f58-968d-86655b4d2ce9",
				"name": "CmdLine",
				"version": "2.146.1"
			},
			"condition": null,
			"continueOnError": false,
			"timeoutInMinutes": 0,
			"id": "5c09f0b5-9bc3-401f-8cfb-09c716403f48",
			"name": "CmdLine",
			"displayName": "CmdLine",
			"enabled": true
		}
	]
}

예를 들어 아직 없는 경우에만 조건부로 작업을 추가하려면 다음을 수행합니다.

- ${{ if not(containsValue(job.steps.*.task.id, 'f3ab91e7-bed6-436a-b651-399a66fe6c2a')) }}:
  - script: echo conditionally inserted

variables

파이프라인 변수 도 사용할 수 있습니다.

예를 들어 파이프라인에 변수가 있는 myVar경우 해당 값을 데코레이터에서 다음과 같이 variables['myVar']사용할 수 있습니다.

예를 들어 데코레이터에 옵트아웃을 제공하기 위해 변수를 찾을 수 있습니다. 데코레이터를 옵트아웃하려는 파이프라인 작성자는 이 변수를 설정할 수 있으며 데코레이터는 삽입되지 않습니다. 변수가 없으면 데코레이터가 평소와 같이 삽입됩니다.

my-decorator.yml

- ${{ if ne(variables['skipInjecting'], 'true') }}:
  - script: echo Injected the decorator

그런 다음, 조직의 파이프라인에서 작성자는 데코레이터에 자신을 삽입하지 않도록 요청할 수 있습니다.

pipeline-with-opt-out.yml

variables:
  skipInjecting: true
steps:
- script: echo This is the only step. No decorator is added.

작업 이름 및 GUID

데코레이터는 작업이 이미 GUID로 전환된 후 실행됩니다. 다음 YAML을 고려합니다.

steps:
- checkout: self
- bash: echo This is the Bash task
- task: PowerShell@2
  inputs:
    targetType: inline
    script: Write-Host This is the PowerShell task

이러한 각 단계는 작업에 매핑합니다. 각 작업에는 고유한 GUID가 있습니다. 데코레이터를 실행하기 전에 작업 이름 및 키워드(keyword) 작업 GUID에 매핑됩니다. 데코레이터가 다른 작업의 존재 여부를 검사 하려는 경우 이름이나 키워드(keyword) 대신 작업 GUID로 검색해야 합니다.

키워드(keyword) 사용하여 지정 task 하는 일반 작업의 경우 작업의 task.json GUID를 확인할 수 있습니다. 이전 예제와 bash 같은 checkout 특수 키워드(keyword) 경우 다음 GUID를 사용할 수 있습니다.

키워드 GUID 작업 이름
checkout 6D15AF64-176C-496D-B583-FD2AE21D4DF4 n/a, 참고 참조
bash 6C731C3C-3C68-459A-A5C9-BDE6E6595B5B Bash
script D9BAFED4-0B18-4F58-968D-86655B4D2CE9 CmdLine
powershell E213FF0F-5D5C-4791-802D-52EA3E7BE1F1 PowerShell
pwsh E213FF0F-5D5C-4791-802D-52EA3E7BE1F1 PowerShell
publish ECDC45F6-832D-4AD9-B52B-EE49E94659BE PublishPipelineArtifact
download 30f35852-3f7e-4c0c-9a88-e127b4f97211 DownloadPipelineArtifact

작업 이름과 키워드(keyword) 확인되면 이전 YAML은 다음과 같이 됩니다.

steps:
- task: 6D15AF64-176C-496D-B583-FD2AE21D4DF4@1
  inputs:
    repository: self
- task: 6C731C3C-3C68-459A-A5C9-BDE6E6595B5B@3
  inputs:
    targetType: inline
    script: echo This is the Bash task
- task: E213FF0F-5D5C-4791-802D-52EA3E7BE1F1@2
  inputs:
    targetType: inline
    script: Write-Host This is the PowerShell task

해당하는 기본 제공 작업에 대해 이러한 GUID를 task.json 각각 찾을 수 있습니다. 유일한 예외는 checkout에이전트의 네이티브 기능인 것입니다. 해당 GUID는 Azure Pipelines 서비스 및 에이전트에 기본 제공됩니다.