source

Azure DevOps 파이프라인의 여러 단계에서 변수 공유

gigabyte 2023. 4. 24. 23:26
반응형

Azure DevOps 파이프라인의 여러 단계에서 변수 공유

스크립트에서 ADO 파이프라인 간에 커스텀 변수를 공유하는 방법을 찾고 있습니다.아래는 저의 2단계 대본입니다.

하고 있어요.curProjVersion하다가가제 대고 ?고 고???

stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: VersionCheck
    pool:
      vmImage: 'ubuntu-latest'
    displayName: Version Check
    continueOnError: false
    steps:

      - script: |
          echo "##vso[task.setvariable variable=curProjVersion;isOutput=true]1.4.5"
        name: setCurProjVersion
        displayName: "Collect Application Version ID"

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  variables:
    curProjVersion1: $[ dependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]
  jobs:
  - job: 
    steps: 
      - script: |
          echo $(curProjVersion1)

갱신일 :

단계별 변수 공유 기능은 현재 Sprint 168에서 출시되었습니다.

이전 단계의 출력 변수에 액세스하려면 다음 형식을 사용하십시오.

stageDependencies.{stageName}.{jobName}.outputs['{stepName}.{variableName}'] 

오리지널:

Azure DevOps 파이프라인의 여러 단계에서 변수 공유

유감스럽게도 한 단계에서 정의한 변수를 공유하여 다른 단계로 전달하는 것은 지원되지 않습니다.

이 기능은 추가할 예정이지만, 지금까지는 지원되지 않습니다.당신은 이 Github 문제를 따라갈 수 있습니다. 많은 사람들이 당신과 같은 요구를 가지고 있습니다.당신은 그것을 추적할 수 있습니다.

지금까지는 멀티 작업 출력 변수 설정만 지원했지만 이는 YAML만 지원합니다. Classic Editor의 경우 이 기능을 릴리스에 추가할 계획이 없습니다.

회피책의 경우 단계 전에 변수를 미리 정의할 수 있습니다.하지만 한 가지 중요한 것은 그 가치를 한 단계에서 바꾸는 것이다.새 값을 다음 단계로 전달할 수 없습니다.새 값을 가진 변수의 수명은 단계에서만 존재합니다.

