我希望有人能帮助我了解如何使用Chocolatey在GitHub Actions管道中安装各种软件。问题显然与PATH环境变量有关。这是YAML文件的一部分,我在其中安装ImageMagick,然后进行一个简单的调用以显示其版本作为概念证明,但找不到可执行文件,尽管相应的文件夹已经在PATH中:
- name: Install ImageMagick on Windows
if: runner.os == 'Windows'
run: |
choco install -y imagemagick.app --no-progress
Get-ChildItem -Path "${env:ProgramFiles}" | % { $_.FullName } | Select-String -Pattern "[/\]ImageMagick[^/\]*$" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8
- name: Test ImageMagick on Windows
if: runner.os == 'Windows'
run: |
cmd /c "echo %PATH%"
magick -version
请注意,refreshenv无效。
倒数第二个命令显示PATH包含ImageMagick的安装目录。
最后一个命令产生以下错误:
术语"magik"未被识别为cmdlet、函数、脚本文件或可执行程序的名称。。。
在cmd/c下运行最后一个命令或在PowerShell下显式运行安装程序不会改善结果。
我之前也检查过magik.exe是否在该目录中,当使用完整路径显式调用时,一切都正常。
当我尝试GraphicsMagick时,我遇到了同样的问题。我很确定有一个解决方案,因为我不敢相信Chocolatey在GitHub Actions for Windows镜像中不可用。请建议如何使用Chocolatey解决此特定问题,或建议另一个Windows版本的软件包管理器安装ImageMagick。
很难相信,但我意外地解决了这个问题。问题出现在检索实际版本和图像质量特定安装文件夹的行中(请参阅Get-ChildItem...
(。
最初,我用过滤正确的安装文件夹
Get-ChildItem -Path "${env:ProgramFiles}" | % { $_.FullName } | Select-String -Pattern "[/\]ImageMagick[^/\]*$"
今天,我尝试了一个简化版本:
Get-ChildItem -Path "${env:ProgramFiles}" | Where-Object {($_.Name -Like 'ImageMagick*')} | % { $_.FullName }
我从来没有猜到前一种方法会产生额外的空行。因此,添加了另一个PATH元素,即空元素。目前还不清楚它为什么会打破局面,但后一种方法很有魅力。