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

Azure devops 如何配置Azure DevOps管道装饰器以在经典管道中运行预任务?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我们有一个自定义的Azure DevOps扩展,以便使用管道装饰器功能将SonarQube管道任务注入到每个定义中。这些任务是前和后任务的混合体 在YAML定义的管道中,任务可以完美地运行,但是在经典管道定义中,只有post任务运行,尽管经典管道和YAML管道的定义相同(步骤、代理、需求、变量等) 由于这是Azure DevOps的一个相对较新的功能,因此缺少文档,特别是关于经典管道的文档 有没有什么东西是我们可能错过的 有没有什么东西我们可能会错过 发生了什么 这似乎是我们这边的问题。而且,如

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

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

由于这是Azure DevOps的一个相对较新的功能,因此缺少文档,特别是关于经典管道的文档

有没有什么东西是我们可能错过的

有没有什么东西我们可能会错过 发生了什么

这似乎是我们这边的问题。而且,如果我们将它应用到装饰器中,它只存在于sonarcloud/sonarqubeprepare任务中

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

按照我们的设计,在组织级别启用
管道装饰器之后。在初始化作业中,
管道
将调用一个后端类来获取
JobContext
,它将
装饰程序提供程序
添加到
JobContext
。然后
JobContext
使用这些提供程序获取贡献,以便在准备运行作业时在作业中添加
pre/post
任务

但是,
声纳准备
任务不能主动被引擎检测到,然后将其注入
作业上下文
。为什么我要指出这项具体任务,因为这种异常情况目前只存在于
sonarcloud
sonarqube
prepare任务中

我们小组将与声纳小组一起进行调查和修复


到目前为止,有2项工作可以考虑应用。

解决1:

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

但这将导致一个缺点,即它将加载2个准备任务。一个在pre-job中执行,下一个运行第二个

解决方案2:

尝试使用YAML来构建您的管道,直到我们实现这个异常事件。这样就不会因为缺少
prepare
任务而导致错误


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

有没有什么东西我们可能会错过 发生了什么

这似乎是我们这边的问题。而且,如果我们将它应用到装饰器中,它只存在于sonarcloud/sonarqubeprepare任务中

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

按照我们的设计,在组织级别启用
管道装饰器之后。在初始化作业中,
管道
将调用一个后端类来获取
JobContext
,它将
装饰程序提供程序
添加到
JobContext
。然后
JobContext
使用这些提供程序获取贡献,以便在准备运行作业时在作业中添加
pre/post
任务

但是,
声纳准备
任务不能主动被引擎检测到,然后将其注入
作业上下文
。为什么我要指出这项具体任务,因为这种异常情况目前只存在于
sonarcloud
sonarqube
prepare任务中

我们小组将与声纳小组一起进行调查和修复


到目前为止,有2项工作可以考虑应用。

解决1:

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

但这将导致一个缺点,即它将加载2个准备任务。一个在pre-job中执行,下一个运行第二个

解决方案2:

尝试使用YAML来构建您的管道,直到我们实现这个异常事件。这样就不会因为缺少
prepare
任务而导致错误



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

谢谢您提供的信息。通过将准备任务添加到代理作业中来主动将此任务信息添加到JobContext中,您的意思是将此任务手动添加到每个管道中,或者是否有一种方法可以使用decorator将其插入到
JobContext
中?@Harry,JobContext是由后端类生成的。对于您,您需要手动将此准备任务添加到代理作业中。注意,只有由Classic UI配置的管道才需要这个。我已经联系了相应的团队,并让他们知道今天的异常情况。您对@Merlin的状态有任何更新吗?谢谢谢谢你提供的信息。通过将准备任务添加到代理作业中来主动将此任务信息添加到JobContext中,您的意思是将此任务手动添加到每个管道中,或者是否有一种方法可以使用decorator将其插入到
JobContext
中?@Harry,JobContext是由后端类生成的。