GitHub Enterprise에서 저장소 빌드

Cloud Build를 사용하면 GitHub Enterprise 인스턴스에서 트리거를 만들 수 있습니다. 이 페이지에서는 GitHub Enterprise 트리거를 사용하여 GitHub Enterprise 인스턴스의 커밋이나 pull 요청에 대한 응답으로 빌드를 호출하는 방법을 설명합니다.

시작하기 전에

  • Cloud Build and Secret Manager API를 사용 설정합니다.

    API 사용 설정

  • 최신 버전의 GitHub Enterprise가 있는지 확인합니다.
  • GitHub Enterprise 트리거를 사용 설정할 저장소에 대한 관리 액세스 권한이 있는지 확인합니다.
  • 커스텀 도메인을 GitHub Enterprise 호스트에 매핑하고 호스트에 대해 적합한 SSL 인증서를 준비해야 합니다.

  • Cloud Build API로 제한된 API 키를 만듭니다.

  • GitHub Enterprise 서버가 온프레미스 환경에서 호스팅되면 다음 단계를 완료합니다.

  1. 온프레미스 호스트의 비공개 Google 액세스를 사용 설정하여 GitHub Enterprise 인스턴스가 Google Cloud API 및 서비스에 연결할 수 있는지 확인합니다.

  2. 온프레미스 네트워크를 Google Cloud에 피어링하고 Virtual Private Cloud(VPC) 네트워크를 설정합니다. 자세한 내용은 VPC 네트워크 피어링을 참조하세요.

  3. 비공개 풀을 사용하여 빌드를 실행합니다. 아직 실행하지 않았으면 VPC에 프로젝트 환경을 설정하고 새 비공개 작업자 풀을 만듭니다. 비공개 작업자 풀을 사용하여 빌드를 실행하는 방법은 비공개 풀에서 빌드 실행을 참조하세요.

필수 IAM 권한

GitHub Enterprise 호스트를 연결하려면 Cloud Build 편집자(roles/cloudbuild.builds.editor) 역할과 Cloud Build 통합 소유자(cloudbuild.integrations.owner) 역할이 사용자 계정에 추가되어 있는지 확인합니다.

사용자 계정에 필요한 역할을 추가하려면 Cloud Build 리소스에 대한 액세스 구성을 참조하세요. Cloud Build와 연관된 IAM 역할에 대한 자세한 내용은 IAM 역할 및 권한을 참조하세요.

VPC 네트워크 피어링

GitHub Enterprise 인스턴스가 온프레미스 환경에서 호스팅되어 공개 인터넷 연결을 통해 연결할 수 없는 경우 온프레미스 네트워크를 Google Cloud에 피어링하고 VPC 네트워크를 설정해야 합니다.

  1. Service Networking API를 사용 설정합니다.
  2. 새 VPC 네트워크를 만들거나 기존 VPC 네트워크를 선택합니다. 참고: 온프레미스로 GitHub Enterprise 인스턴스에 액세스할 수 있도록 VPC 네트워크를 구성해야 합니다.
  3. VPC 네트워크에서 이름이 지정된 IP 범위를 할당합니다. Cloud Build 비공개 풀에 VPC 네트워크를 사용하려면 프리픽스 길이가 /23 이하여야 합니다(예: /22, /21).
  4. VPC 네트워크와 Google Cloud 간에 VPC 네트워크 피어링 연결을 설정합니다. 자세한 내용은 비공개 연결 만들기를 참조하세요.
  5. GitHub Enterprise 인스턴스에 DNS가 구성되어 있으면 DNS 영역을 수동으로 Google 서비스 제공업체에 피어링해야 합니다. 자세한 내용은 서비스 제작자와 비공개 DNS 영역 공유를 참조하세요.
  6. [선택사항] Cloud 프로젝트에서 네트워크를 피어링하지 않으려면 공유 VPC를 설정하면 됩니다. 프로젝트가 조직의 일부이면 Cloud 프로젝트가 이 네트워크를 대신 사용합니다. 하지만 여전히 공유 VPC를 Service Networking API에 피어링해야 합니다.

Cloud Build GitHub 애플리케이션 만들기

GitHub Enterprise 인스턴스에 GitHub 애플리케이션을 만들어야 합니다. 앱은 웹훅 이벤트를 Cloud Build 엔드포인트로 보냅니다. 이러한 이벤트를 수신하면 Cloud Build는 페이로드의 유효성을 검사하고 이벤트가 Cloud Build GitHub 트리거에 해당하면 빌드를 실행합니다. GitHub Enterprise 트리거를 구성하려는 저장소에 앱을 설치해야 합니다.

