我在 Azure DevOps 中创建了一个管道,用于构建 Angular 应用程序并对其运行一些测试。我将管道分为两个工作,构建和测试。构建作业成功完成。测试作业再次从 Git 检出代码,即使构建作业已经这样做了。测试作业需要在构建作业中创建的文件才能像 npm 包一样成功运行。
这是我的 YAML 文件:
%%b
我的代理池是在阶段级别声明的,因此两个作业都将使用相同的代理。我还向测试作业添加了一个dependsOn,以确保使用相同的代理。查了日志,其实用的是同一个agent。
如何让测试作业使用在构建作业中创建的文件而不再次检出代码?如果有帮助,我正在使用 Angular 11 和 Azure DevOps Server 2020。
答案 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了解更多详情。