在 Azure 管道中的另一个作业中使用从上一个作业检出的文件

时间:2021-02-05 20:22:58

标签: azure-devops azure-pipelines

我在 Azure DevOps 中创建了一个管道,用于构建 Angular 应用程序并对其运行一些测试。我将管道分为两个工作,构建和测试。构建作业成功完成。测试作业再次从 Git 检出代码,即使构建作业已经这样做了。测试作业需要在构建作业中创建的文件才能像 npm 包一样成功运行。

这是我的 YAML 文件:

%%b

我的代理池是在阶段级别声明的,因此两个作业都将使用相同的代理。我还向测试作业添加了一个dependsOn,以确保使用相同的代理。查了日志,其实用的是同一个agent。

如何让测试作业使用在构建作业中创建的文件而不再次检出代码?如果有帮助,我正在使用 Angular 11 和 Azure DevOps Server 2020。

2 个答案:

答案 0 :(得分:1)

假设在作业之间清理了代理,因此要访问文件,您需要在构建作业期间创建一个工件,然后在测试作业期间下载它。

此外,DependsOn 不确保使用相同的代理,仅确保第二个作业在第一个作业之后运行。

您也可以将第二个作业设置为不使用 "-checkout: none" 签出代码

答案 1 :(得分:1)

<块引用>

在 Azure 管道中的另一个作业中使用从前一个作业检出的文件

如果您使用的是自托管代理默认情况下,在两个连续作业之间不会清理任何工作区。因此,您可以进行增量构建和部署,前提是已实施任务以利用它。

因此,我们可以在下一个作业中使用 - checkout: none 跳过在构建作业中签出相同的代码:

- job: Test
  displayName: Run Unit and Cypress Tests
  dependsOn: Build
  steps:
    - checkout: none
    - template: templates/angularlinttest.yml

但正如 Bo Søborg Petersen 所说,DependsOn 不能确保使用相同的代理。您需要向该特定构建代理添加用户能力,然后在构建定义中将该能力作为需求:

  pool:
    name: string
    demands: string | [ string ]

请查看此文档 How to send TFS build to a specific agent or server 了解更多信息。

在测试作业中,我们可以像 $(System.DefaultWorkingDirectory) 一样使用 predefined variables 来访问 Node 和 npm 的文件。

另一方面,如果您使用 托管代理,我们需要使用 PublishBuildArtifacts 任务将 Artifact 发布到 azure artifact,以便我们可以使用 {{1}在下一个工作中下载工件的任务:

DownloadBuildArtifacts

您可以查看Official documents and examples了解更多详情。

相关问题