无法在本地 windows gitlab runner 中执行 bash 脚本
Unable to execute a bash script in local windows gitlab runner
上下文
我想在 CI 的构建阶段 运行 一个 bash 脚本。
到目前为止,MacOS 构建工作正常,Unix 正在进行中,但我无法在 Windows 构建阶段执行脚本。
亚军
我们 运行 本地 gitlab 运行ner 在 Windows 10 home 上配置了 WSL,Bash for Windows 安装并工作:
Bash executing in Windows powershell
GitlabCI
这是一个突出问题的小例子。
gitlab-ci.yml
stages:
- test
- build
build-test-win:
stage: build
tags:
- runner-qt-windows
script:
- ./test.sh
test.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 应用程序,使用 windeployqt 在 bash 脚本中制作和部署(问题所在)。
如有任何提示或帮助,我们将不胜感激ci。
edit :部署脚本包含 ~30 行,如果命令直接放在 yaml 中而不是外部 shell 期间执行,这将使 gitlab-ci yaml 文件难以阅读CI.
Executing the script from the Windows env
可能是由于gitlab新开了一个window执行bash所以stdout没有被捕获.
您可以尝试使用基于文件系统的方法来检查执行结果,例如回显到文件。工件可以使用通配符指定,例如 **/*.zip
.
我还在 windows 机器上进行了测试。首先,如果我在 powershell 中 运行 ./test.sh
,它会提示对话框让我 select 执行哪个程序。默认值为 git bash。这意味着在你的机器上你可能已经配置了一个可执行文件(你最好找到它)
我也在 powershell 中尝试过:
bash -c "mnt/c/test.sh"
它给了我预期的 test OK
,没有新的 window。
所以我建议您在 git 实验室中尝试 bash -c "some/path/test.sh"
。
上下文
我想在 CI 的构建阶段 运行 一个 bash 脚本。
到目前为止,MacOS 构建工作正常,Unix 正在进行中,但我无法在 Windows 构建阶段执行脚本。
亚军
我们 运行 本地 gitlab 运行ner 在 Windows 10 home 上配置了 WSL,Bash for Windows 安装并工作: Bash executing in Windows powershell
GitlabCI
这是一个突出问题的小例子。
gitlab-ci.yml
stages:
- test
- build
build-test-win:
stage: build
tags:
- runner-qt-windows
script:
- ./test.sh
test.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 应用程序,使用 windeployqt 在 bash 脚本中制作和部署(问题所在)。
如有任何提示或帮助,我们将不胜感激ci。
edit :部署脚本包含 ~30 行,如果命令直接放在 yaml 中而不是外部 shell 期间执行,这将使 gitlab-ci yaml 文件难以阅读CI.
Executing the script from the Windows env
可能是由于gitlab新开了一个window执行bash所以stdout没有被捕获.
您可以尝试使用基于文件系统的方法来检查执行结果,例如回显到文件。工件可以使用通配符指定,例如 **/*.zip
.
我还在 windows 机器上进行了测试。首先,如果我在 powershell 中 运行 ./test.sh
,它会提示对话框让我 select 执行哪个程序。默认值为 git bash。这意味着在你的机器上你可能已经配置了一个可执行文件(你最好找到它)
我也在 powershell 中尝试过:
bash -c "mnt/c/test.sh"
它给了我预期的 test OK
,没有新的 window。
所以我建议您在 git 实验室中尝试 bash -c "some/path/test.sh"
。