VSTS-如何编写一个阶段定义的构建定义,这些阶段专注于他们自己的相同解决方案的专有项目?

时间:2018-06-30 08:57:20

标签: azure-devops yaml azure-pipelines azure-pipelines-build-task

我有一个具有.netcore2.1 webapi和xamarin.iOS应用程序的解决方案。
这些项目互不依赖(因为它们引用共享项目并不完全正确,但这与问题无关)。

我的vsts构建定义分为两个阶段:

  • 一个用于在vsts托管VS2017队列上构建webapi(称为azureAndBackend)
  • 另一种在vsts托管的macOS预览队列上构建应用程序(称为iOS)
- phase: azureAndBackend
  displayName: Azure and backend
  queue:
    name: Hosted VS2017
...
- phase: iOS
  displayName: iOS 
  dependsOn: azureAndBackend
  queue:
    name: Hosted macOS Preview

azureAndBackend阶段很好。 但是ios阶段无法完成dotnet restore任务:

- task: NuGetCommand@2
  displayName: NuGet restore
  inputs:
      restoreSolution: '**/*.sln'

实际上,它可以还原整个解决方案的软件包(包括webapi),而Hosted macOS预览队列上尚未安装.netcore 2.1 sdk(请参见spec页面)。

所以我尝试了以下操作:

- task: NuGetCommand@2
  displayName: NuGet restore
  inputs:
      restoreSolution: '**/*.iOS/*.csproj'

然后恢复步骤就可以了。 但是现在构建步骤失败了:

- task: XamariniOS@2
    displayName: 'Building iOS'
    inputs:
        solutionFile: '**/*.sln'
        configuration: 'iOS'

错误是:

'/Users/vsts/agent/2.134.2/work/1/s/MyApp.Services.Interfaces/obj/project.assets.json' not found. Run a NuGet package restore to generate this file.

请注意,iOS配置是Release配置的副本,但是我没有在其中构建webapi项目。

问题是,如何在解决方案中没有webapi项目的情况下编写构建定义?

更新

我认为一种解决方法是创建3个解决方案

  • 我已经拥有并继续发展的那个
  • 一个仅适用于iOS项目
  • 仅与webapi项目一起使用

然后,各个阶段将建立自己的解决方案。 不过,这不是问题的“真实”答案。

1 个答案:

答案 0 :(得分:0)

对于所有任务,请确保您指向特定的解决方案文件和解决方案目录。您的**/*.sln将在“源”文件夹中构建所有解决方案。