Как передать входные данные 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
застегнуть его сами.
Надеюсь, мой ответ поможет решить вашу загадку:)