이 섹션에서는 GitHub 앱을 만드는 방법을 설명합니다.

  1. GitHub Enterprise 인스턴스에 로그인합니다.
  2. 최신 버전의 GitHub Enterprise가 설치되어 있는지 확인합니다.

    일부 버전의 GitHub Enterprise에서는 Chrome 브라우저에서 다음 단계를 완료하기 위해 SameSite 쿠키를 중지해야 할 수 있습니다. GitHub Enterprise 버전이 2.21.3 출시 버전 이전이면 SameSite 쿠키를 중지해야 합니다.

    1. chrome://flags/ 페이지로 이동합니다.
    2. 필터 표시줄에 samesite를 입력합니다.
    3. SameSite 쿠키가 기본적으로 중지되어 있는지 확인합니다.

      중지된 SameSite 스크린샷

    4. 브라우저를 다시 시작합니다.

  3. Cloud Build 저장소 관리 페이지를 엽니다.

    저장소 관리 페이지 열기

  4. 호스트 연결을 클릭합니다.

    호스트 연결 패널에 GitHub Enterprise 저장소를 Cloud Build에 연결할 호스트 연결을 만들라는 메시지가 표시됩니다.

  5. 호스트 URL 섹션에 GitHub Enterprise 인스턴스의 URL을 입력합니다. 예를 들면 ghe.example.com입니다.

  6. API 키 섹션에서 생성을 클릭하여 API 키를 생성하거나 API 키가 이미 있으면 API 키를 입력합니다.

    API 키를 수동으로 만들려면 다음 단계를 완료합니다.

    API 키를 가져오려면 다음 안내를 따르세요.

    1. Cloud Console에서 사용자 인증 정보 페이지를 엽니다.

      사용자 인증 정보 페이지 열기

    2. 사용자 인증 정보 만들기를 클릭합니다.

    3. API 키를 클릭합니다.

      API 키가 생성된 팝업 상자가 나타납니다.

    4. 키 제한을 클릭합니다.

    5. API 제한사항의 드롭다운 메뉴에서 Cloud Build API를 선택합니다.

    6. 저장을 클릭합니다.

  7. [선택사항] 조직 섹션에서 GitHub 앱을 만들 조직을 입력합니다. 이 섹션을 비워 두면 앱이 현재 사용자 계정에 생성됩니다.

  8. [선택사항] CA 인증서 섹션에서 찾아보기를 클릭하여 자체 서명 인증서를 업로드합니다. 인증서 크기는 10KB를 초과할 수 없으며 PEM 형식(.pem, .cer, .crt)이어야 합니다. 이 섹션을 비워 두면 기본 인증서 집합이 사용됩니다.

  9. [선택사항] GitHub Enterprise 인스턴스가 온프렘에서 호스팅되고 사용자가 Google Cloud에 네트워크를 피어링한 경우 네트워크 섹션에 네트워크 프로젝트의 이름과 사용 중인 네트워크의 네트워크 이름을 입력합니다.

  10. 호스트 연결을 클릭합니다.

    GitHub Enterprise 인스턴스가 피어링된 네트워크에 있으면 호스트 연결 프로세스가 완료되는 데 몇 분 정도 걸릴 수 있습니다.

  11. 저장소를 Cloud Build에 연결하려면 저장소 연결을 클릭합니다. 그렇지 않은 경우 완료를 클릭합니다.

  12. 호스트를 연결하면 GitHub Enterprise 앱 이름을 입력하라는 팝업 상자가 나타납니다. 앱 이름을 입력하기 전에 로그인하라는 메시지가 표시될 수 있습니다. Google Chrome을 브라우저로 사용하는 경우 팝업 페이지에 GitHub Enterprise 앱에 대한 정보를 수동으로 입력하라는 메시지가 표시될 수 있습니다.

  13. 로그인한 후 GitHub 앱 이름을 입력합니다.

  14. GitHub 앱 만들기를 클릭합니다.

    이제 GitHub Enterprise 인스턴스에 GitHub 앱이 생성되었습니다. Cloud Build는 사용자 인증 정보를 자동으로 Secret Manager에 저장하고 호스트를 Cloud 프로젝트에 연결합니다. API에서 이 연결은 GitHubEnterpriseConfig 리소스 또는 Cloud Build와 GitHub Enterprise 서버 간의 연결로 표시됩니다.

    이제 호스트가 성공적으로 연결되었습니다. 저장소를 Cloud Build에 연결하려면 저장소 연결을 클릭합니다.

GitHub Enterprise 저장소 연결

이 섹션에서는 이전 섹션에서 만든 GitHub 앱에 Cloud 프로젝트를 매핑하는 방법을 설명합니다.

Console

  1. Google Cloud Console에서 트리거 페이지를 엽니다.

    트리거 페이지 열기

  2. 저장소 연결을 클릭합니다.

  3. 소스 선택에서 GitHub Enterprise를 클릭합니다.

  4. 드롭다운 메뉴에서 호스트 연결(GitHub Enterprise 구성)을 선택합니다.

  5. 계속을 클릭합니다.

  6. 애플리케이션을 승인합니다.

  7. 저장소 선택의 드롭다운 메뉴에서 GitHub 계정저장소를 선택합니다.

API

