如何使用具有从一个阶段到下一个阶段的输出的环境变量?

Posted

技术标签:

【中文标题】如何使用具有从一个阶段到下一个阶段的输出的环境变量?【英文标题】:How do I use a environment variable with output from one stage to the next? 【发布时间】:2021-12-29 09:30:58 【问题描述】:

如何将我的环境变量从第一阶段转移到第二阶段?

问题 -> 我从回显结果中得到一个空的 "" 值。

天蓝色管道.yml

trigger:
  branches:
    include:
    - main
  paths:
    include:
    - infra/*
    - .pipelines/*

variables:
  vmImageName: 'ubuntu-latest'
  root: $(System.DefaultWorkingDirectory)

stages:
- stage: TakePITR
  dependsOn: []
  variables:
    env: poc
  jobs:
  - job: GetPitrTime
    steps:
    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          $iso8601_time = Get-Date -Format "o"
          echo "##vso[task.setvariable variable=pitr_time;isOutput=True]$iso8601_time"
        name: PitrVar
        displayName: "Get point-in-time before second stage"

- stage: TestOutputEnvVar
  dependsOn: TakePITR
  variables:
    env: poc
    PITR: $[ stageDependencies.TakePITR.GetPitrTime.outputs['PitrVar.pitr_time']]
  jobs:
  - job:
    steps:
    - script: |
        echo $pitr_time
        echo $PITR
      displayName: 'echo value'

我不明白我在这里做错了什么。

这是我的管道的结果:

【问题讨论】:

【参考方案1】:

您有缩进问题:

    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: |
          $iso8601_time = Get-Date -Format "o"
          echo "##vso[task.setvariable variable=pitr_time;isOutput=true]$iso8601_time"
      name: PitrVar
      displayName: "Get point-in-time before second stage"

Name 和 displayName 应与 input 处于同一级别,然后:

完整代码在这里

trigger:
  branches:
    include:
    - main
  paths:
    include:
    - infra/*
    - .pipelines/*

variables:
  vmImageName: 'ubuntu-latest'
  root: $(System.DefaultWorkingDirectory)

stages:
- stage: TakePITR
  dependsOn: []
  variables:
    env: poc
  jobs:
  - job: GetPitrTime
    steps:
    - task: PowerShell@2
      name: PitrVar
      displayName: "Get point-in-time before second stage"
      inputs:
        targetType: 'inline'
        script: |
          $iso8601_time = Get-Date -Format "o"
          echo "##vso[task.setvariable variable=pitr_time;isOutput=true]$iso8601_time"

- stage: TestOutputEnvVar
  dependsOn: TakePITR
  variables:
    env: poc
    PITR: $[ stageDependencies.TakePITR.GetPitrTime.outputs['PitrVar.pitr_time']]
  jobs:
  - job:
    steps:
    - script: |
        echo $pitr_time
        echo $PITR
      displayName: 'echo value'

【讨论】:

以上是关于如何使用具有从一个阶段到下一个阶段的输出的环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

软件工程---常用总结

使用优化编译时,多线程程序块

在 Xcode 构建阶段运行脚本中设置全局环境变量

Vue CLI中 模式和环境变量详解

Makefile学习13——理解make的解析行为

使用多阶段泊坞窗文件输出多个图像