Windows 上的 github 运行程序在 PowerShell 上找不到可执行文件
Posted
技术标签:
【中文标题】Windows 上的 github 运行程序在 PowerShell 上找不到可执行文件【英文标题】:github runner on Windows not finding executables on PowerShell 【发布时间】:2021-08-08 03:54:44 【问题描述】:我正在尝试使用自托管的 Windows-VM 运行 west 进行 repo 管理,使用 python 运行一些脚本,并使用 git 推回 repo。
工作是使用 python 从repo-A
生成文件作为工件以签入repo-B
。我不得不使用 Windows,因为文件生成工具只能在 Windows 上运行。
我有一个自托管的构建代理设置,并且能够在其上运行 github 操作。
在 VM 端,这些是相关命令的路径(表明它们已正确添加到 $PATH)
PS C:\TouchGFXProjects\wallSwitch-gui-hesPrototype-480-272> gcm west; gcm tgfx.exe; gcm python; gcm git
CommandType Name Version Source
----------- ---- ------- ------
Application west.exe 0.0.0.0 C:\Users\tgfx\AppData\Local\Programs\Python\Python39\Scripts\west.exe
Application tgfx.exe 4.16.1.0 C:\TouchGFX\4.16.1\designer\tgfx.exe
Application python.exe 3.9.515... C:\Users\tgfx\AppData\Local\Programs\Python\Python39\python.exe
Application git.exe 2.31.1.1 C:\Program Files\Git\cmd\git.exe
VM 的执行策略设置为:
PS C:\Windows\system32> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Bypass
从虚拟机本身的 powerShell 执行时,所有脚本和执行步骤都运行良好。
但是当我调用 github 运行器时,行为表明它不知道可执行文件在哪里,尽管它在 $PATH
中是已知的(请参阅下面的调试输出)。
github 运行脚本:
name: CI
on:
workflow_dispatch:
pull_request:
branches:
- master
- 'feature/**'
jobs:
# Test-path access using powerShell shell
test-path-powerShell:
runs-on: [self-hosted, Windows, X64, touchGFX]
steps:
- name: Display the path
run: echo $env:PATH
shell: powershell
continue-on-error: true
- name: Check that we know where python is
run: gcm python
shell: powershell
continue-on-error: true
- name: Test calling "python.exe --version" via powershell
run: python.exe --version
shell: powershell
continue-on-error: true
- name: Test calling "python.exe --version" via powershell (abs path)
run: C:\Users\tgfx\AppData\Local\Programs\Python\Python39\python.exe --version
shell: powershell
continue-on-error: true
在 github runner 上运行时, echo $env:PATH 命令显示:
Run echo $env:PATH
C:\TouchGFX\4.16.1\designer;C:\Users\tgfx\AppData\Local\Programs\Python\Python39\;C:\Users\tgfx\AppData\Local\Programs\Python\Python39\Scripts\;C:\Users\tgfx\AppData\Local\Programs\Python\Python39\Lib\site-packages;C:\Program Files\Git\cmd;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Microsoft\WindowsApps
这意味着它应该有 python.exe 的位置
但是,所有尝试访问它的命令(即使使用绝对路径)都会返回如下错误:
Run gcm python
gcm : The term 'python' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\actions-runner\_work\_temp\c19697cd-d5e0-4102-a7b6-5f357f82aa91.ps1:2 char:1
+ gcm python
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (python:String) [Get-Command], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand
我还尝试将 python 附加到 $GITHUB_PATH :
echo "C:\Users\tgfx\AppData\Local\Programs\Python\Python39" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
但这只是扩展了 echo $env:PATH 的输出,并且在执行时仍然会导致相同的错误。
我错过了什么?
感谢大家的时间。
【问题讨论】:
【参考方案1】:在我的设置中,缺少的是Github Action Runner Service
的访问权限。将运行器安装为服务时使用的默认 NT AUTHORITY\NETWORK SERVICE
不起作用。我测试了将服务的权限更改为Local Service
和Local System
,发现Local System
有效。
修改权限需要重启服务才能生效。
在 github runner 工作流程中,您可以使用 powershell 中的 whoami
命令验证设置。
【讨论】:
以上是关于Windows 上的 github 运行程序在 PowerShell 上找不到可执行文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上的 GitHub Actions 中缓存依赖项
MacOS 和 Windows 上的 Python 多处理行为