【问题标题】:How to pass azure pipelines dotnet inputs to the linux dotnet binary如何将 azure 管道 dotnet 输入传递给 linux dotnet 二进制文件
【发布时间】:2020-03-23 12:48:15
【问题描述】:

我正在尝试使用 CLI dotnet 命令复制以下 Azure 管道:

- 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) 正确传递给命令。

【问题讨论】:

  • 我知道这个stackoverflow.com/questions/51485427/… - 它不能解决问题
  • 操作系统是 Linux,如果不清楚,请见谅。
  • 嗨 Jepper,这个问题有什么更新吗?据我所知,当操作系统在 Linux 中时,dotnet 命令无法直接生成发布包。也许您需要考虑其他方向...

标签: linux azure azure-devops dotnetcorecli


【解决方案1】:

我正在尝试使用 CLI 复制以下 Azure 管道 dotnet 命令:

1.zipAfterPublishDotnet Publish 任务中可用的一个选项。如果你查看 dotnet publish 任务的日志,你会发现它没有将任何像 zipAfterPublish 这样的属性传递给命令:

由于只能通过这种方式传递 msbuild 属性:/p:xxx=xxxzipAfterPublish 在命令行中不起作用,因为它不是 msbuild 属性,dotnet cli 不支持该选项,仅在 Azure Devops Dotnet Publish task 中可用。

2.通常如果我们想发布一个.net core web项目并在本地使用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"

this issue 中对此进行了描述。

以上命令可以在windows下生成xx.zip文件夹。

但是:

您好像是在linux环境下,请查看this document。如果你想压缩发布文件夹(生成一个包),dotnet build/publish 将调用msdeploy.exe 来完成这项工作,但由于MSDeploy 缺乏跨平台支持,以下 MSDeploy 选项仅在 Windows 上受支持。所以 dotnet cli 命令不支持在 linux 环境下发布后生成 zip ...... Linux 暂时不支持你想要的。

可能的解决方法:

由于我们可以使用dotnet publish将项目发布到一个文件夹(Folder works cross-platform),我们可以在dotnet publish之后调用另一个zip命令来自己压缩它。

希望我的回答有助于解决你的困惑:)

【讨论】:

  • 好答案,现在我明白了。我最终弄清楚了如何注入在 Linux 上运行的 Azure 构建代理所需的 PATH 环境变量(通过添加到服务启动时由 systemd 运行的 runsvc.sh),以便它可以看到完成构建所需的二进制文件。避免使用 Linux 本机 dotnet 二进制文件,使我可以按原样使用原始问题中的管道。仍在 Linux 上。
猜你喜欢
  • 2021-07-21
  • 1970-01-01
  • 2019-03-15
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多