macOS에서 GitLab Runner 설치하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed

GitLab Runner은 macOS에 설치하고 업데이트할 수 있습니다.

문제 해결에 대한 자세한 정보는 GitLab Runner 문제 해결을 참조하십시오.

  1. 시스템에 맞는 이진 파일을 다운로드하세요:

    • Intel 기반 시스템의 경우:

      sudo curl --output /usr/local/bin/gitlab-runner "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-amd64"
      
    • Apple Silicon 기반 시스템의 경우:

      sudo curl --output /usr/local/bin/gitlab-runner "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-arm64"
      

    다른 버전을 설명된대로 다운로드할 수 있습니다. 최신 릴리즈 다운로드 설명서를 참조하세요.

  2. 실행 권한을 부여하세요:

    sudo chmod +x /usr/local/bin/gitlab-runner
    
  3. 실행할 사용자로:

    1. 러너(runner)를 등록하세요. macOS에서 iOS 또는 macOS 애플리케이션을 빌드하는 경우 쉘 엑스큐터를 사용하세요. 작업은 직접 호스트에서 실행되어 로그인된 사용자의 식별 정보를 사용합니다. 작업은 컨테이너에서 실행되지 않으며, 컨테이너 엑스큐터를 사용하는 것보다 보안이 덜합니다. 자세한 내용은 보안 영향 문서를 참조하세요.

    2. 터미널을 열고 현재 사용자로 전환하세요.

      su - <username>
      
    3. GitLab Runner를 서비스로 설치하고 시작하세요:

      cd ~
      gitlab-runner install
      gitlab-runner start
      
  4. 시스템을 재부팅하세요.

위 지침을 따랐다면, GitLab Runner 구성 파일 (config.toml)은 /Users/<username>/.gitlab-runner/에 있습니다. 러너(runner) 구성에 대해 자세히 알아보세요.

macOS 제한 사항

note
이 서비스는 현재 사용자로 로그인된 터미널 창에서 설치해야 합니다. 그렇지 않으면 서비스를 관리할 수 없습니다.

현재 사용자로 로그인하려면 터미널에서 su - <username> 명령을 실행하세요. 사용자 이름은 ls /users 명령으로 얻을 수 있습니다.

현재 macOS에서 작동하는 유일한 방법은 사용자 모드에서 서비스를 실행하는 것입니다.

서비스는 사용자가 로그인한 경우에만 실행되므로 macOS 기기에서 자동 로그인을 활성화해야 합니다.

서비스는 LaunchAgent로 시작됩니다. LaunchAgent를 사용하여 빌드가 UI 상호작용을 수행할 수 있으므로 iOS 시뮬레이터에서 실행하고 테스트할 수 있습니다.

macOS에는 LaunchDaemon도 있습니다. LaunchDaemon은 완전히 백그라운드에서 실행되는 서비스입니다. LaunchDaemon은 시스템 부팅 시 실행되지만 UI 상호작용에 동일한 액세스를 제공하지 않습니다. Runner 서비스를 LaunchDaemon으로 실행할 수 있지만 현재는 이 모드의 작동을 지원하지 않습니다.

install 명령을 실행한 후 GitLab Runner가 서비스 구성 파일을 생성했는지 확인하려면 ~/Library/LaunchAgents/gitlab-runner.plist 파일을 확인할 수 있습니다.

만약 Homebrew를 사용하여 git을 설치했다면, 아래와 같은 /usr/local/etc/gitconfig 파일이 추가될 수 있습니다:

[credential]
        helper = osxkeychain

이는 Git이 사용자 자격 증명을 키체인에 캐시하도록 지시하며, 원하는 동작이 아닐 수 있으며 가져오기를 멈출 수 있습니다. 시스템 gitconfig에서 이 줄을 제거할 수 있습니다:

git config --system --unset credential.helper

또는 GitLab 사용자의 credential.helper를 비활성화할 수 있습니다:

