Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 您可以在多阶段devops管道中的条件语句中使用构建标记吗_Azure Devops_Azure Pipelines_Multistage Pipeline - Fatal编程技术网

Azure devops 您可以在多阶段devops管道中的条件语句中使用构建标记吗

Azure devops 您可以在多阶段devops管道中的条件语句中使用构建标记吗,azure-devops,azure-pipelines,multistage-pipeline,Azure Devops,Azure Pipelines,Multistage Pipeline,是否可以在后续阶段的条件部分使用多阶段管道构建上设置的构建标记 ##### task in build stage ##### - task: YodLabs.VariableTasks.AddTag.AddTag@0 displayName: Adding environment tag to build inputs: tags: | deploy $(DEPLOY_ENV) 谢谢据我所知,这在

是否可以在后续阶段的条件部分使用多阶段管道构建上设置的构建标记

    ##### task in build stage #####
    - task: YodLabs.VariableTasks.AddTag.AddTag@0
      displayName: Adding environment tag to build
      inputs:
        tags: |
          deploy
          $(DEPLOY_ENV)

谢谢

据我所知,这在YAML中还不可能实现,因为在YAML中没有简单的方法可以获得可用的标签。您可以尝试的是
输出变量

jobs:
- job: Foo
  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
- job: Bar
  dependsOn: Foo
  condition: eq(dependencies.Foo.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
  steps:
  - script: echo "Job Foo ran and doThing is true."
您也可以尝试使用Workaround,在这种情况下:

  • 在powershell脚本
    PUT中使用RESTAPI获取标记https://dev.azure.com/{organization}/{project}/_-api/build/builds/{buildId}/tags/{tag}?api版本=5.1
  • 然后使用日志命令将标记分配给输出变量
  • 最后在条件中使用输出变量
  • 编辑

    因此,目前看来这是不可能的,但应该很快就能实现。请检查这个

    输出变量现在可以在基于YAML的过程中跨阶段使用 管道这有助于传递有用的信息,例如“通过/不通过” 从一个阶段到下一个阶段生成的输出的决策或ID。 上一阶段及其作业的结果(状态)也将显示 可用

    输出变量仍然是由作业内部的步骤生成的。相反 引用依赖项.jobName.outputs['stepName.variableName'], 阶段是指
    stageDependencies.stageName.jobName.outputs['stepName.variableName']
    。 注意:默认情况下,管道中的每个阶段都取决于 在YAML文件中的前面。因此,每个阶段都可以使用输出 前一阶段的变量。您可以更改依赖关系图, 这也将改变哪些输出变量可用。对于 例如,如果阶段3需要来自阶段1的变量,则需要 在阶段1上声明显式依赖项

    我现在试过了:

    阶段:
    -阶段:A
    工作:
    -工作:JA
    步骤:
    -脚本:|
    echo“这是job Foo”
    echo“##vso[task.setvariable=doThing;isooutput=true]Yes”#变量doThing设置为true
    名称:DetermineResult
    #如果A失败,阶段B运行
    -阶段:B
    条件:eq(stageDependencies.A.JA.输出['DetermineResult.doThing','Yes')#映射doThing并检查是否为真
    工作:
    -工作:JB
    步骤:
    -bash:echo“Hello world B阶段第一份工作”
    
    但我有一个错误:

    加载YAML生成管道时出错。未被承认 值:“阶段相关性”。位于表达式中的位置4处: eq(stageDependences.A.JA.输出['DetermineResult.doThing','Yes')。 有关更多帮助,请参阅


    然而,这一功能很快就会与我们同在

    不幸的是,作业级别的输出变量在各个阶段都不可用。因此,对于这两个选项中的任何一个,我的阶段都需要先进行初始作业,以获取值,然后才能添加条件。我现在有类似的工作;但是使用存储在构建输出中的bash脚本。我想做的是跳过整个阶段,而不必在itExcellent上运行任何作业。我将关注特性实现的发行说明。
    jobs:
    - job: Foo
      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
    - job: Bar
      dependsOn: Foo
      condition: eq(dependencies.Foo.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
      steps:
      - script: echo "Job Foo ran and doThing is true."