我正在尝试使用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

有办法正确配置吗?

最佳答案

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

  • gitlab-runner无法找到bash
  • gitlab-runner不能很好地结合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仍未修复(从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/

    10-10 03:03