Было бы действительно важно, как выглядит цикл управления и выпуска. Пуристи c может каждый раз все заново развертывать. Реалистичным c способом было бы сгруппировать конвейеры развертывания вместе, когда это имеет смысл.
С точки зрения того, что делать в «способе YAML». Будет смотреть на использование шаблонов YAML
Параметр шаблона будет, по крайней мере, по каталогу проекта для сборки. Это пример шаблона. net Core, но он даст вам представление о мыслительном процессе: например, этот YAML-файл будет называться как-то вроде build-corewebapp.yml
parameters:
SolutionPath: ''
BuildConfiguration: 'Release'
projectName: ''
DependsOn: []
publish: 'false'
jobs:
- job: Build_${{ parameters.projectName }}
dependsOn: ${{ parameters.DependsOn }}
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet restore'
inputs:
command: 'restore'
projects: '$(Build.SourcesDirectory)/${{ parameters.SolutionPath }}/${{ parameters.projectName }}**/*.csproj'
- task: DotNetCoreCLI@2
displayName: 'dotnet build'
inputs:
projects: '$(Build.SourcesDirectory)/${{ parameters.SolutionPath }}/${{ parameters.projectName }}**/*.csproj'
arguments: '--configuration ${{ parameters.BuildConfiguration }}'
- task: DotNetCoreCLI@2
displayName: 'dotnet test'
inputs:
command: test
projects: '$(Build.SourcesDirectory)/${{ parameters.SolutionPath }}/${{ parameters.projectName }}.Tests/*.csproj'
arguments: '--configuration ${{ parameters.BuildConfiguration }} --collect "Code coverage" '
- job: Publish_${{ parameters.projectName }}
dependsOn: Build_${{ parameters.projectName }}
condition: and(succeeded(),eq( ${{ parameters.publish }}, 'true'))
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet publish'
inputs:
command: publish
publishWebProjects: false
projects: '$(Build.SourcesDirectory)/${{ parameters.SolutionPath }}/${{ parameters.projectName }}**/*.csproj'
arguments: '--configuration ${{ parameters.BuildConfiguration }} --output $(build.artifactstagingdirectory)'
zipAfterPublish: True
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
Шаблон будет вызываться чем-то похожим на:
jobs:
- template: build-corewebapp.yml
parameters:
projectName: ${{ variables.appProjectName }}
solutionPath: $(solutionPath)
publish: 'true'
Для максимального повторного использования я бы рекомендовал любой шаблон сборки существовать в отдельном репозитории, чтобы его можно было использовать в других репозиториях . Это будет настроено в вашем конвейере, ссылаясь на репо, подобное:
resources:
repositories:
- repository: repositoryTemplate
type: git
name: ProjectName/YAMLTEMPLATERepoName
Профессионал в использовании шаблонов затем обновляет версию задачи или изменение стратегии сборки / развертывания может быть обновлено и ссылаться в одном месте.