비공개 네트워크의 GitHub Enterprise에서 저장소 빌드

Cloud Build를 사용하면 GitHub Enterprise 인스턴스에서 트리거를 만들 수 있습니다. 이 페이지에서는 GitHub Enterprise 트리거를 사용하여 GitHub Enterprise 인스턴스의 커밋이나 pull 요청에 대한 응답으로 빌드를 호출하는 방법과 인스턴스가 비공개 네트워크에서 호스팅되는 경우 GitHub Enterprise에서 저장소를 빌드하는 방법을 설명합니다.

시작하기 전에

  • Enable the Cloud Build and Service Directory APIs.

    Enable the APIs

  • 비공개 풀을 만들지 않은 경우 비공개 풀 만들기 및 관리의 안내에 따라 비공개 풀을 만드세요. 비공개 네트워크에 빌드하려면 비공개 풀이 필요합니다.

비공개 네트워크의 GitHub Enterprise에서 저장소 빌드

다음 단계를 완료하여 비공개 네트워크에서 GitHub Enterprise 인스턴스를 Cloud Build에 연결하세요.

  1. 서비스 디렉터리에 Cloud Build 서비스 에이전트에 대한 액세스 권한을 부여합니다.

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    export CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding  PROJECT_ID_CONTAINING_SERVICE_DIRECTORY \
       --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
       --role="roles/servicedirectory.viewer"
    

    다음을 바꿉니다.

    • PROJECT_ID는 Cloud Build 프로젝트 ID입니다.
    • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY: 서비스 디렉터리가 포함된 Google Cloud 프로젝트의 ID입니다.
  2. Cloud Build 서비스 에이전트에 VPC 네트워크 리소스 액세스 권한을 부여합니다.

    export PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
    export CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding PROJECT_ID_CONTAINING_NETWORK_RESOURCE \
       --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \
       --role="roles/servicedirectory.pscAuthorizedService"
    

    다음을 바꿉니다.

    • PROJECT_ID는 Cloud Build 프로젝트 ID입니다.
    • PROJECT_ID_CONTAINING_NETWORK_RESOURCE는 네트워크 리소스가 포함된 Google Cloud 프로젝트의 ID입니다.
  3. 다음 단계를 완료하여 서비스 디렉터리 서비스를 설정합니다.

    1. 서비스의 네임스페이스를 구성하세요.

       gcloud service-directory namespaces create NAMESPACE --location=REGION --project=PROJECT_ID_CONTAINING_SERVICE_DIRECTORY
      

      다음을 바꿉니다.

      • NAMESPACE: 서비스 디렉터리 네임스페이스의 이름입니다.
      • LOCATION: 연결을 만들고 저장소를 연결하는 리전입니다.
      • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY: 서비스 디렉터리가 포함된 Google Cloud 프로젝트의 ID입니다.
    2. 네임스페이스의 서비스를 구성하세요.

       gcloud service-directory services create SERVICE --namespace=NAMESPACE --location=LOCATION
      

      다음을 바꿉니다.

      • SERVICE: 서비스 디렉터리 리소스의 이름입니다.
      • NAMESPACE: 서비스 디렉터리 네임스페이스의 이름입니다.
      • LOCATION: 연결을 만들고 저장소를 연결하는 리전입니다.
    3. 서비스의 엔드포인트를 구성하세요.

       gcloud service-directory endpoints create ENDPOINT_NAME \
         --namespace=NAMESPACE \
         --service=SERVICE \
         --location=LOCATION \
         --address=INSTANCE_IP_ADDRESS \ 
         --port=PORT \
         --network=projects/PROJECT_ID_CONTAINING_NETWORK/locations/us-central1/ networks/NETWORK
      

      다음을 바꿉니다.

      • ENDPOINT_NAME: 엔드포인트의 이름입니다.
      • NAMESPACE: 서비스 디렉터리 네임스페이스의 이름입니다.
      • SERVICE: 서비스 디렉터리 리소스의 이름입니다.
      • LOCATION: 연결을 만들고 저장소를 연결하는 리전입니다.
      • INSTANCE_IP_ADDRESS: 네트워크에서 GitHub Enterprise 인스턴스의 IP 주소입니다. 예를 들면 123.45.67.89입니다. 자세한 내용은 서비스 디렉터리를 사용하여 Google Cloud 외부의 호스트에 연결을 참조하세요.
      • PORT: HTTPS의 포트 이름입니다.
      • PROJECT_ID_CONTAINING_NETWORK: VPC 네트워크가 포함된 Google Cloud 프로젝트 ID입니다.
      • NETWORK: VPC 네트워크의 이름입니다.

    이제 서비스 리소스(projects/{PROJECT_ID}/locations/{LOCATION}/namespaces/{NAMESPACE}/services/{SERVICE})를 사용하여 다음 단계에서 연결을 만들 수 있습니다.

  4. GitHub Enterprise 호스트를 연결합니다.

  5. GitHub Enterprise 저장소를 연결합니다.

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

서비스 디렉터리를 사용하여 Google Cloud 외부의 호스트에 연결

서비스 디렉터리는 IP 주소 범위 35.199.192.0/19를 사용하여 Google Cloud 외부의 호스트를 연결합니다. 이 범위를 방화벽의 허용 목록에 추가해야 합니다. 또한 Cloud VPN 또는 Cloud Interconnect 연결을 통해 이 범위를 라우팅하도록 비공개 네트워크를 구성해야 합니다.

연결에 Cloud Router가 사용되는 경우 비공개 네트워크에 대해 범위 알림을 수행하도록 연결을 구성할 수 있습니다.

자세한 내용은 비공개 네트워크 액세스 구성을 참조하세요.

Cloud Load Balancing을 사용하여 Google Cloud 외부의 호스트에 연결

네트워크 구성에서 서비스 디렉터리 IP 주소 범위 35.199.192.0/19를 Cloud VPN 또는 Cloud Interconnect로 라우팅할 수 없는 경우 트래픽을 호스트로 전달하는 Cloud Load Balancing을 사용하여 부하 분산기를 만들 수 있습니다.

서비스 디렉터리 엔드포인트를 만들 때 호스트의 IP 주소 대신 부하 분산기의 전달 규칙의 IP 주소를 사용해야 합니다. 엔드포인트를 만들 때 내부 HTTPS 부하 분산기 또는 내부 전송 제어 프로토콜(TCP) 부하 분산기를 사용할 수 있습니다.

TCP 부하 분산기를 만들 때 다음을 고려하세요.

  • 하이브리드 연결 네트워크 엔드포인트 그룹(NEG)만 호스트에 연결하면 됩니다.
  • TCP 부하 분산기는 SSL 인증서에 대해 암호화되지 않은 비공개 키가 필요하지 않습니다.
  • Cloud VPN 설정은 전역 동적 라우팅과 함께 Cloud Router를 사용해야 합니다. Cloud VPN이 정적 라우팅을 사용하는 경우, 대신 Cloud Service Mesh를 사용하는 프록시를 사용할 수 있습니다. 자세한 내용은 하이브리드 배포를 위한 네트워크 에지 서비스 설정을 참조하세요.

HTTPS 부하 분산기 만들기에 대한 자세한 내용은 하이브리드 연결로 내부 애플리케이션 부하 분산기 설정을 참조하세요. TCP 부하 분산기 만들기에 대한 자세한 내용은 하이브리드 연결로 리전 내부 프록시 네트워크 부하 분산기 설정을 참조하세요.

다음 단계