macOS에서 GitLab Runner 설치

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

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

문제 해결에 대한 정보는 GitLab Runner 문제 해결을 참조하세요.

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

    • 인텔 기반 시스템의 경우:

      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. 러너를 등록 구성하세요. 등록 프로세스 중 shell executor를 선택하세요. 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로 시작됩니다. LaunchAgent를 사용하면 빌드가 UI 상호 작용을 수행하여 iOS 시뮬레이터에서 실행 및 테스트하는 것이 가능합니다.

macOS에는 LaunchAgent 외에도 백그라운드에서 완전히 실행되는 LaunchDaemon도 있습니다. LaunchDaemon은 시스템 시작 시 실행되지만 LaunchAgent와 같은 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 실행 파일을 대체하기 위해 이진 파일을 다운로드하세요:

    • 인텔 기반 시스템의 경우:

      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 - 다른 태그로 표시된 릴리스 다운로드에 따라 사용 가능한 각 버전의 이진 파일을 다운로드할 수 있습니다.

  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 사용자로 실행하고 해당 사용자가 codesign을 위해 설치한 서명 인증서에 액세스하려고 합니다:

<?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 실리콘 기반 시스템에서 gitlab-runner install, gitlab-runner start, 또는 gitlab-runner register 명령을 실행할 때 이 오류가 발생할 수 있습니다.

이러한 오류를 해결하려면 ~/Library/LaunchAgents/gitlab-runner.plist 내의 StandardOutPathStandardErrorPath 값이 쓰기 가능한지 확인해야 합니다.

다음 예에서는 /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를 설치하려고 시도할 때 발생할 수 있습니다. GUI 터미널 응용 프로그램을 통해 GitLab Runner 서비스를 관리하는지 확인하십시오. SSH 연결이 아니라 GUI 터미널 응용 프로그램에서 관리해야 합니다.

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에서) 이것은 코드 서명을 작동시키기 위한 유일한 솔루션이었습니다. 그러나 최근 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 오류

이 오류가 발생하면 작업 중 하나가 실패한 것입니다. 이 경우 실행중인 runner가 GitLab 인스턴스에 연결할 수 있는지 확인하십시오. 연결이 방화벽, 프록시, 권한 또는 라우팅 구성과 같은 것에 의해 차단될 수 있습니다.

gitlab-runner start 명령에 FATAL: Failed to start gitlab-runner: exit status 134 오류

이 오류는 GitLab Runner 서비스가 올바르게 설치되지 않았음을 나타냅니다. 다음 명령을 실행하여 오류를 해결할 수 있습니다.

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

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

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의 값인 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=couldn’t build CA Chain

이 오류가 발생하면 GitLab Runner를 v15.5.0 이상으로 업그레이드한 경우가 있습니다.

이 오류가 발생하면 다음 작업을 수행해야 할 수 있습니다:

  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 연결 문제를 해결하는 데 도움이 될 수 있습니다.