tec*_*hno 2 azure devops azure-devops angular8
我有一个包含以下内容的解决方案
几个Asp.net项目(微服务和网关)
.net Core + Angular 8(前端)
当我在 Visual Studio 中点击构建按钮时,每个项目都被构建。我创建了一个 repo 并上传了解决方案。现在我试图弄清楚如何设置管道来构建每个微服务并将它们部署到单个 Azure Web 应用程序。
我有以下用于 Angular 项目的管道。我应该像这样定义单独的任务吗?有没有办法在这里复制visual studio build?
# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: Npm@1
inputs:
command: install
workingDir: 'd:\a\1\s\Ok.Web\ClientApp'
- task: Npm@1
inputs:
command: custom
workingDir: 'd:\a\1\s\Ok.Web\ClientApp'
customCommand: run build
- task: CopyFiles@2
inputs:
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
Run Code Online (Sandbox Code Playgroud)
您可以在此处应用以下两种方法之一:
在这两件事中,您都可以使用模板来避免重复自己。因此,您将定义构建 .NET 项目的常见任务,然后在管道中使用它们。我最近发表了关于此的博客文章,但也请查看文档。
要实现这一点,您需要先定义一个包含常见步骤的 yaml 文件。例如:
parameters:
- name: buildConfiguration # name of the parameter; required
default: 'Release'
- name: projectFolder
default: ' '
steps:
- task: DotNetCoreCLI@2
displayName: Restore nuget packages
inputs:
command: restore
projects: '*.csproj'
workingDirectory: '${{ parameters.projectFolder}}'
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '${{ parameters.projectFolder}}'
arguments: '--configuration ${{ parameters.buildConfiguration }}'
# You just added coverlet.collector to use 'XPlat Code Coverage'
- task: DotNetCoreCLI@2
displayName: Test
inputs:
command: test
projects: '*Tests/*.csproj'
arguments: '--configuration ${{ parameters.buildConfiguration }} --collect:"XPlat Code Coverage" -- RunConfiguration.DisableAppDomain=true'
workingDirectory: '${{ parameters.projectFolder}}'
- task: DotNetCoreCLI@2
inputs:
command: custom
custom: tool
arguments: install --tool-path . dotnet-reportgenerator-globaltool
displayName: Install ReportGenerator tool
- script: ./reportgenerator -reports:$(Agent.TempDirectory)/**/coverage.cobertura.xml -targetdir:${{ parameters.projectFolder}}/coverlet/reports -reporttypes:"Cobertura"
displayName: Create reports
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: ${{ parameters.projectFolder}}/coverlet/reports/Cobertura.xml
Run Code Online (Sandbox Code Playgroud)
然后从你的主构建文件中调用这个文件:
variables:
buildConfiguration: 'Release'
projectFolder: 'path to your project'
steps:
- template: build-and-test.yaml
parameters:
buildConfiguration: $(buildConfiguration)
- script: echo Some steps to create artifacts!
displayName: 'Run a one-line script'
Run Code Online (Sandbox Code Playgroud)
在方法 1 中,即使您只更改一个项目,您也将构建所有项目,因此我建议您使用方法 2。为此,您可以定义多个管道(每个项目一个)并将触发器限制为特定文件夹中的更改。请看这里。
这里有一个示例,如何将触发器限制为 master 分支的特定文件夹:
trigger:
branches:
include:
- master
paths:
include:
- gated-checkin-with-template/*
exclude:
- gated-checkin-with-template/azure-pipelines-gc.yml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6555 次 |
| 最近记录: |