2017-01-19 47 views
4

我想在Windows上使用bash作为GitLab CI Runner的shell。Windows GitLab使用Bash的CI Runner

concurrent = 1 
check_interval = 0 

[[runners]] 
    name = "DESKTOP-RQTQ13S" 
    url = "https://example.org/ci" 
    token = "fooooooooooooooooooobaaaaaaaar" 
    executor = "shell" 
    shell = "bash" 
    [runners.cache] 

不幸的是我无法找到指定的CI亚军应该用实际的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

它看起来像你试图将gitlab-ci与Linux的Windows子系统(可以通过在Windows命令提示符处键入bash访问)相链接?我怀疑这是由Gitlab的runner配置直接支持的。

相反,我会建议在你的shell执行程序中使用Powershell。

  Executor = 'shell' 
      Shell = 'powershell' 

然后,您可以下拉到猛砸在你.gitlab-ci.yml调用的脚本。

鉴于这是不好的做法,执行比.gitlab-ci.yml本身(而不是呼唤外部脚本),你失去了小范围内很琐碎的shell脚本更受被迫使用原生的Windows外壳程序。

4

这里有两个问题,两者都可以解决。

  1. gitlab亚军找不到bash
  2. gitlab亚军不结合UNIX风格和Windows风格的路径非常好。

你基本上已经成功地通过创建bash.cmd文件来解决第一个问题。但是,如果你很好奇它为什么不起作用没有它,我的猜测是bash运行在命令提示符下,因为它包含它的目录(例如在你的情况下“C:\ Program Files \ Git \ usr \ bin“)包含在您的用户帐户的PATH环境变量中。但也许你正在运行系统帐户中的gitlab-runner,该帐户可能没有相同的PATH。 因此,首先要做的就是检查系统的PATH变量,并根据需要添加bin目录(即使用控制面板中的系统小程序,如herehere所述)。请确保在进行更改后重新启动机器,因为只有在重新启动后才会应用更改。这应该使bash工作,即使从系统或管理员帐户中运行的服务调用。

至于创建bash.cmd后得到的奇怪错误,那是由于第二个问题。将bash和Windows结合使用时,路径通常很难找到正确的路径。Gitlab-runner可能试图确定构建路径是相对还是绝对路径,并最终将Windows路径与它认为是工作目录($PWD)相提并论。这看起来像一个错误,但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亚军用于存储路径建立等重要如果你正在使用的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/" 
+0

谢谢你的长篇大论地解释,我想用猛砸风格的路径,但已经没有更新的问题/加我自己的答案。不过,它也会对其他人有帮助! –