繁体   English   中英

Azure YAML-Pipeline 跳过作业,我不知道为什么

[英]Azure YAML-Pipeline skips jobs and I have no idea why

即使我设置了 System.Debug=True,除了“作业被跳过”之外,我没有得到任何其他信息。 字面意思就是这四个字。

我在 Azure Devops 上创建了一个 YAML-Release 管道,它基本上运行这些作业:

  • 工作:build_release
  • 工作:部署:deploy_test
  • 工作:部署:deploy_stage

为了测试行为,我首先只运行了前两个作业并部署到 TEST。 现在我想部署到 STAGE 但似乎管道仅在我从头开始/创建新版本时才起作用。 但我现在想做的是将已经存在的版本从 TEST 部署到 STAGE。 当我尝试通过重新运行管道 Azure 来做到这一点时,只会跳过所有步骤。 为什么会这样? 我怎样才能避免这种情况并重新运行管道? 我没有设置任何条件。

编辑附加信息:

管道结构


trigger:
    - release/*

variables:
     ...

resources:
    -   repo: self


pool:
    vmImage: $(vmImageName)

stages:
    -   stage: build_release
        displayName: 'awesome build'
        condition: contains(variables['Build.SourceBranchName'], 'release/')
        jobs:
            -   job: build_release
                steps:
                    ...

    -   stage: deploy_test
        displayName: 'awesome test deploy'
        jobs:
            -   deployment: deploy_test
                environment: 'test'
                strategy:
                    runOnce:
                        deploy:
                            steps:
                               ...

    -   stage: deploy_stage
        displayName: 'awesome stage deploy'
        jobs:
            -   deployment: deploy_stage
                environment: 'stage'
                strategy:
                    runOnce:
                        deploy:
                            steps:
                               ...

我尝试以两种不同的方式触发它,但结果相同(所有内容都被跳过): A. 我创建了一个新版本,它是之前部署的版本的副本。 B. 我点击了运行管道。

该问题是由您为阶段build_release指定的条件condition: contains(variables['Build.SourceBranchName'], 'release/')

当触发器设置为- release/*时。 变量variables['Build.SourceBranchName']将被评估为/之后的分支名称。

例如:

如果您从分支release/release1.0触发了您的管道。 variables['Build.SourceBranchName']的值将是release1.0而不是release/release1.0 因此条件contains(variables['Build.SourceBranchName'], 'release/')将始终为 false,从而导致build_release阶段被跳过。

在此处输入图像描述

而且,如果您没有为阶段deploy_test和阶段deploy_stage指定依赖关系,则下一个阶段将默认依赖于上一个阶段。 所以这两个阶段也被跳过了,因为阶段build_release被跳过了。 这就是为什么您看到所有步骤都被跳过的原因。

在此处输入图像描述

解决方案:

在条件中使用变量Build.SourceBranch

更改条件如下:(发布分支中的 yaml 文件也应更改如下

- stage: build_release
  displayName: 'awesome build'
  condition: contains(variables['Build.SourceBranch'], 'release/') #use Build.SourceBranch

注意:如果您手动触发了您的管道。 请确保您的 select 从发布分支触发管道。 或者默认情况下,管道将从主分支触发。

在此处输入图像描述

这里的问题是,在创建管道运行时,听起来好像没有选择部署阶段。 因此,在管道的编译时,该阶段被跳过,因为它被定义为在该运行中被跳过。

至于您正在运行什么,第一个问题是运行 deploy_stage 的这些更改是在主分支中吗? 除非另有说明,否则默认情况下管道将针对主分支运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM