Criar repositórios do GitHub Enterprise em uma rede particular

O Cloud Build permite criar gatilhos em uma instância do GitHub Enterprise. Nesta página, explicamos como usar os gatilhos do GitHub Enterprise para invocar builds em resposta a confirmações ou solicitações de envio de uma instância do GitHub Enterprise e como criar repositórios no GitHub Enterprise se a instância estiver hospedada em uma rede particular.

Antes de começar

  • Enable the Cloud Build and Service Directory APIs.

    Enable the APIs

  • Se você não criou um pool privado, siga as instruções em Criar e gerenciar pools particulares para criar um pool privado. Você vai precisar de um pool particular para criar em uma rede particular.

Criar repositórios do GitHub Enterprise em uma rede particular

Conclua as etapas a seguir para conectar sua instância do GitHub Enterprise de uma rede privada ao Cloud Build:

  1. Conceda ao agente de serviço do Cloud Build acesso ao Diretório de serviços:

    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"
    

    Substitua:

    • PROJECT_ID é o ID do projeto do Cloud Build.
    • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY é o ID do projeto do Google Cloud que contém o diretório de serviços.
  2. Conceda ao agente de serviço do Cloud Build acesso aos recursos de rede 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"
    

    Substitua:

    • PROJECT_ID é o ID do seu projeto do Cloud Build.
    • PROJECT_ID_CONTAINING_NETWORK_RESOURCE é o ID do Projeto do Google Cloud que contém o recurso de rede.
  3. Siga estas etapas para configurar um serviço do Diretório de serviços:

    1. Configure um namespace para seu serviço:

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

      Substitua:

      • NAMESPACE é o nome do namespace do Diretório de serviços.
      • LOCATION é a região em que você cria conexões e vincula repositórios.
      • PROJECT_ID_CONTAINING_SERVICE_DIRECTORY é o ID do Projeto do Google Cloud que contém o diretório de serviços.
    2. Configure um serviço para o namespace:

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

      Substitua:

      • SERVICE é o nome do seu recurso do Diretório de serviços.
      • NAMESPACE é o nome do namespace do seu Diretório de serviços.
      • LOCATION é a região em que você cria conexões e vincula repositórios.
    3. Configure um endpoint para seu serviço:

       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
      

      Substitua:

      • ENDPOINT_NAME é o nome do endpoint.
      • NAMESPACE é o nome do namespace do seu Diretório de serviços.
      • SERVICE é o nome do recurso do diretório de serviços.
      • LOCATION é a região em que você cria conexões e vincula repositórios.
      • INSTANCE_IP_ADDRESS é o endereço IP da sua instância do GitHub Enterprise na rede. Por exemplo, 123.45.67.89. Para saber mais, consulte Usar o Diretório de serviços para alcançar hosts fora do Google Cloud.
      • PORT é o nome da porta para HTTPS.
      • PROJECT_ID_CONTAINING_NETWORK é o ID do projeto do Google Cloud que contém a rede VPC.
      • NETWORK é o nome da sua rede VPC.

    Agora você pode usar o recurso de serviço (projects/{PROJECT_ID}/locations/{LOCATION}/namespaces/{NAMESPACE}/services/{SERVICE}) para criar sua conexão nas etapas a seguir.

  4. Conecte um host do GitHub Enterprise.

  5. Conecte um repositório do GitHub Enterprise.

  6. Crie um acionador do GitHub Enterprise para criar repositórios hospedados na sua instância do GitHub Enterprise.

Use o Diretório de serviços para acessar hosts fora do Google Cloud

O Service Directory usa o intervalo de endereços IP 35.199.192.0/19 para conectar o host do GitHub Enterprise. Você precisa adicionar esse intervalo à lista de permissões no seu firewall. Além disso, sua rede privada precisa ser configurada para rotear essa faixa pela conexão do Cloud VPN ou do Cloud Interconnect.

Se sua conexão usa um Cloud Router, é possível configurá-la para anunciar o intervalo para sua rede privada;

Para saber mais, consulte Configurar o acesso à rede particular.

Como usar o Cloud Load Balancing para acessar hosts fora do Google Cloud

Se a configuração da rede não permitir que você roteie o intervalo de endereços IP do diretório de serviço 35.199.192.0/19 para o Cloud VPN ou o Cloud Interconnect, crie um balanceador de carga usando o Cloud Load Balancing que direciona o tráfego para o host.

Ao criar o endpoint do Diretório de serviços, use o IP da regra de encaminhamento do balanceador de carga em vez de o endereço IP do seu host. É possível usar um balanceador de carga HTTPS interno ou um balanceador de carga interno de protocolo de controle de transmissão (TCP, na sigla em inglês) ao criar o endpoint.

Ao criar o balanceador de carga TCP, considere o seguinte:

  • Só um grupo de endpoints de rede (NEG) de conectividade híbrida é necessário para acessar o host.
  • O balanceador de carga TCP não exige a chave privada não criptografada para seu certificado SSL.
  • A configuração do Cloud VPN precisa usar o Cloud Router com roteamento dinâmico global. Se o Cloud VPN usa roteamento estático, é possível usar um proxy que usa o Cloud Service Mesh. Para saber mais, consulte Configure serviços de borda de rede para implantações híbridas.

Para saber mais sobre a criação de um balanceador de carga HTTPS, consulte Configurar um balanceador de carga de aplicativo interno com conectividade híbrida. Para saber mais sobre a criação de um balanceador de carga TCP, consulte Configurar um balanceador de carga de rede de proxy interno regional com conectividade híbrida.

Próximas etapas