在 Azure Devops Build Step 中使用 SolutionPackager 打包 Dynamics 365 解决方案时找不到所需的文件错误

Cannot find required file error when using SolutionPackager to pack Dynamics 365 solution in Azure Devops Build Step

我正在尝试使用 Azure DevOps 管道 'pack'(使用 Dynamics 365 CoreTools/SolutionPackager.exe)来自 Azure Repo 的解决方案来创建 zip 文件作为工件。

我的构建管道有以下步骤。 第 1 步:安装解决方案打包程序。 这是一个 powershell 脚本,它将解决方案打包器安装到构建代理上。对于那些试图做我正在做的事情的人,这里是代码。

$sourceNugetExe = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
$targetNugetExe = ".\nuget.exe"
Remove-Item .\Tools -Force -Recurse -ErrorAction Ignore
Invoke-WebRequest $sourceNugetExe -OutFile $targetNugetExe
Set-Alias nuget $targetNugetExe -Scope Global -Verbose

./nuget install  Microsoft.CrmSdk.CoreTools -O .\Tools
md .\Tools\CoreTools
$coreToolsFolder = Get-ChildItem ./Tools | Where-Object {$_.Name -match 'Microsoft.CrmSdk.CoreTools.'}
move .\Tools$coreToolsFolder\content\bin\coretools\*.* .\Tools\CoreTools
Remove-Item .\Tools$coreToolsFolder -Force -Recurse

Remove-Item nuget.exe

第 2 步:创建解决方案。 这也是一个powershell脚本,如下所示。

Write-Host $Env:BUILD_SOURCESDIRECTORY

cmd.exe /c "$Env:BUILD_SOURCESDIRECTORY\Tools\CoreTools\SolutionPackager.exe /action:Pack /zipfile:$Env:BUILD_SOURCESDIRECTORY\Releases\Release1\PhoneBook.zip /folder:$Env:BUILD_SOURCESDIRECTORY\DeploymentAutomation\PhoneBookSolutionExtract /packageType:Both /log:$Env:BUILD_SOURCESDIRECTORY\Releases\Release1\PBSolutionPackagerLog-Packer.txt"

第一步运行成功。但是,步骤 2 失败并出现此错误。

===========================================

2020-05-26T15:28:59.8552200Z ##[section]Starting: Create Solutions For Release
2020-05-26T15:28:59.8797381Z ==============================================================================
2020-05-26T15:28:59.8827561Z Task         : PowerShell
2020-05-26T15:28:59.8835720Z Description  : Run a PowerShell script on Linux, macOS, or Windows
2020-05-26T15:28:59.8843310Z Version      : 2.169.0
2020-05-26T15:28:59.8849328Z Author       : Microsoft Corporation
2020-05-26T15:28:59.8860104Z Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell
2020-05-26T15:28:59.8893584Z ==============================================================================
2020-05-26T15:29:00.8519134Z Generating script.
2020-05-26T15:29:00.8970243Z ========================== Starting Command Output ===========================
2020-05-26T15:29:00.9225660Z ##[command]"C:\windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'd:\a\_temp\d09c6a36-7a76-47b0-92eb-9e6107517075.ps1'"
2020-05-26T15:29:01.2594475Z d:\a\s
2020-05-26T15:29:01.7233931Z SolutionPackger CRM Solution Packaging Tool [Version 9.1.0.45]
2020-05-26T15:29:01.7243873Z © 2017 Microsoft Corporation.  All rights reserved
2020-05-26T15:29:01.7249166Z 
2020-05-26T15:29:06.5096584Z 
2020-05-26T15:29:06.5110471Z Packing d:\a\s\DeploymentAutomation\PhoneBookSolutionExtract to d:\a\s\Releases\Release1\PhoneBook.zip and d:\a\s\Releases\Release1\PhoneBook_managed.zip
2020-05-26T15:29:06.5120793Z 
2020-05-26T15:29:06.6894038Z Cannot find required file 'd:\a\s\DeploymentAutomation\PhoneBookSolutionExtract\Other\Customizations.xml'.
2020-05-26T15:29:06.6906958Z See log file 'd:\a\s\Releases\Release1\PBSolutionPackagerLog-Packer.txt' for details.
2020-05-26T15:29:06.9902672Z SolutionPackager: Exception thrown: Microsoft.Crm.Tools.SolutionPackager.DiskReaderException: Cannot find required file 'd:\a\s\DeploymentAutomation\PhoneBookSolutionExtract\Other\Customizations.xml'.
2020-05-26T15:29:06.9924366Z    at Microsoft.Crm.Tools.SolutionPackager.DiskReader.Load()
2020-05-26T15:29:06.9938677Z    at Microsoft.Crm.Tools.SolutionPackager.SolutionPackager.Run(IPackageReader reader, IPackageWriter writer)
2020-05-26T15:29:06.9950963Z    at Microsoft.Crm.Tools.SolutionPackager.SolutionPackager.Run()
2020-05-26T15:29:06.9962227Z    at Microsoft.Crm.Tools.SolutionPackager.Program.Main(String[] args), returning error code '1'
2020-05-26T15:29:07.2240607Z ##[error]PowerShell exited with code '1'.
2020-05-26T15:29:07.2727244Z ##[section]Finishing: Create Solutions For Release

===========================================

我至少检查了 1000 次,文件 Customizations.xml 确实存在于指定位置。这可能是我遗漏的一些非常愚蠢的事情,因为这是我第一次尝试使用 Azure DevOps Pipelines 自动化 Dynamics 365 部署,因此非常感谢任何有助于理解此错误的帮助。提前致谢。

我会加入并尽力提供帮助。我没有处理太多 SolutionPackager.exe 但在 this tutorial 之后我能够提取然后打包解决方案。您可以在本地进行打包吗?

假设您 运行 在本地执行提取命令,然后将所有内容提交到您的存储库。您如何确定 Customizations.xml 实际上已签入存储库并驻留在源目录中?

您可以去仔细检查存储库本身,或者您也可以使用此 yaml 片段打印出目录结构树以进行完整性检查。

- task: PowerShell@2
  displayName: tree $(Build.SourcesDirectory)
  inputs:
    targetType: 'inline'
    script: 'tree /F'
    pwsh: true
    workingDirectory: '$(Build.SourcesDirectory)'

Cannot find required file ......Other\Customizations.xml

根据报错信息,此问题与/folder参数有关。

我测试了类似的SolutionPackager.exe命令。如果 Customizations.xml 存在,powershell 任务将成功。

所以你需要确保文件夹路径是正确的。

一方面,您可以按照 Eric Smith 的建议导出文件结构。那你就可以修改路径了。

另一方面,您可以尝试在步骤 2 之前添加一个 "Copy files" 任务。

请使用...到select文件夹

如果文件夹中存在文件,任务日志将显示信息。

如果不存在,这些文件将被复制到指定位置。

顺便说一句,请确保您已 select 将 正确的分支 编辑到 运行 构建

希望对您有所帮助。