Azure Pipelines 第二个作业找不到第一个作业的结果

ibe*_*dev 3 .net-core azure-pipelines

我正在开始使用 azure-pipelines.yml

我想在同一阶段有两份工作。一个用于构建解决方案,另一个用于运行单元测试。

问题是第二个作业执行了脚本步骤,但它找不到Release前一个作业应创建的文件夹:

trigger:
- master

pool:
  vmImage: 'ubuntu-18.04'

stages:
- stage: CI
  jobs:
  - job: Build
    steps:
    - task: NuGetAuthenticate@0
    - script: dotnet restore --no-cache --force
    - script: dotnet build --configuration Release --no-restore
  - job: UnitTests
    dependsOn: Build
    steps:
    - script: dotnet vstest test/*UnitTests/bin/Release/**/*UnitTests.dll
Run Code Online (Sandbox Code Playgroud)

但是,如果我在同一个作业中添加所有步骤,它就会起作用:

trigger:
- master

pool:
  vmImage: 'ubuntu-18.04'

stages:
- stage: CI
  jobs:
  - job: Build
    steps:
    - task: NuGetAuthenticate@0
    - script: dotnet restore --no-cache --force
    - script: dotnet build --configuration Release --no-restore
    - script: dotnet vstest test/*UnitTests/bin/Release/**/*UnitTests.dll
Run Code Online (Sandbox Code Playgroud)

我找不到关于为什么依赖作业无法在文件系统上找到前一个作业生成的文件夹的答案。任何能够澄清这一点的解释或链接将不胜感激。

我过去使用过 gitlab,但我不记得有类似的行为,尽管我不知道它是否具有与步骤不同的工作概念。

小智 6

您缺少的关键要素是作业在独立代理(单独的计算机)上运行并且没有任何类型的共享文件系统。

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/phases?view=azure-devops&tabs=yaml

您希望在一个作业中创建的任何文件在依赖作业中可用,必须显式暂存(在作业“A”中),然后显式下载(在作业“B”中)。

参见发布:

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/publish-build-artifacts?view=azure-devops

并下载:

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/download-build-artifacts?view=azure-devops