GitHub 앱을 적절한 GitHub 사용자 계정이나 조직에 설치하고 Cloud Build 프로젝트에 연결하려면 다음 안내를 따르세요.

  1. 이전 섹션에서 만든 GitHub 앱과 연결된 URL로 이동합니다.

       https://host-url/organizations/org-name/settings/apps/app-name/
    

    각 항목의 의미는 다음과 같습니다.

    • host-url은 GitHub Enterprise 인스턴스의 호스트 URL입니다.
    • org-name은 프로젝트를 만든 조직의 이름입니다.
    • app-name은 GitHub 앱 이름입니다.
  2. URL을 통해 사용자 계정이나 조직에 앱을 설치합니다.

    앱이 설치되면 앱과 연결된 설치 ID를 기록합니다. 앱이 설치된 후에 URL에서 설치 ID를 확인할 수 있습니다.

  3. 다음 콘텐츠로 JSON 파일을 만듭니다.

    {
     "Id": installation-id,
     "project_id": "project-id",
     "repository_setting_list": {
            "repository_settings": {
            "owner": "owner",
            "name": "repo-name",
          },
          "repository_settings": {
            "owner": "owner",
            "name": "repo-name-additional"
          },
         …
     },
        "enterprise_config_resource_name": "projects/project-number/githubEnterpriseConfigs/id"
    }
    

    각 항목의 의미는 다음과 같습니다.

    • installation-id는 GitHub 앱의 설치 ID입니다. 참고: 이 값은 정수이며 따옴표가 필요 없습니다.
    • project-id는 설치와 연결된 Cloud 프로젝트입니다.
    • owner는 GitHub 저장소 소유자입니다.
    • repo-name은 GitHub 저장소 이름입니다.
    • [선택사항] repo-name-additional은 추가 GitHub 저장소의 이름입니다.
    • project-number는 Cloud 프로젝트 번호입니다.
    • id는 GitHubEnterpriseConfig의 ID입니다.
  4. 터미널에 다음 curl 명령어를 입력합니다. 여기서 project-id는 Cloud 프로젝트 ID입니다.

     curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/installations -d @installation.json
    

이제 비활성 탭의 트리거 페이지에서 설치와 연결된 저장소를 확인할 수 있습니다.

GitHub Enterprise 설치에 필요한 GitHub 트리거 만들기

이 섹션에서는 트리거를 만들고 GitHub Enterprise 설치에 연결하는 방법을 설명합니다. 온프레미스 환경에서 GitHub Enterprise 트리거를 사용하려면 GitHub Enterprise로부터 온프레미스 환경에서 저장소 빌드의 추가 안내를 참조하세요.

Console

GitHub 트리거를 사용하여 트리거를 만드는 방법은 GitHub 트리거 만들기를 참조하세요.

API

다음 JSON 템플릿에서는 명령줄을 통해 트리거를 만드는 방법을 보여줍니다.

  {
      "filename": "cloudbuild.yaml",
      "name": "curl-trigger",
      "description": "curl trigger",
      "github": {
          "push": {
              "branch": ".*",
          },
          "owner": "owner",
          "name": "repo-name",
      "enterprise_config_resource_name": "projects/project-number/githubEnterpriseConfigs/id"
      }
  }

각 항목의 의미는 다음과 같습니다.

  • owner는 GitHub 저장소 소유자입니다.
  • repo-name은 GitHub 저장소 이름입니다.
  • project-number는 Cloud 프로젝트 번호입니다.
  • id는 GitHubEnterpriseConfig의 ID입니다.

터미널에 다음 curl 명령어를 입력합니다. 여기서 project-id는 Cloud 프로젝트 ID입니다.

  curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" https://cloudbuild.googleapis.com/v1/projects/project-id/triggers -d @trigger.json

이제 트리거가 생성되었습니다.

GitHub Enterprise에서 온프레미스 환경에 저장소 빌드

이 섹션에서는 GitHub Enterprise 트리거를 사용하여 GitHub Enterprise 인스턴스의 비공개 풀에서 빌드하는 방법을 설명합니다.

온프레미스 환경에서 빌드할 GitHub Enterprise 트리거를 만들려면 다음 안내를 따르세요.

  1. 온프레미스 호스트의 비공개 Google 액세스를 사용 설정하여 GitHub Enterprise 인스턴스가 Google Cloud API 및 서비스에 연결할 수 있는지 확인합니다.

  2. 온프레미스 네트워크를 Google Cloud에 피어링하고 Virtual Private Cloud(VPC) 네트워크를 설정합니다. 자세한 내용은 VPC 네트워크 피어링을 참조하세요.

  3. GitHub Enterprise 인스턴스에 호스팅되는 저장소를 빌드하려면 GitHub Enterprise 트리거를 만듭니다.

이제 GitHub Enterprise 트리거가 구성에 따라 GitHub Enterprise 인스턴스에서 빌드를 자동으로 호출합니다.

다음 단계