점을 언급해야 할까요?stageDependencies는 is is is is is is is is is is is is에서 사용할 수 .condition테이스그것은 일자리에서 이용할 수 있지만, 직접 무대에서는 이용할 수 없다(적어도 현재로서는.

stages:
- stage: A
  jobs:
  - job: JA
    steps:
    - script: |
        echo "This is job Foo."
        echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to true
      name: DetermineResult
    - script: echo $(DetermineResult.doThing)
      name: echovar
  - job: JA_2
    dependsOn: JA
    condition: eq(dependencies.JA.outputs['DetermineResult.doThing'], 'Yes')
    steps:
    - script: |
        echo "This is job Bar."

#stage B runs if DetermineResult task set doThing variable n stage A
- stage: B
  dependsOn: A
  jobs:
  - job: JB
    condition: eq(stageDependencies.A.JA.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
    variables:
      varFromStageA: $[ stageDependencies.A.JA.outputs['DetermineResult.doThing'] ]
    steps:
    - bash: echo "Hello world stage B first job"
    - script: echo $(varFromStageA)

작업이 이전 단계의 변수에 액세스할 수 있게 되었습니다.

출력 변수는 여전히 작업 내부의 단계에 의해 생성됩니다.를 하는 것이 dependencies.jobName.outputs['stepName.variableName']에서는, 「」를 해 주세요.stageDependencies.stageName.jobName.outputs['stepName.variableName'].

https://learn.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#azure-pipelines-1

2020년 5월 4일부터 이용 가능합니다.

작업은 이전 단계의 출력 변수에 액세스할 수 있습니다.

이제 출력 변수를 YAML 기반 파이프라인의 여러 단계에서 사용할 수 있습니다.이를 통해 한 단계에서 다음 단계로 전송되는 데 도움이 되는 정보(예: 실행/정지 결정 또는 생성된 출력의 ID)를 전달할 수 있습니다.이전 단계의 결과(상태)와 작업도 이용할 수 있습니다.

출력 변수는 여전히 작업 내부의 단계에 의해 생성됩니다.를 하는 것이 dependencies.jobName.outputs['stepName.variableName']에서는, 「」를 해 주세요.stageDependencies.stageName.jobName.outputs['stepName.variableName'].

메모

기본적으로 파이프라인의 각 단계는 YAML 파일의 직전 단계에 따라 달라집니다.따라서 각 단계에서 이전 단계의 출력 변수를 사용할 수 있습니다.종속성 그래프를 변경할 수 있습니다. 그러면 사용 가능한 출력 변수도 변경됩니다.예를 들어, 스테이지 3이 스테이지 1의 변수를 필요로 하는 경우, 스테이지 1에 대한 명확한 의존성을 선언해야 합니다.

Azure DevOps 버전 Dev17의 스테이지 조건용.에이전트 버전 2.153.1이 설치된 M153.5는 다음과 같이 동작합니다.

stages:
- stage: A
  jobs:
  - job: JA
    steps:
    - script: |
        echo "This is job Foo."
        echo "##vso[task.setvariable variable=doThing;isOutput=true]Yes" #The variable doThing is set to 'Yes'
      name: DetermineResult

#stage B runs if DetermineResult task set doThing variable on stage A
- stage: B
  dependsOn: A
  condition: eq(dependencies.A.outputs['JA.DetermineResult.doThing'], 'Yes')
  jobs:
  - job: JB
    steps:
    - bash: echo "Hello world stage B first job"

주의: 스테이지에서 속성 레이아웃은 작업에 비해 다릅니다.

dependencies.{stage name}.outputs['{job name}.{script name}.{variable name}']

참고: 'stageDependencies'가 있는 식은 다음 오류 메시지와 함께 실패했습니다.

YAML 빌드 파이프라인을 로드하는 동안 오류가 발생했습니다.인식할 수 없는 값: '스테이지 종속성'입니다.식: 및 (항상()), eq(스테이지 의존관계) 내의 XX 위치에 있습니다.A.출력[']JA.DeterminineResult.doThing', 'Yes')를 선택합니다.자세한 내용은 https://go.microsoft.com/fwlink/?linkid=842996을 참조하십시오.

보너스:

종속 스테이지의 상태에 액세스 하는 방법에 대해서는, 다음의 메뉴얼을 참조해 주세요.link

대응하는 문서:

다른 단계의 출력을 사용하려면 단계인지 작업 수준인지에 따라 구문을 사용해야 합니다.

  • at른른른른른른른른른른른른 at at at at at at at at at at at at at at at at.dependencies.STAGE.outputs['JOB.TASK.VARIABLE']에 따라 할 수 이러한 변수는 조건에서 사용할 수 있습니다.
  • 작업 수준에서 다른 단계의 변수를 참조하는 형식은 다음과 같습니다.stageDependencies.STAGE.JOB.outputs['TASK.VARIABLE']

주의: 기본적으로 파이프라인의 각 단계는 YAML 파일의 직전 단계에 따라 달라집니다.현재 단계 직전 이외의 단계를 참조할 필요가 있는 경우 다음 명령을 추가하여 이 자동 기본값을 재정의할 수 있습니다.dependsOn스테이지로 이동합니다.

네, 가능합니다. 다음과 같은 stageDependencies가 필요합니다.

stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: VersionCheck
    pool:
      vmImage: 'ubuntu-latest'
    displayName: Version Check
    continueOnError: false
    steps:

      - script: |
          echo "##vso[task.setvariable variable=curProjVersion;isOutput=true]1.4.5"
        name: setCurProjVersion
        displayName: "Collect Application Version ID"

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  variables:
    curProjVersion1: $[ stageDependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]
  jobs:
  - job: 
    steps: 
      - script: |
          echo $(curProjVersion1)

변경에 주의해 주세요.

$[ dependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]

로.

$[ stageDependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]

출처 : https://jimferrari.com/2023/01/05/pass-variables-across-jobs-and-stages-in-azure-devops-pipelines/

이 질문을 접하는 모든 사용자를 위한 업데이트로, 단계 간 전달 변수가 구현되었으므로 앞으로 주 내에 출시될 것으로 보입니다.

글로벌 변수를 정의하고 Powershell을 사용하여 단계 변수 값을 글로벌 변수에 할당할 수 있습니다.

Write-Output ("##vso[task.setvariable variable=globalVar;]$stageVar")

전역 변수는 yaml 자체 또는 변수 그룹에서 정의할 수 있습니다.빈 값으로 var를 초기화합니다.

예: yaml

  variables:
    globalVar: ''

트리거를 정의한 직후와 단계를 정의하기 전에 변수를 정의할 수 있습니다.

trigger:
- master
  variables:
    VarA: aaaaa
    VarB: bbbbb
stages:
- stage: Build  
  jobs:
  - job: Build
    pool:
      vmImage: 'vs2017-win2016'

언급URL : https://stackoverflow.com/questions/57485621/share-variables-across-stages-in-azure-devops-pipelines

반응형