如何配置Azure DevOps管道装饰器以在经典管道中运行预任务?

时间:2020-01-17 11:36:30

标签: azure-devops azure-pipelines

我们具有自定义的Azure DevOps扩展,以便使用Pipeline Decorator功能将SonarQube管道任务注入到每个定义中。这些任务是 pre post 任务的混合体。

在YAML定义的管道中,任务运行完美,但是在Classic管道定义中,仅运行 post 任务,尽管classic和YAML管道定义相同(步骤,代理商,需求,变量等)。

由于这是Azure DevOps的相对较新的功能,因此缺少文档,尤其是有关经典管道的文档。

发生这种事情我们可能会缺少一些东西吗?

1 个答案:

答案 0 :(得分:3)

是否存在我们可能缺少的东西 发生了吗?

这似乎是我们这方面的问题。而且,只有将其应用到 Decorator (装饰器)中,它才存在于sonarcloud / sonarqube 准备任务中。

如您所知,用户使用yaml模板将步骤插入到指定位置。实际上,在我们的后端,该模板文件是通过 yaml模板引擎处理的。

作为我们的设计,在组织级别启用Pipeline decorators后。在初始化作业中,Pipeline将调用一个后端类来获取JobContext,该类将向decorator providers添加JobContext。然后JobContext使用这些提供程序来获取贡献,以在准备运行的作业时在作业中添加pre/post任务。

但是,sonar prepare任务无法被引擎主动检测到,然后将其注入JobContext中。为何我要指出此特定任务,因为到目前为止,这种异常仅存在于sonarcloudsonarqube准备任务中。

我们的团队将与声纳团队一起进行调查和修复。


到目前为止,您可以考虑进行2种解决方案。

解决方法1:

正如我之前提到的,无法主动检测到此prepare任务并将其注入JobContext中。因此,首先要解决的工作是,通过将JobContext任务添加到代理作业中,将该任务信息主动添加到prepare中。

但这会导致一个缺点,那就是它将加载2个准备任务。一个在工作前执行,然后第二个运行。

enter image description here

解决2:

在我们实现此异常之前,请尝试使用YAML来构建您的管道。这样就不会因为缺少prepare任务而导致错误


将在此处更新状态,以便在我们取得任何进展时通知您。