本地使用nektos/act运行GitHub Actions时pwsh shell执行报错排查
nektos/act 执行pwsh步骤报可执行文件不存在故障排查
故障表现
act可正常执行普通工作流,当步骤指定shell: pwsh时抛出如下错误:
🐳 docker exec cmd=[pwsh -command . /var/run/act/workflow/1.ps1] user= workdir=
| OCI runtime exec failed: exec failed: unable to start container process: exec: "pwsh": executable file not found in $PATH: unknown
[test-workflow/test_workflow_job] ❌ Failure - RUN PWSH TEST
复现用的工作流配置如下:
name: test-workflow on: push: jobs: test_workflow_job: runs-on: ubuntu-latest steps: - name: CHECKOUT THIS REPOSITORY uses: actions/checkout@v2 - name: RUN PWSH TEST shell: pwsh run: Write-Host "test"
根因说明
该问题不是程序未修复的bug:
- act默认拉取的精简版(slim)运行镜像为了控制体积,没有预装PowerShell环境,和GitHub官方托管的ubuntu-latest runner默认预装全量工具的情况不同。
- 此前相关代码修复仅解决了act拼接pwsh执行命令的逻辑问题,不会自动给运行镜像补充缺失的依赖组件。
排查解决步骤
- 优先替换全量运行镜像测试:执行act命令时追加参数
-P ubuntu-latest=catthehacker/ubuntu:act-latest,该镜像预装了GitHub runner默认带的所有常用组件(包括pwsh),替换后可直接运行pwsh步骤。 - 若需要继续使用精简镜像,在pwsh执行步骤前新增独立步骤,适配当前Ubuntu镜像版本安装PowerShell组件后再执行后续pwsh命令。
- 调整配置后重新执行工作流,验证
Write-Host "test"是否正常输出即可。
额外注意
使用act默认精简镜像时,除pwsh外,docker、dotnet、gcloud等官方runner默认预装的工具都可能出现「可执行文件找不到」的报错,遇到同类报错优先检查当前使用的镜像是否预装对应依赖,不要直接判定为程序bug。
内容的提问来源于stack exchange,提问作者jschleicher
相关产品推荐
相关产品推荐

