我正在尝试使用bash作为Windows上的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
有办法正确配置吗?
最佳答案
这里有两个问题,都可以解决。
bash
通过创建
bash.cmd
文件,您基本上已经成功解决了第一个问题。但是,如果您对没有它的原因感到好奇,我猜是bash
在命令提示符下运行,因为包含它的目录(例如,在您的情况下为“C:\Program Files\Git\usr\bin” )包含在用户帐户的PATH环境变量中。但是,也许您正在系统帐户中运行gitlab-runner,该帐户可能没有相同的PATH。因此,要做的第一件事就是检查系统的PATH变量,并在必要时添加bin目录(例如,按照here或here所述在控制面板中使用系统小程序)。只需确保在进行更改后就重新启动计算机,因为在重新启动后才应用更改。即使从系统或管理员帐户中运行的服务调用
bash
,它也应能正常工作。至于创建bash.cmd之后遇到的奇怪错误,那是由于第二个问题。结合bash和Windows时,通常通常很难找到正确的路径。 Gitlab-runner可能正在尝试确定构建路径是相对的还是绝对的,并最终在Windows路径之前添加它认为是工作目录(
$PWD
)的路径。这看起来像个错误,但gitlab仍未修复(从Runner的 9.0 版本开始!),并且可能永远不会修复。也许他们认为这不是错误,或者是由于底层软件或工具中的错误导致他们无法修复,或者修复起来太困难。无论如何,我发现了一种解决方法。您可以在config.toml
文件中指定构建的基本路径。如果您使用unix样式的路径,则可以解决此问题。在Windows上,
config.toml
通常与gitlab-runner.exe(或gitlab-multi-runner-amd64.exe等)位于同一文件夹中。在您喜欢的文本编辑器中打开该文件。然后找到[[runners]]
部分,并添加类似于以下内容的两行。builds_dir="/c/gitlab-runner/builds/"
cache_dir="/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/"
cache_dir="/c/gitlab-runner/cache/"
关于windows - 使用Bash的Windows GitLab CI Runner,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41733406/