В конвейере Azure не создан артефакт

#azure #azure-pipelines

#azure #azure-конвейеры

Вопрос:

Я пытаюсь создать конвейер Azure для проекта .NET Framework. Кажется, что сборка завершается без ошибок, но артефакт не сгенерирован:

Конвейеры Azure

Azure pipelines2

Определение 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'