windows - 无法在本地 Windows gitlab runner 中执行 bash 脚本
问题描述
语境
我想在 CI 的构建阶段运行一个 bash 脚本。
到目前为止,MacOS 构建工作正常,Unix 正在进行中,但我无法在 Windows 构建阶段执行脚本。
赛跑者
我们在配置了 WSL 的 Windows 10 主页上运行本地 gitlab 运行程序,安装并运行 Bash for Windows: Bash 在 Windows powershell 中执行
Gitlab CI
这是一个突出问题的小例子。
gitlab-ci.yml
stages:
- test
- build
build-test-win:
stage: build
tags:
- runner-qt-windows
script:
- ./test.sh
测试.sh
#!/bin/bash
echo "test OK"
工作
Running with gitlab-runner 13.4.1 (e95f89a0)
on runner qt on windows 8KwtBu6r
Resolving secrets 00:00
Preparing the "shell" executor 00:00
Using Shell executor...
Preparing environment 00:01
Running on DESKTOP-5LUC498...
Getting source from Git repository
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in C:/Gitlab-Ci/builds/8KwtBu6r/0/<company>/projects/player-desktop/.git/
Checking out f8de4545 as 70-pld-demo-player-ecran-player...
Removing .qmake.stash
Removing Makefile
Removing app/
Removing business/
Removing <company>player/
git-lfs/2.11.0 (GitHub; windows amd64; go 1.14.2; git 48b28d97)
Skipping Git submodules setup
Executing "step_script" stage of the job script 00:02
$ ./test.sh
Cleaning up file based variables 00:01
Job succeeded
问题
如您所见,回显消息“test OK”在作业输出中不可见。似乎没有执行任何操作,但没有显示错误,并且直接在 Windows 设备上运行脚本可以正常工作。
如果您想知道,这是一个通过 qmake 构建的 Qt 应用程序,在 bash 脚本中使用 windeployqt 制作和部署(问题出在哪里)。
任何提示或帮助将不胜感激。
编辑:部署脚本包含约 30 行,如果将命令直接放在 yaml 中而不是在 CI 期间执行的外部 shell 中,这将使 gitlab-ci yaml 文件难以阅读。
解决方案
这可能是由于 gitlab 打开了一个新窗口来执行 bash 所以stdout 没有被捕获。
您可以尝试使用基于文件系统的方法来检查执行结果,例如回显到文件。例如,可以使用通配符指定工件**/*.zip
。
我还在我的 Windows 机器上进行了测试。首先,如果我./test.sh
在 powershell 中运行,它会提示对话框让我选择要执行的程序。默认是 git bash。这意味着在你的机器上你可能已经配置了一个可执行文件(你最好找出来)
我也在powershell中尝试过:
bash -c "mnt/c/test.sh"
它test OK
按预期给了我,没有新窗口。
所以我建议你试试bash -c "some/path/test.sh"
你的 gitlab。
推荐阅读
- node.js - cookie 未保存在浏览器中 - Nodejs
- python - 为什么我会收到此错误:ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
- javascript - 获取身份验证信息后如何在 vue3 中重新初始化 main.js?
- google-sheets - 具有合并列 + 大于日期和小于日期的 SUMIF 数组公式
- python - 无法在 Python 中访问 Widget id
- javascript - Redux-Toolkit:如何拒绝“createAsyncThunk”?
- mysql - MySQL 输出初学者级别
- reactjs - React+Django 部署到 heroku 不读取静态文件
- c# - 即使两个对象相等,C# ''Assert.Equal(book, book1)'' 也会失败
- c - 是否有将静态库转换为 C 头文件的实用程序?