在 macOS 上安装极狐GitLab Runner

您可以在 macOS 上安装并升级极狐GitLab Runner。

安装

有两种方法可以在 macOS 上安装极狐GitLab Runner:

手动安装(官方推荐)

  1. 下载适合您系统的二进制文件:
  • 对于基于 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"
    

您可以为每个前沿 - 下载其他标签发布中描述的可用版本下载二进制文件。

  1. 授权执行:

    sudo chmod +x /usr/local/bin/gitlab-runner
    
  2. 对于运行 Runner 的用户:

    1. 注册 Runner。在 macOS 上构建 iOS 或 macOS 应用程序时,请使用 Shell 执行器。 构建和测试以登录用户的身份直接在构建主机上运行,不在容器中运行,不如使用容器执行器安全。有关详细信息,请参见安全隐患文档

    2. 打开终端并切换到当前用户。

      su - <username>
      
    3. 将极狐GitLab Runner 安装为服务并启动它:

      cd ~
      gitlab-runner install
      gitlab-runner start
      
  3. 重启系统。

如果您按照这些说明进行操作,极狐GitLab Runner 配置文件(config.toml)会出现在 /Users/<username>/.gitlab-runner/ 中。了解更多关于配置 Runner 的内容

Homebrew 安装(替代方法)

可以使用 Homebrew Formula 安装极狐GitLab。

caution极狐GitLab 不会维护 Homebrew Formula。

使用 Homebrew 安装极狐GitLab Runner:

  1. 安装极狐GitLab Runner。

    brew install gitlab-runner
    
  2. 将极狐GitLab Runner 安装为服务并启动它。

    brew services start gitlab-runner
    

极狐GitLab Runner 已经安装成功并运行。

macOS 限制

note该服务需要以当前用户的身份从终端窗口进行安装。只有这样,您才能管理服务。

要以当前用户身份登录,请在终端中运行 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

手动升级

  1. 停止服务:

    gitlab-runner stop
    
  2. 下载二进制文件,替换极狐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"
    

    您可以为每个前沿 - 下载其他标签发布中描述的可用版本下载二进制文件。

  1. 授权执行:

    sudo chmod +x /usr/local/bin/gitlab-runner
    
  2. 开启服务:

    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 在使用时出现了上面的消息,有两种原因:

  1. 确保您的用户可以操作 UI 交互:

    DevToolsSecurity -enable
    sudo security authorizationdb remove system.privilege.taskport is-developer
    

    第一个命令允许您的用户访问开发人员工具。第二个命令允许作为开发人员组成员的用户进行 UI 交互,例如,运行 iOS 模拟器。

  2. 确保您的极狐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.plistSessionCreate 设置为 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.plistStandardOutPathStandardErrorPath 中指定的目录存在:

<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

如果遇到这个错误,您可能需要:

  1. 升级到 15.5.1 或更高版本。
  2. [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 签名或其他一些已弃用算法签名的根证书。