git config --global --add credential.helper ''

credential.helper 상태는 다음과 같이 확인할 수 있습니다:

git config credential.helper

GitLab Runner 업그레이드

  1. 서비스를 중지하세요:

    gitlab-runner stop
    
  2. GitLab Runner 실행 파일을 교체하는 바이너리를 다운로드하세요:

    • Intel 기반 시스템의 경우:

      sudo curl -o /usr/local/bin/gitlab-runner "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-amd64"
      
    • Apple Silicon 기반 시스템의 경우:

      sudo curl -o /usr/local/bin/gitlab-runner "https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin-arm64"
      

    다른 버전을 설명된대로 다운로드할 수 있습니다. 최신 릴리즈 다운로드 설명서를 참조하세요.

  3. 실행 권한을 부여하세요:

    sudo chmod +x /usr/local/bin/gitlab-runner
    
  4. 서비스를 시작하세요:

    gitlab-runner start
    

서비스 파일 업그레이드

LaunchAgent 구성을 업그레이드하려면 서비스를 제거하고 다시 설치해야 합니다:

gitlab-runner uninstall
gitlab-runner install
gitlab-runner start

GitLab Runner 서비스에서 codesign 사용하기

macOS에 gitlab-runner를 Homebrew를 사용하여 설치하고 빌드에서 codesign을 호출하는 경우 <key>SessionCreate</key><true/>를 설정하여 사용자 키체인에 액세스해야 할 수 있습니다. GitLab은 Homebrew 계열을 유지하지 않으며 공식 이진 파일을 사용하여 GitLab Runner를 설치해야 합니다.

다음 예제에서 빌드를 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 터미널 애플리케이션에서 GitLab Runner 서비스를 관리해야 합니다. SSH 연결이 아닌 터미널 애플리케이션에서 관리되어야 합니다.

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를 서비스로 실행할 때 LaunchAgentsSessionCreate와 함께 생성했습니다. 그 당시(Mavericks)에는 이것이 Code Signing 작업을 수행하기 위한 유일한 해결책이었습니다. 그러나 이 동작은 최근 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에서 SessionCreatefalse로 설정되어 있는지 확인할 수 있습니다.

작업 중에 fatal: unable to access 'https://path:3000/user/repo.git/': Failed to connect to path port 3000: Operation timed out 오류 발생

작업 중에 이 오류가 발생한다면, 실행 프로그램이 GitLab 인스턴스에 연결할 수 있는지 확인하세요. 연결이 방화벽, 프록시, 권한, 라우팅 구성 등에 의해 차단될 수 있습니다.

FATAL: Failed to start gitlab-runner: "launchctl" failed with stderr: Load failed: 5: Input/output error on gitlab-runner start command

gitlab-runner start 명령어를 실행할 때 이 오류가 발생하는 경우, ~/Library/LaunchAgents/gitlab-runner.plist에 지정된 디렉터리인 StandardOutPathStandardErrorPath가 존재하는지 확인하세요:

<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>

해당 디렉터리가 존재하지 않는 경우, 디렉터리를 생성하고 실행 프로그램 서비스 사용자가 해당 디렉터리를 읽고 쓸 수 있는 적절한 권한을 가지고 있는지 확인하세요.

API 응답에서 TLS 데이터를 가져오는 중 ERROR: Error on fetching TLS Data from API response... error error=couldn't build CA Chain

이 오류가 발생하는 경우, 다음을 확인해야 할 수 있습니다:

  1. GitLab Runner를 v15.5.1 이상으로 업그레이드하세요.
  2. 실행 프로그램 구성에서 [runners.feature_flags] 설정FF_RESOLVE_FULL_TLS_CHAINfalse로 설정하세요. 예를 들어:
    [[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 또는 다른 폐기된 알고리즘으로 서명된 루트 인증서를 사용하는 HTTPS 엔드포인트에 대한 TLS 연결 문제를 해결하는 데 도움이 될 수 있습니다.