gpt4 book ai didi

使用 Bash 的 Windows GitLab CI 运行器

转载 作者:可可西里 更新时间:2023-11-01 12:41:31 29 4
gpt4 key购买 nike

我正在尝试使用 bash 作为 GitLab CI Runner 在 Windows 上的 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

有没有办法正确配置它?

最佳答案

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

  1. gitlab-runner 找不到 bash
  2. gitlab-runner 没有很好地结合 unix 风格和 Windows 风格的路径。

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

至于你在创建bash.cmd后出现的奇怪错误,那是因为第二个问题。结合 bash 和 Windows 时,路径通常很难正确。 Gitlab-runner 可能会尝试确定构建路径是相对路径还是绝对路径,并最终将其认为是工作目录 ($PWD) 的 windows 路径放在前面。这看起来像一个错误,但 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/"

关于使用 Bash 的 Windows GitLab CI 运行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733406/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com