【问题标题】:How to configure Azure DevOps Pipeline decorators to run pre-tasks in classic pipelines?如何配置 Azure DevOps Pipeline 装饰器以在经典管道中运行预任务?
【发布时间】:2020-01-17 11:36:30
【问题描述】:

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

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

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

为了发生这种情况,我们可能缺少什么东西吗?

【问题讨论】:

    标签: azure-devops azure-pipelines azure-pipelines-decorator


    【解决方案1】:

    有什么我们可能会因此而遗漏的东西吗? 发生了什么?

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

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

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

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

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


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

    解决方法 1:

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

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

    解决方法 2:

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


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

    【讨论】:

    • 感谢您的信息。 通过将准备任务添加到代理作业中主动将此任务信息添加到 JobContext 中,您的意思是将此任务手动添加到每个管道中,或者有什么方法可以将其注入使用装饰器进入JobContext
    • @Harry, JobContext 是由后端类生成的。对您来说,您需要手动将此准备任务添加到代理作业中。注意,只有 Classic UI 配置的管道才需要这个。我已经联系了相应的团队,今天让他们知道了这个异常。
    • 您对这个@Merlin 的状态有任何更新吗?谢谢!
    猜你喜欢
    • 2021-07-08
    • 2021-10-19
    • 2021-11-04
    • 2021-11-03
    • 1970-01-01
    • 2020-05-28
    • 2020-05-28
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多