Настройте azure-pipelines.yml "Каталог '/ home / vsts / work / 1 / a' пуст." с ASP.NET Core - PullRequest
2 голосов
/ 22 апреля 2019

Мне серьезно нужна помощь для создания моего файла сборки yml, потому что я нигде не могу найти хорошего учебника, примера или другого короля помощи. Я всегда получаю похожую ошибку: смотрите предупреждение, кажется, мой сборочный артефакт всегда пуст. Все шаги успешны, но я не могу развернуть, потому что мои файлы не найдены. Stupid.

##[section]Starting: PublishBuildArtifacts
==============================================================================
Task         : Publish Build Artifacts
Description  : Publish build artifacts to Azure Pipelines/TFS or a file share
Version      : 1.142.2
Author       : Microsoft Corporation
Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=708390)
==============================================================================
##[warning]Directory '/home/vsts/work/1/a' is empty. Nothing will be added to build artifact 'drop'.
##[section]Finishing: PublishBuildArtifacts

Вот мое определение конвейера

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'Ubuntu-16.04'

variables:
  buildConfiguration: 'Release'

steps:
# - script: dotnet build --configuration $(buildConfiguration)
#   displayName: 'dotnet build $(buildConfiguration)'

- task: DotNetCoreInstaller@0
  inputs:
    version: '2.2.202' # replace this value with the version that you need for your project

- script: dotnet restore

- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    command: build
    projects: '**/*.csproj'
    arguments: '--configuration Release' # Update this to match your need

- task: PublishBuildArtifacts@1
  inputs:
    ArtifactName: 'drop'

Обратите внимание на 2 строки, которые я прокомментировал

# - script: dotnet build --configuration $(buildConfiguration)
#   displayName: 'dotnet build $(buildConfiguration)'

фактически являются частью скрипта по умолчанию. Я не использую скрипт по умолчанию. Я следую учебному пособию https://docs.microsoft.com/en-us/azure/devops/pipelines/languages/dotnet-core?view=azure-devops

Также, почему я не могу использовать шаблоны, доступные для других моих проектов. Это потому, что я использую репозиторий DevOps или мой проект имеет определенные настройки? У меня есть другой проект, которым я могу управлять сборкой, а затем развертыванием с помощью графического шаблона и задачи. Намного проще.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Да, помощь по трубопроводам yaml в данный момент выглядит немного разбросанной и тонкой на земле.

Поскольку ваш проект AspNetCore , я думаю, что вам не хватает задачи dotnet publish после сборки и до PublishArtifacts:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

Но вот некоторые шаги, которые я предпринял, пытаясь разрешить проблемы с конвейерами netcore yaml:

  1. Вы уже просмотрели примеры задач и фрагменты руководства на Создание, тестирование и развертывание приложений .NET Core ?

  2. Вы заметили, что можете щелкнуть журнал сборки, чтобы увидеть подробный вывод каждого шага в вашем конвейере?

  3. Вы заметили, что задача DotNetCoreCLI@2 эквивалентна запуску dotnet <command> на вашем рабочем столе, так что вы можете в некоторой степени запускать / отлаживать эти задачи локально?

  4. Я нашел Предопределенные переменные дал некоторые полезные подсказки. Например, он говорит нам, что путь \agent\_work\1\a, вероятно, является переменной $(Build.ArtifactStagingDirectory), что помогло мне имитировать конвейер на моей локальной машине.

Логически, ваше сообщение об ошибке говорит нам, что $(Build.ArtifactStagingDirectory) пусто, когда конвейер достигает последнего шага. Страница примера dotnetcore подсказывает мне, что publish - это задача, заполняющая ее для веб-проекта. Для всего остального, я думаю, достаточно просто задания dotnet build.

0 голосов
/ 09 июля 2019

Просто замените в переменных:

**/Dockerfile

... по

$(Build.SourcesDirectory)/Dockerfile

Это работает для меня.

...