我们具有自定义的Azure DevOps扩展,以便使用Pipeline Decorator功能将SonarQube管道任务注入到每个定义中。这些任务是 pre 和 post 任务的混合体。
在YAML定义的管道中,任务运行完美,但是在Classic管道定义中,仅运行 post 任务,尽管classic和YAML管道定义相同(步骤,代理商,需求,变量等)。
由于这是Azure DevOps的相对较新的功能,因此缺少文档,尤其是有关经典管道的文档。
发生这种事情我们可能会缺少一些东西吗?
答案 0 :(得分:3)
是否存在我们可能缺少的东西 发生了吗?
这似乎是我们这方面的问题。而且,只有将其应用到 Decorator (装饰器)中,它才存在于sonarcloud / sonarqube 准备任务中。
如您所知,用户使用yaml
模板将步骤插入到指定位置。实际上,在我们的后端,该模板文件是通过 yaml模板引擎处理的。
作为我们的设计,在组织级别启用Pipeline decorators
后。在初始化作业中,Pipeline
将调用一个后端类来获取JobContext
,该类将向decorator providers
添加JobContext
。然后JobContext
使用这些提供程序来获取贡献,以在准备运行的作业时在作业中添加pre/post
任务。
但是,sonar prepare
任务无法被引擎主动检测到,然后将其注入JobContext
中。为何我要指出此特定任务,因为到目前为止,这种异常仅存在于sonarcloud
和sonarqube
的准备任务中。
我们的团队将与声纳团队一起进行调查和修复。
到目前为止,您可以考虑进行2种解决方案。
解决方法1:
正如我之前提到的,无法主动检测到此prepare
任务并将其注入JobContext
中。因此,首先要解决的工作是,通过将JobContext
任务添加到代理作业中,将该任务信息主动添加到prepare
中。
但这会导致一个缺点,那就是它将加载2个准备任务。一个在工作前执行,然后第二个运行。
解决2:
在我们实现此异常之前,请尝试使用YAML来构建您的管道。这样就不会因为缺少prepare
任务而导致错误
将在此处更新状态,以便在我们取得任何进展时通知您。