Как передать входные данные dotnet azure pipelines в двоичный файл linux dotnet

Я пытаюсь реплицировать следующий конвейер Azure с помощью команды dotnet CLI:

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

Пока что я могу собрать проект, но получить из него zip-файл кажется проблематичным - передача входных данных zipAfterPublish и т. Д. Кажется невозможной, хотя есть разрозненная документация, предполагающая, что их можно передать с помощью -p:"optiona=x;optionb=y"или /p:"optiona=x;optionb=y". Я не могу найти исчерпывающей документации по этому поводу.

Вот что у меня есть - часть сборки работает, каталог $PWD/out заполнен множеством файлов, но ничего не заархивировано:

dotnet publish --configuration Release --output $PWD/out /p:"zipAfterPublish=true;publishWebProjects=true"

Я предполагаю, что это связано с тем, как правильно передавать входы ( https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops) к команде.

1 ответ

Решение

Я пытаюсь реплицировать следующий конвейер Azure с помощью команды dotnet CLI:

1. zipAfterPublishодин вариант доступен только вDotnet Publishзадача. Если вы проверите журнал задачи публикации dotnet, вы обнаружите, что она не передает никаких свойств, напримерzipAfterPublish к команде:

Поскольку таким образом можно передать только свойство msbuild: /p:xxx=xxx. ВzipAfterPublish не будет работать в командной строке, поскольку это не свойство msbuild, этот параметр не поддерживается в dotnet cli, доступно только в Azure Devops Dotnet Publish task.

2. Обычно, если мы хотим опубликовать один основной веб-проект.net и заархивировать его после публикации с помощью локального dotnet cli, мы можем использовать такую ​​команду, как:

dotnet publish xx.csproj /nologo /p:PublishProfile=xxx /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /maxcpucount:1 /p:platform=xxx /p:configuration=xxx /p:DesktopBuildPackageLocation=SomePath\xxx.zip

Или

dotnet build xxx.sln /nologo /p:PublishProfile=Release /p:PackageLocation="C:\Some\Path\package" /p:OutDir="C:\Some\Path\out" /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /maxcpucount:1 /p:platform="Any CPU" /p:configuration="Release" /p:DesktopBuildPackageLocation="C:\Some\Path\package\package.zip"

Что описано в этом выпуске.

Вышеупомянутые команды могут работать в Windows для создания папки xx.zip.

Однако:

Похоже, вы находитесь в среде Linux, пожалуйста, проверьте этот документ. Если вы хотите заархивировать папку публикации (создать пакет),dotnet build/publish позвоню msdeploy.exeдля выполнения этой работы, но поскольку MSDeploy не поддерживает кроссплатформенность, следующие параметры MSDeploy поддерживаются только в Windows. Таким образом, команда dotnet cli не поддерживается для создания zip-архива после публикации в среде Linux... То, что вы хотите, пока не поддерживается в Linux.

Возможное решение:

Поскольку мы можем использовать dotnet publishчтобы опубликовать проект в одной папке ( папка работает кроссплатформенно), мы можем вызвать другую команду zip послеdotnet publish застегнуть его сами.

Надеюсь, мой ответ поможет решить вашу загадку:)

Другие вопросы по тегам