如何将 Azure DevOps 管道装饰器配置为经典管道中的 运行 前置任务?
How to configure Azure DevOps Pipeline decorators to run pre-tasks in classic pipelines?
我们有一个自定义的 Azure DevOps 扩展,以便使用管道装饰器功能将 SonarQube 管道任务注入到每个定义中。这些任务是 pre 和 post[ 的混合体=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
。至于为什么会指向这个具体任务,因为这种异常到现在只存在于sonarcloud
和sonarqube
的prepare任务中。
我们的团队将与声纳团队一起进行调查和修复。
到目前为止,您可以考虑申请 2 项工作。
解决 1:
正如我之前提到的,此 prepare
任务无法主动检测并注入 JobContext
。因此,第一个解决方法是我们通过将 prepare
任务添加到代理作业中来主动将此任务信息添加到 JobContext
中。
但这会导致一个缺点,它会加载 2 个准备任务。一个在作业前执行,接下来运行秒。
解决方法 2:
尝试使用 YAML 来构建您的管道,直到我们实现这个异常的东西。这样就不会因为缺少prepare
任务
而出错
一旦我们有任何进展,将在此处更新状态让您知道。
我们有一个自定义的 Azure DevOps 扩展,以便使用管道装饰器功能将 SonarQube 管道任务注入到每个定义中。这些任务是 pre 和 post[ 的混合体=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
。至于为什么会指向这个具体任务,因为这种异常到现在只存在于sonarcloud
和sonarqube
的prepare任务中。
我们的团队将与声纳团队一起进行调查和修复。
到目前为止,您可以考虑申请 2 项工作。
解决 1:
正如我之前提到的,此 prepare
任务无法主动检测并注入 JobContext
。因此,第一个解决方法是我们通过将 prepare
任务添加到代理作业中来主动将此任务信息添加到 JobContext
中。
但这会导致一个缺点,它会加载 2 个准备任务。一个在作业前执行,接下来运行秒。
解决方法 2:
尝试使用 YAML 来构建您的管道,直到我们实现这个异常的东西。这样就不会因为缺少prepare
任务
一旦我们有任何进展,将在此处更新状态让您知道。