为什么 NuGet 恢复任务必须与构建任务位于同一个作业中?

问题描述 投票:0回答:1

Azure DevOps 中,当 NuGet Restore 任务在与 VS Build 任务相同的 job 中运行时,一切正常:

pool:
  vmImage: 'windows-latest'

jobs:
- job:
  steps:
  - task: NuGetToolInstaller@1
  - task: NuGetCommand@2
    inputs:
      restoreSolution: 'Framer/Framer.sln'

  - task: VSBuild@1
    inputs:
      solution: 'Framer/Framer.sln'
      platform: 'Any CPU'
      configuration: 'Release'

但是当它们处于 2 个不同的 job 中时,VS 构建会失败:

pool:
  vmImage: 'windows-latest'

jobs:
- job:
  steps:
  - task: NuGetToolInstaller@1
  - task: NuGetCommand@2
    inputs:
      restoreSolution: 'Framer/Framer.sln'
- job:
  steps:
  - task: VSBuild@1
    inputs:
      solution: 'Framer/Framer.sln'
      platform: 'Any CPU'
      configuration: 'Release'

有错误:

Error NETSDK1004: Assets file 'D:\a\1\s\Framer\FramerCLI\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.

就好像恢复任务没有运行一样。

问题是什么?
每个作业都在自己的“上下文”中运行吗?
但在日志中我看到两个任务的根路径

D:\a\1\s\
完全相同,也许两者之间有一些清理?
有没有办法让它们同时运行两项工作? (不过不确定这是否是一个好主意)

azure azure-devops nuget
1个回答
0
投票

从您共享的 YAML 中,我们可以看到您正在使用 Microsoft 托管的

windows-latest
代理来运行管道作业。

基于文档“Microsoft 托管代理”的声明:

每次运行管道时,您都会为管道中的每个作业获得一个新的虚拟机。虚拟机在完成一个作业后将被丢弃(这意味着作业对虚拟机文件系统所做的任何更改(例如检出代码)将无法用于下一个作业。

这意味着,每次在 Microsoft 托管的代理上运行管道作业时,每个作业都会获得一个新的虚拟机。每个作业可以在不同的虚拟机上运行。通常,作业完成后,该作业的虚拟机将被丢弃。因此,该作业在虚拟机上所做的所有更改也将被丢弃。

© www.soinside.com 2019 - 2024. All rights reserved.