如何将 Azure DevOps 管道装饰器配置为经典管道中的 运行 前置任务?

How to configure Azure DevOps Pipeline decorators to run pre-tasks in classic pipelines?

我们有一个自定义的 Azure DevOps 扩展,以便使用管道装饰器功能将 SonarQube 管道任务注入到每个定义中。这些任务是 prepost[ 的混合体=26=]任务。

在 YAML 定义的管道中,任务 运行 完美,但是在经典管道定义中,只有 post 任务 运行,尽管经典和 YAML 管道的定义相同(步骤、代理、需求、变量等)。

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

为了实现这一点,我们是否可能遗漏了什么?

Is there something that we could possibly be missing for this to happen?

这似乎是我们这边的问题。而且,如果我们将它应用到 sonarcloud/sonarqube prepare 任务中,它只存在于 Decorator.

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

按照我们的设计,在组织级别启用 Pipeline decorators 之后。在 Initialize job 中,Pipeline 将调用一个后端 class 来获取 JobContext,这会将 decorator providers 添加到 JobContext.然后 JobContext 使用这些提供程序来获取贡献以在作业中添加 pre/post 任务,同时准备作业到 运行。

但是,sonar prepare任务无法主动被引擎检测到,然后将其注入JobContext。至于为什么会指向这个具体任务,因为这种异常到现在只存在于sonarcloudsonarqubeprepare任务中。

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


到目前为止,您可以考虑申请 2 项工作。

解决 1:

正如我之前提到的,此 prepare 任务无法主动检测并注入 JobContext。因此,第一个解决方法是我们通过将 prepare 任务添加到代理作业中来主动将此任务信息添加到 JobContext 中。

但这会导致一个缺点,它会加载 2 个准备任务。一个在作业前执行,接下来运行秒。

解决方法 2:

尝试使用 YAML 来构建您的管道,直到我们实现这个异常的东西。这样就不会因为缺少prepare任务

而出错

一旦我们有任何进展,将在此处更新状态让您知道。