두 단계로 구성된 Azure DevOps에서 YAML 파이프 라인을 만들고 있습니다.
첫 번째 단계 (전제 조건)는 git 커밋을 읽고 커밋의 영향을받은 서비스 목록을 포함하는 쉼표로 구분 된 변수를 생성합니다.
두 번째 단계 (Build)는 프로젝트의 빌드 및 단위 테스트를 담당합니다. 이 단계는 templates
각 서비스에 대해 하나씩 많은로 구성됩니다 . 템플릿 스크립트에서 작업은 이전 단계에서 생성 된 변수에 해당 Service가 있는지 확인합니다. 작업이 서비스를 찾으면 계속해서 서비스를 빌드하고 테스트합니다. 그러나 서비스를 찾을 수 없으면 해당 작업을 건너 뜁니다.
Run.yml :
stages:
- stage: Prerequisites
jobs:
- job: SetBuildQueue
steps:
- task: powershell@2
name: SetBuildQueue
displayName: 'Set.Build.Queue'
inputs:
targetType: inline
script: |
## ... PowerShell script to get changes - working as expected
Write-Host "Build Queue Auto: $global:buildQueueVariable"
Write-Host "##vso[task.setvariable variable=buildQueue;isOutput=true]$global:buildQueueVariable"
- stage: Build
jobs:
- job: StageInitialization
- template: Build.yml
parameters:
projectName: Service001
projectLocation: src/Service001
- template: Build.yml
parameters:
projectName: Service002
projectLocation: src/Service002
Build.yml :
parameters:
projectName: ''
projectLocation: ''
jobs:
- job:
displayName: '${{ parameters.projectName }} - Build'
dependsOn: SetBuildQueue
continueOnError: true
condition: and(succeeded(), contains(dependencies.SetBuildQueue.outputs['SetBuildQueue.buildQueue'], '${{ parameters.projectName }}'))
steps:
- task: NuGetToolInstaller@1
displayName: 'Install Nuget'
발행물:
첫 번째 단계가 실행 buildQueue
되면 PowerShell 스크립트 작업의 콘솔 출력에 표시된대로 채워지는 라는 변수가 생성됩니다 .
Service001 Changed
Build Queue Auto: Service001;
그러나 2 단계에 도달하고 빌드 템플릿을 실행하려고하면 조건을 확인하면 다음 출력이 반환됩니다.
Started: Today at 12:05 PM
Duration: 16m 7s
Evaluating: and(succeeded(), contains(dependencies['SetBuildQueue']['outputs']['SetBuildQueue.buildQueue'], 'STARS.API.Customer.Assessment'))
Expanded: and(True, contains(Null, 'service001'))
Result: False
내가 설정 어떻게 그래서 제 질문은 dependsOn
하고 condition
이전 단계에서 정보를 얻기 위해?
변수를 정의한 단계와 다른 단계에서 변수에 액세스하려고하기 때문입니다. 현재는 불가능합니다. 각 단계는 새로운 에이전트의 새로운 인스턴스입니다.
이 블로그 에서는 변수를 디스크에 쓴 다음 파이프 라인 아티팩트를 활용하여 파일로 전달하는 것과 관련된 해결 방법을 찾을 수 있습니다 .
작업에서 다른 단계의 다른 작업으로 변수 FOO를 전달하려면 :
mkdir -p $(Pipeline.Workspace)/variable
s 와 같은 것이 좋은 생각 일 수 있습니다.echo "$FOO" > $(Pipeline.Workspace)/variables/FOO
. 이름은 원하는대로 지정할 수 있지만 파일에 변수와 같은 이름을 지정하는 것이 좋습니다.$(Pipeline.Workspace)/variables
폴더를 다음 이름의 파이프 라인 아티팩트로 게시하십시오.variables
FOO=$(cat $(Pipeline.Workspace)/variables/FOO)
echo "##vso[task.setvariable variable=FOO]$FOO"
($(FOO))
하거나 bash 스크립트 내에서 환경 변수로 사용할 수 있습니다 ($FOO)
.이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다