首页 > 解决方案 > 一个阶段的输出不可用于后续阶段

问题描述

我有这两个阶段

stages:
- stage: PrepareBuildTools
  jobs:
  - job:
    steps:
    - task: NuGetToolInstaller@1
    - task: NuGetCommand@2
      inputs:
       restoreSolution: '$(solution)'
 - stage: Build
   jobs:
   - job:
     steps:
     - task: DotNetCoreCLI@2
       displayName: 'Initialize EntityFrameworkCore'
       inputs:
       command: custom
       custom: tool
       arguments: 'install --global dotnet-ef'
     - task: DotNetCoreCLI@2
       displayName: 'Create migration'
       inputs:
         command: custom
         custom: ef
         arguments: 'migrations script -i -o $(System.DefaultWorkingDirectory)\migration.sql --project $(dbProject) -s $(startUpProject)'
     - task: VSBuild@1
       displayName: Build solution
       inputs:
         solution: '$(solution)'
         msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
         platform: '$(buildPlatform)'
         configuration: '$(buildConfiguration)'
     - task: FileTransform@1
       displayName: Transform appSettings.json
       inputs:
        folderPath: '$(build.artifactStagingDirectory)\WebApp.zip'
        fileType: 'json'
        targetFiles: '**/appsettings.json'

如您所见,该Build solution任务构建解决方案并WebApp.zipD:\a\1\a\

问题在于,在后续阶段,ZIP 文件不存在,这让我相信这些阶段都在自己的环境中运行(不同的虚拟机?)。

有什么方法可以确保每个阶段都在相同的环境中运行?我真的不需要它们在不同的阶段运行,我主要想使用阶段,这样我就可以在最终的“部署”阶段之前进行批准。

我尝试在我的 YAML 定义文件的根目录中定义一个池,如下所示:

pool:
 vmImage: 'windows-latest'

然后假设所有阶段都将在那个阶段运行,但不是。

标签: azureazure-devopsyaml

解决方案


我必须添加更多任务才能完成这项工作

- task: CopyFiles@2
  displayName: Copy build output
  inputs:
    contents: '$(build.artifactStagingDirectory)\WebApp.zip'
    targetFolder: '$(Build.StagingDirectory)'
- task: CopyFiles@2
  displayName: Copy migration file
  inputs:
   contents: '$(System.DefaultWorkingDirectory)\migration.sql'
   targetFolder: '$(Build.StagingDirectory)'
- task: PublishBuildArtifacts@1
  inputs:
   PathtoPublish: '$(Build.StagingDirectory)'
   ArtifactName: 'buildoutput'
   publishLocation: 'Container'

在我需要上述文件的阶段,只需下载工件

- task: DownloadBuildArtifacts@0
  inputs:
   artifactName: 'buildoutput'
   buildType: 'current'
   downloadType: 'single'
   downloadPath: '$(System.ArtifactsDirectory)'

然后我可以这样使用它们:$(System.ArtifactsDirectory)\buildoutput\WebApp.zip


推荐阅读