GitLab Runner를 macOS에 설치하기

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

이 페이지에는 macOS(Apple Silicon 및 Intel x86-64)에 GitLab Runner를 설치하는 방법에 대한 지침이 포함되어 있습니다.

문제 해결에 대한 정보는 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"  
      

    사용 가능한 모든 버전의 바이너리는
    Bleeding Edge - 다른 태그가 지정된 릴리즈 다운로드에서 설명된 대로 다운로드할 수 있습니다.

  2. 실행 권한을 부여합니다:

    sudo chmod +x /usr/local/bin/gitlab-runner  
    
  3. GitLab Runner 애플리케이션을 실행할 사용자 계정에서:

    1. 러너 등록 구성을 합니다.
      등록 과정에서 셸 실행기를 선택합니다.
      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/에 있습니다.
러너 구성에 대해 더 알아보세요.

자세한 정보는 용어집를 참조하세요.

macOS의 제한 사항

note
서비스는 현재 사용자로 로그인한 터미널 창에서 설치해야 합니다.
그렇게 해야만 서비스 관리가 가능합니다.

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

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

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

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

macOS에는 UI 상호 작용에 대한 접근 권한이 없는 백그라운드에서 완전히 실행되는 서비스인 LaunchDaemons도 있습니다.
시스템 시작 시 LaunchDaemons가 실행되지만, LaunchAgents와 동일한 UI 상호 작용 접근 권한을 가지고 있지 않습니다.
Runner의 서비스를 LaunchDaemon으로 실행하려고 할 수 있지만, 현재 지원되지 않는 운영 모드입니다.

install 명령어를 실행한 후 GitLab Runner가 서비스 구성 파일을 생성했는지 확인하려면
~/Library/LaunchAgents/gitlab-runner.plist 파일을 확인하세요.

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 업그레이드

  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"
      

    사용 가능한 모든 버전의 이진 파일을 다운로드할 수 있습니다 Bleeding Edge - download any other tagged release.

  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 서비스에서 코드 서명 사용

macOS에서 Homebrew로 gitlab-runner를 설치하고 빌드가 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에서 문제 해결과 관련된 내용입니다.

killed: 9

Apple Silicon 기반 시스템에서 gitlab-runner install, gitlab-runner start 또는 gitlab-runner register 명령을 실행할 때 이 오류가 발생할 수 있습니다.

이 오류를 해결하려면 ~/Library/LaunchAgents/gitlab-runner.plistStandardOutPathStandardErrorPath 값으로 지정된 디렉터리가 쓰기 가능해야 합니다.

다음 예제에서 /Users/USERNAME/Library/LaunchAgents/gitlab-runner.plist 파일이 로그 파일을 위한 새로운 쓰기 가능한 디렉토리인 gitlab-runner-log를 포함하도록 수정되었습니다.

 <key>StandardErrorPath</key>
  <string>/Users/USERNAME/gitlab-runner-log/gitlab-runner.err.log</string>
 <key>StandardOutPath</key>
  <string>/Users/USERNAME/gitlab-runner-log/gitlab-runner.out.log</string>
</dict>

"launchctl" failed: exit status 112, Could not find domain for

이 메시지는 macOS에 GitLab Runner를 설치하려고 할 때 발생할 수 있습니다. GitLab Runner 서비스를 GUI 터미널 애플리케이션에서 관리하고 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를 서비스로 실행할 때, 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에서 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: exit status 134 gitlab-runner start 명령에서

이 오류는 GitLab Runner 서비스가 제대로 설치되지 않았음을 나타냅니다. 오류를 해결하기 위해 다음 명령을 실행하세요:

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

오류가 지속되면 그래픽 로그인으로 진행하세요. 그래픽 로그인은 서비스를 시작하는 데 필요한 LaunchAgent를 부트스트랩합니다.
자세한 내용은 macOS의 제한 사항을 참조하세요.

FATAL: gitlab-runner 시작하지 못했습니다: "launchctl" 오류 발생: Load failed: 5: 입력/출력 오류 gitlab-runner start 명령어에서

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>

디렉토리가 존재하지 않는 경우, 해당 디렉토리를 생성하고 러너 서비스 사용자가 이 디렉토리에 읽고 쓸 수 있는 적절한 권한을 가지고 있는지 확인하세요.

ERROR: API 응답에서 TLS 데이터를 가져오는 중 오류가 발생했습니다... 오류 error=couldn't build CA Chain

GitLab Runner v15.5.0 이상으로 업그레이드하면 다음과 같은 오류가 발생할 수 있습니다:

인증서가 상위 URL을 제공하지 않습니다: 루프를 종료합니다  발급자=Baltimore CyberTrust Root IssuerCertURL=[] 일련번호=33554617 주체=Baltimore CyberTrust Root 컨텍스트=certificate-chain-build
마지막 인증서를 확인하여 최종 루트 인증서를 찾고 있습니다  발급자=Baltimore CyberTrust Root IssuerCertURL=[] 일련번호=33554617 주체=Baltimore CyberTrust Root 컨텍스트=certificate-chain-build
ERROR: API 응답에서 TLS 데이터를 가져오는 중 오류가 발생했습니다... 오류 error=couldn't build CA Chain: TLS ConnectionState에서 인증서를 가져오는 중 오류: CA Chain으로 인증서를 가져오는 중 오류: 리프 인증서에서 인증서 체인을 해결할 수 없습니다: 검증 중 인증서 체인을 해결하는 중 오류: 체인에서 마지막 인증서를 검증하는 중 오류: x509: “Baltimore CyberTrust Root” 인증서는 이 용도로 허용되지 않습니다 러너=x7kDEc9Q

이 오류가 발생하는 경우, 다음 조치를 취해야 할 수 있습니다:

  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

이 기능 플래그를 비활성화하면 SHA-1 서명으로 서명된 루트 인증서를 사용하는 HTTPS 엔드포인트에 대한 TLS 연결 문제를 해결하는 데 도움이 될 수 있습니다.