#azure #azure-pipelines
#azure #azure-конвейеры
Вопрос:
Я пытаюсь создать конвейер Azure для проекта .NET Framework. Кажется, что сборка завершается без ошибок, но артефакт не сгенерирован:
Определение YAML приведено ниже, кто-нибудь может увидеть, что я здесь делаю не так?
name: 'App-Api-Dev'
trigger:
batch: true
branches:
include: [ development ]
paths:
include:
- src/App.Api/*
pool:
name: 'Default'
variables:
solution: '**/*.sln'
project: '**/Api.csproj'
buildPlatform: 'x86'
buildConfiguration: 'Release'
stages:
- stage: Build
jobs:
- job: Build
pool:
name: Default
steps:
- task: NuGetToolInstaller@1
displayName: 'Install Nuget'
- task: NuGetCommand@2
displayName: 'Nuget Restore'
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
displayName: 'Build'
inputs:
solution: '$(project)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishSymbols@2
inputs:
SearchPattern: '**/bin/**/*.pdb'
PublishSymbols: false
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifacts'
inputs:
PathtoPublish: $(build.artifactStagingDirectory)
ArtifactName: 'PublishBuildArtifact'
Ответ №1:
В соответствии с конфигурацией вашей задачи публикации артефакта сборки вы публикуете артефакты из $(build.artifactStagingDirectory). Однако этот каталог очищается перед каждой новой сборкой, и он пуст.
Типичный способ использования этой папки — опубликовать артефакты сборки вместе с задачами копирования файлов и публикации артефактов сборки. Вы можете скопировать артефакты, которые хотите опубликовать, в этот каталог перед публикацией. Например:
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Если артефакты, которые вы хотите опубликовать, готовы в некоторых каталогах, вы также можете напрямую использовать задачу опубликовать артефакт сборки. Например:
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.SourcesDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Кроме того, я предлагаю вам понять локальный путь и роль каждой переменной.
Сборка.ArtifactStagingDirectory: локальный путь агента, в который копируются любые артефакты перед отправкой в пункт назначения. Например: c:agent_work1a
Пожалуйста, найдите более подробную информацию в этом документе.
Ответ №2:
В каталог build.artifactstaging ничего не было скопировано. Попробуйте использовать более новую задачу публикации артефакта конвейера. Если я правильно расслышал, это правильная задача для использования при использовании конвейеров Azure DevOps для публикации.
- task: PublishPipelineArtifact@1
inputs:
#targetPath: '$(Pipeline.Workspace)'
#artifactName: 'PublishBuildArtifact'