我正在尝试在Windows上使用bash作为GitLab CI Runner的shell。
concurrent = 1
check_interval = 0
[[runners]]
name = "DESKTOP-RQTQ13S"
url = "https://example.org/ci"
token = "fooooooooooooooooooobaaaaaaaar"
executor = "shell"
shell = "bash"
[runners.cache]
不幸的是,我找不到一个选项来指定CI Runner应该使用的实际shell程序。默认情况下,它只是尝试运行它找不到的bash
。我不知道为什么,因为当我打开Windows命令行并输入bash
时,它可以工作。
Running with gitlab-ci-multi-runner 1.9.4 (8ce22bd)
Using Shell executor...
ERROR: Build failed (system failure): Failed to start process: exec: "bash": executable file not found in %PATH%
我尝试将文件bash.cmd
添加到包含
@"C:\Program Files\Git\usr\bin\bash.exe" -l
这给了我这个奇怪的错误:
Running with gitlab-ci-multi-runner 1.9.4 (8ce22bd)
Using Shell executor...
Running on DESKTOP-RQTQ13S...
/usr/bin/bash: line 43: /c/Users/niklas/C:/Users/niklas/builds/aeb38de4/0/niklas/ci-test.tmp/GIT_SSL_CAINFO: No such file or directory
ERROR: Build failed: exit status 1
有没有办法正确配置?
答案 0 :(得分:9)
这里有两个问题,两者都可以解决。
bash
通过创建bash.cmd
文件,您已基本成功解决了第一个问题。但是如果你很好奇为什么它没有没有它,我的猜测是bash
在命令提示符下运行,因为包含它的目录(例如在你的情况下“C :\ Program Files \ Git \ usr \ bin“)包含在用户帐户的PATH环境变量中。但也许您在系统帐户中运行gitlab-runner,它可能没有相同的PATH。
因此,首先要检查系统的PATH变量,并在必要时添加bin目录(即使用控制面板中的System applet,如here或here所述)。只需确保在进行更改后重新启动计算机,因为直到重新启动后才会应用更改。这应该使bash
工作,即使从系统或管理员帐户中运行的服务调用。
至于你在创建bash.cmd后得到的奇怪错误,那是由于第二个问题。在组合bash和Windows时,路径通常很难做到。 Gitlab-runner可能试图确定构建路径是相对路径还是绝对路径,并最终将Windows路径添加到它认为的工作目录($PWD
)之前。这看起来像一个bug,但gitlab仍然没有修复它(从版本 9.0 的跑步者!!),可能永远不会。也许他们已经确定它不是一个错误,或者是由于底层软件或工具中的错误导致他们无法解决或者修复起来太困难。无论如何,我发现了一个解决方法。您可以在config.toml
文件中指定构建的基本路径。如果您使用unix样式的路径,它可以解决问题。
在Windows上,config.toml
通常与gitlab-runner.exe(或gitlab-multi-runner-amd64.exe等)位于同一文件夹中。在您喜欢的文本编辑器中打开该文件。然后找到[[runners]]
部分并添加两行,类似于以下内容。
builds_dir="/c/gitlab-runner/builds/"
builds_cache="/c/gitlab-runner/cache/"
您使用的路径应该是您希望gitlab-runner用于存储构建等的任何目录的“bash版本”。重要如果您使用的是cygwin,您将使用类似于/cygdrive/c/...
而不是/c/...
(适用于msys-git或独立的MSYS2等)。
以下是config.toml文件的示例:
[[runners]]
name = "windows"
url = "https://your.server.name"
token = "YOUR_SECRET_TOKEN"
executor = "shell"
shell = "bash"
builds_dir="/c/gitlab-runner/builds/"
builds_cache="/c/gitlab-runner/cache/"
答案 1 :(得分:0)
您似乎正在尝试将gitlab-ci与Linux的Windows子系统(可以通过在Windows命令提示符下键入bash
进行访问)进行链接?我怀疑这是由Gitlab的跑步者配置直接支持的。
相反,我建议将Powershell与shell执行程序一起使用。
Executor = 'shell'
Shell = 'powershell'
然后,您可以从.gitlab-ci.yml调用的脚本中下载Bash。
鉴于在.gitlab-ci.yml本身内执行多个非常简单的shell脚本(而不是调用外部脚本)是不好的做法,因此被迫使用本机Windows shell。