macOS에서 GitLab Runner 설치

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

macOS에는 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 - download any other tagged release를 참조하세요.

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

    sudo chmod +x /usr/local/bin/gitlab-runner
    
  3. Runner를 실행할 사용자로 로그인한 후 다음을 수행하세요:

    1. Runner를 등록하세요. macOS에서 iOS 또는 macOS 애플리케이션을 빌드하는 경우, shell executor를 사용하세요. 작업은 호스트에서 직접 실행되며 로그인된 사용자의 아이덴티티를 사용합니다. 작업은 컨테이너에서 실행되지 않으므로 컨테이너 executor 사용보다 보안이 낮습니다. 자세한 내용은 보안 영향 문서를 참조하세요.

    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

서비스는 현재 사용자로 로그인한 터미널 창에서 설치해야 합니다. 그 후에 서비스를 관리할 수 있습니다.

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

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

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

macOS에는 LaunchDaemons도 있으며 전체적으로 백그라운드에서 실행되는 서비스입니다. LaunchDaemons는 시스템 부팅 시 실행되지만 UI 상호 작용에 대한 동일한 액세스 권한이 없습니다. Runner의 서비스를 LaunchDaemon으로 실행해 볼 수 있지만 현재 이 방식은 지원되지 않습니다.

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

git을 설치하는 데 Homebrew를 사용한 경우 다음 내용이 포함된 /usr/local/etc/gitconfig 파일이 추가될 수 있습니다:

[credential]
        helper = osxkeychain

이렇게하면 Git이 사용자 자격 증명을 키체인에 캐시하도록 설정되어 있으며 이는 원하지 않을 수 있으며 fetch가 멈출 수 있습니다. 시스템 gitconfig에서 해당 줄을 제거할 수 있습니다:

git config --system --unset credential.helper

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

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 서비스와 codesign 사용하기

만약 macOS에 Homebrew를 사용하여 gitlab-runner를 설치하고 빌드에서 codesign을 호출한다면, 사용자 키체인에 액세스하려면 <key>SessionCreate</key><true/>를 설정해야 할 수 있습니다. GitLab은 Homebrew formula를 유지하지 않으며 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.plistSessionCreatefalse로 설정되어 있는지 확인할 수 있습니다.

작업 중에 오류 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: API 응답에서 TLS 데이터를 가져오는 중 오류 발생... 에러=CA 체인을 구축할 수 없음

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

인증서가 부모 URL을 제공하지 않습니다: 루프를 탈출합니다  발행기=Baltimore CyberTrust Root 발행자 인증서 URL=[] 일련번호=33554617 주체=Baltimore CyberTrust Root 컨텍스트=certificate-chain-build
최종 루트 인증서를 찾기 위한 마지막 인증서 검증 중  발행기=Baltimore CyberTrust Root 발행자 인증서 URL=[] 일련번호=33554617 주체=Baltimore CyberTrust Root 컨텍스트=certificate-chain-build
ERROR: API 응답에서 TLS 데이터를 가져오는 중 오류 발생... 에러  에러=CA 체인을 구축할 수 없음: TLS ConnectionState에서 인증서를 가져오는 중 오류 발생: CA 체인에 인증서를 해결할 수 없음: 검증과 함께 인증서 체인을 해결하는 중 오류 발생: 체인에서 마지막 인증서를 확인하는 중 오류 발생: x509: “Baltimore CyberTrust Root” 인증서는 이용에 허용되지 않음 runner=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 연결 문제를 해결하는 데 도움이 될 수 있습니다.