- 安装
- 手动升级
- 升级服务文件
- 通过极狐GitLab Runner 服务使用代码签名
-
排除 macOS 故障
"launchctl" failed: exit status 112, Could not find domain for
Failed to authorize rights (0x1) with status: -60007.
- 作业中出现
fatal: unable to access 'https://path:3000/user/repo.git/': Failed to connect to path port 3000: Operation timed out
错误 gitlab-runner start
命令上的FATAL: Failed to start gitlab-runner: "launchctl" failed with stderr: Load failed: 5: Input/output error
ERROR: Error on fetching TLS Data from API response... error error=couldn't build CA Chain
在 macOS 上安装极狐GitLab Runner
您可以在 macOS 上安装并升级极狐GitLab Runner。
安装
有两种方法可以在 macOS 上安装极狐GitLab Runner:
- 手动安装。这是极狐官方GitLab 支持并推荐的安装方法。
- Homebrew 安装。使用 Homebrew 是另外一种手动安装的方法。
手动安装(官方推荐)
- 下载适合您系统的二进制文件:
-
对于基于 Intel 的系统:
sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64"
-
对于基于 Apple Silicon 的系统:
sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64"
您可以为每个前沿 - 下载其他标签发布中描述的可用版本下载二进制文件。
-
授权执行:
sudo chmod +x /usr/local/bin/gitlab-runner
-
对于运行 Runner 的用户:
-
重启系统。
如果您按照这些说明进行操作,极狐GitLab Runner 配置文件(config.toml
)会出现在 /Users/<username>/.gitlab-runner/
中。了解更多关于配置 Runner 的内容。
Homebrew 安装(替代方法)
可以使用 Homebrew Formula 安装极狐GitLab。
使用 Homebrew 安装极狐GitLab Runner:
-
安装极狐GitLab Runner。
brew install gitlab-runner
-
将极狐GitLab Runner 安装为服务并启动它。
brew services start gitlab-runner
极狐GitLab Runner 已经安装成功并运行。
macOS 限制
要以当前用户身份登录,请在终端中运行 su - <username>
命令。您可以运行 ls /users
命令获取用户名。
目前,它在 macOS 中工作的唯一经过验证的方法是在用户模式下运行服务。
由于该服务仅在用户登录时才会运行,因此您应该在您的 macOS 机器上启用自动登录。
该服务作为 LaunchAgent
启动。通过使用 LaunchAgents
,构建能够执行 UI 交互,从而可以在 iOS 模拟器中运行和测试。
值得注意的是,macOS 也有 LaunchDaemons
,服务完全在后台运行。LaunchDaemons
在系统启动时运行,但它们对 UI 交互的访问权限与 LaunchAgents
不同。您可以尝试将 Runner 的服务作为 LaunchDaemon
进行运行,但目前不支持这种运行方式。
您可以通过检查 ~/Library/LaunchAgents/gitlab-runner.plist
文件,在执行 install
命令之后验证极狐GitLab Runner 创建了服务配置文件。
使用 Homebrew 安装 git
可能会添加了 /usr/local/etc/gitconfig
文件,其中包含:
[credential]
helper = osxkeychain
如果这样的话,Git 会在密钥串中缓存用户证书,您可能不希望这样并且这可能导致 Fetch 挂起。您可以使用以下命令将其从 gitconfig
系统移除:
git config --system --unset credential.helper
或者,您也可以为极狐GitLab 用户禁用 credential.helper
:
git config --global --add credential.helper ''
您可以使用以下命令检查 credential.helper
的状态:
git config credential.helper
手动升级
-
停止服务:
gitlab-runner stop
-
下载二进制文件,替换极狐GitLab Runner 可执行文件:
-
对于基于 Intel 的系统:
sudo curl -o /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64"
-
对于基于 Apple Silicon 的系统:
sudo curl -o /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64"
您可以为每个前沿 - 下载其他标签发布中描述的可用版本下载二进制文件。
-
授权执行:
sudo chmod +x /usr/local/bin/gitlab-runner
-
开启服务:
gitlab-runner start
请阅读 FAQ,它介绍了您在使用极狐GitLab Runner 时最可能遇到的问题。
升级服务文件
为了升级 LaunchAgent
配置,您必须卸载并安装服务:
gitlab-runner uninstall
gitlab-runner install
gitlab-runner start
通过极狐GitLab Runner 服务使用代码签名
如果您在 macOS 上使用 Homebrew 安装了 gitlab-runner
并且您的构建调用了 codedesign
,您需要设置 <key>SessionCreate</key><true/>
,以访问用户密钥串。
在以下示例中,我们以 gitlab
用户的身份运行构建并希望访问该用户安装的签名证书以进行代码签名:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SessionCreate</key><true/>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>RunAtLoad</key><true/>
<key>Disabled</key><false/>
<key>Label</key>
<string>com.gitlab.gitlab-runner</string>
<key>UserName</key>
<string>gitlab</string>
<key>GroupName</key>
<string>staff</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/gitlab-runner/bin/gitlab-runner</string>
<string>run</string>
<string>--working-directory</string>
<string>/Users/gitlab/gitlab-runner</string>
<string>--config</string>
<string>/Users/gitlab/gitlab-runner/config.toml</string>
<string>--service</string>
<string>gitlab-runner</string>
<string>--syslog</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
</dict>
</plist>
排除 macOS 故障
以下是在 macOS 上进行故障排除的内容:
"launchctl" failed: exit status 112, Could not find domain for
当您尝试在 macOS 上安装极狐GitLab Runner 时,可能会出现此消息。确保您从 GUI 终端应用程序,而不是 SSH 连接,管理极狐GitLab Runner 服务。
Failed to authorize rights (0x1) with status: -60007.
如果运行在 macOS 上的极狐GitLab Runner 在使用时出现了上面的消息,有两种原因:
-
确保您的用户可以操作 UI 交互:
DevToolsSecurity -enable sudo security authorizationdb remove system.privilege.taskport is-developer
第一个命令允许您的用户访问开发人员工具。第二个命令允许作为开发人员组成员的用户进行 UI 交互,例如,运行 iOS 模拟器。
-
确保您的极狐GitLab Runner 服务不使用
SessionCreate = true
。 以前,在将极狐GitLab Runner 作为服务运行时,我们使用SessionCreate
创建LaunchAgents
。在那个时候(Mavericks),这是使代码签名工作的唯一方法。最近发生了变化,OS X El Capitan 引入了许多新的安全功能,改变了这种行为。从极狐GitLab Runner 1.1 开始,在创建
LaunchAgent
时,我们不设置SessionCreate
。但是为了升级,您必需手动重新安装LaunchAgent
脚本:gitlab-runner uninstall gitlab-runner install gitlab-runner start
然后您可以验证
~/Library/LaunchAgents/gitlab-runner.plist
将SessionCreate
设置为false
。
作业中出现 fatal: unable to access 'https://path:3000/user/repo.git/': Failed to connect to path port 3000: Operation timed out
错误
如果一个作业因为这个错误而失败,请确保 Runner 可以连接到您的极狐GitLab 实例。连接可能会被以下内容阻塞:
- 防火墙
- 代理
- 权限
- 路由配置
gitlab-runner start
命令上的 FATAL: Failed to start gitlab-runner: "launchctl" failed with stderr: Load failed: 5: Input/output error
如果运行 gitlab-runner start
命令时遇到这个错误,请确保 ~/Library/LaunchAgents/gitlab-runner.plist
值 StandardOutPath
和 StandardErrorPath
中指定的目录存在:
<key>StandardOutPath</key>
<string>/usr/local/var/log/gitlab-runner.out.log</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/gitlab-runner.err.log</string>
如果目录不存在,请创建目录并确保 Runner 服务用户拥有读写权限。
ERROR: Error on fetching TLS Data from API response... error error=couldn't build CA Chain
如果升级到 15.5.0 或更高版本,可能会出现以下错误:
Certificate doesn't provide parent URL: exiting the loop Issuer=Baltimore CyberTrust Root IssuerCertURL=[] Serial=33554617 Subject=Baltimore CyberTrust Root context=certificate-chain-build
Verifying last certificate to find the final root certificate Issuer=Baltimore CyberTrust Root IssuerCertURL=[] Serial=33554617 Subject=Baltimore CyberTrust Root context=certificate-chain-build
ERROR: Error on fetching TLS Data from API response... error error=couldn't build CA Chain: error while fetching certificates from TLS ConnectionState: error while fetching certificates into the CA Chain: couldn't resolve certificates chain from the leaf certificate: error while resolving certificates chain with verification: error while verifying last certificate from the chain: x509: “Baltimore CyberTrust Root” certificate is not permitted for this usage runner=x7kDEc9Q
如果遇到这个错误,您可能需要:
- 升级到 15.5.1 或更高版本。
- 在
[runners.feature_flags]
配置中将FF_RESOLVE_FULL_TLS_CHAIN
设置为false
。例如:
[[runners]]
name = "ruby-2.7-docker"
url = "https://CI/"
token = "TOKEN"
executor = "docker"
[runners.feature_flags]
FF_RESOLVE_FULL_TLS_CHAIN = false
禁用此功能标志可能有助于解决 HTTPS 端点的 TLS 连接问题,这些端点使用通过 SHA-1 签名或其他一些已弃用算法签名的根证书。