gpt4 book ai didi

azure - 在 Azure Devops Pipelines 中的部署作业生命周期 Hook 之间共享变量

转载 作者:行者123 更新时间:2023-12-04 02:37:05 25 4
gpt4 key购买 nike

我一直在尝试在部署作业的生命周期 Hook 中定义一个变量,然后在稍后的生命周期 Hook 中访问该变量。 documentation on deployment jobs引用了这样做的能力,但没有提供这种情况的实际示例(额外强调):

Define output variables in a deployment job's lifecycle hooks and consume them in other downstream steps and jobs within the same stage.

我一直在使用的示例管道:

stages:
- stage: Pipeline
jobs:
- deployment: Deploy
environment: 'testing'
strategy:
runOnce:
preDeploy:
steps:
- bash: |
echo "##vso[task.setvariable variable=myLocalVar;isOutput=false]local variable"
name: setvarStep
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]output variable"
name: outvarStep
- bash: |
echo 'Both $(myLocalVar) and $(outvarStep.myOutputVar) are available here'
echo "Both $(myLocalVar) and $(outvarStep.myOutputVar) are available here"
deploy:
steps:
- bash: |
echo 'Neither $(myLocalVar) nor $(outvarStep.myOutputVar) are available here'
echo "Neither $(myLocalVar) nor $(outvarStep.myOutputVar) are available here"

我已经尝试了许多选项,但我所做的一切似乎都不允许它真正起作用 - 部署生命周期 Hook 中的 bash 任务的输出是:

Neither nor are available here

  • 我尝试通过 env: 将变量连接到 bash 任务输入,都使用宏语法(例如 $(myOutputVar) 和运行时表达式语法,希望我能找到隐藏的依赖项(例如 $[ dependencies.Deploy.outputs['preDeploy.outVarStep.myOutputVar'] ] ,以及许多其他语法)
  • 我尝试在作业级别定义变量,希望它们能在第一个 preDeploy 时得到更新。生命周期 Hook 并可用于deploy生命周期 Hook 。
  • 我尝试通过运行时表达式语法回显变量
  • 许多其他语法组合,希望我能偶然发现实际答案

但是一切都无济于事。我可能会采取将变量作为工件上传并稍后下载的方法,但我真的很想找到这个问题的解决方案。有人能够做到这一点吗?非常感谢。

最佳答案

解决方法:

首先,与您分享您正在寻找的这种场景的正确示例:

stages:
- stage: Pipeline
jobs:
- deployment: Deploy
environment: 'testing'
strategy:
runOnce:
preDeploy:
steps:
- bash: |
echo "##vso[task.setvariable variable=myLocalVar;isOutput=false]local variable"
name: setvarStep
- bash: |
echo "##vso[task.setvariable variable=myOutputVar;isOutput=true]output variable"
name: outvarStep
- bash: |
echo 'Both $(myLocalVar) and $(outvarStep.myOutputVar) are available here'
echo "Both $(myLocalVar) and $(outvarStep.myOutputVar) are available here"
mkdir -p $(Pipeline.Workspace)/variables
echo "$(myLocalVar)" > $(Pipeline.Workspace)/variables/myLocalVar
echo "$(outvarStep.myOutputVar)" > $(Pipeline.Workspace)/variables/myOutputVar

- publish: $(Pipeline.Workspace)/variables
artifact: variables
deploy:
steps:
- bash: |
echo 'Neither $(myLocalVar) nor $(outvarStep.myOutputVar) are available here'
echo "Neither $(myLocalVar) nor $(outvarStep.myOutputVar) are available here"
- download: current
artifact: variables
- bash: |
myLocalVar=$(cat $(Pipeline.Workspace)/variables/myLocalVar)
myOutputVar=$(cat $(Pipeline.Workspace)/variables/myOutputVar)
echo "##vso[task.setvariable variable=myLocalVar;isoutput=true]$myLocalVar"
echo "##vso[task.setvariable variable=myOutputVar;isoutput=true]$myOutputVar"
name: output
- bash: |
echo "$(output.myLocalVar)"
echo "$(output.myOutputVar)"
name: SucceedToGet

您将看到输出变量可以在 SucceedToGet 任务中成功打印:

enter image description here

<小时/>

解释为什么您之前的尝试始终失败:

对于我们的系统,策略代表开始运行之前的一项作业(编译时)。它仅在运行时扩展。

Define output variables in a deployment job's lifecycle hooks and consume them in other downstream steps and jobs within the same stage.

这里的其他下游步骤和作业是指在编译时独立的独立作业。这就是我们在这一行下提供示例 YAML 的原因。

关于azure - 在 Azure Devops Pipelines 中的部署作业生命周期 Hook 之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61216069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com