Как передать azure конвейеров do tnet входных данных в двоичный файл linux do tnet - PullRequest
0 голосов
/ 23 марта 2020

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

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

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

Это то, что у меня есть - сборочная часть работает, каталог $ 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 Ответ

1 голос
/ 24 марта 2020

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

1. zipAfterPublish - это одна опция, доступная * только 1006 * в Dotnet Publish задании. Если вы проверите журнал задачи do tnet publi sh, вы обнаружите, что она не передает никакое свойство, например zipAfterPublish, в команду:

enter image description here

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

2. Обычно, если мы хотим опубликовать sh one. net основной веб-проект и заархивируйте его после публикации sh, используя do tnet 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 среде, пожалуйста, проверьте этот документ . Если вы хотите сжать папку publi sh (сгенерировать пакет), dotnet build/publish вызовет msdeploy.exe, чтобы выполнить эту работу, но, поскольку MSDeploy не поддерживает кроссплатформенную поддержку, поддерживаются только следующие опции MSDeploy на Windows. Поэтому команда tnet cli не поддерживается для генерации zip после публикации sh в linux среде ... То, что вы хотите, пока не поддерживается в Linux.

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

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

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

...