Conectar-se a um host do GitHub Enterprise (original) (raw)

Conectar-se a um host do GitHub Enterprise

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Esta página explica como conectar um host do GitHub Enterprise ao Cloud Build.

Antes de começar

Permissões do IAM obrigatórias

Para conectar seu host do GitHub Enterprise, conceda o papel de Administrador de conexão do Cloud Build (roles/cloudbuild.connectionAdmin) à sua conta de usuário.

Para adicionar os papéis necessários à conta de usuário, consulte Como configurar o acesso aos recursos do Cloud Build. Para saber mais sobre os papéis do IAM associados ao Cloud Build, consulte Papéis e permissões do IAM.

Para criar conexões usando as etapas de instalação do gcloud, conceda o papel de administrador do Secret Manager (roles/secretmanager.admin) ao agente de serviço do Cloud Build executando o comando abaixo no projeto Google Cloud :

      PN=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
      CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com"
       gcloud projects add-iam-policy-binding ${PROJECT_ID} \
         --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \
         --role="roles/secretmanager.admin"

Se a instância do GitHub Enterprise estiver hospedada em uma rede particular, consulte Criar repositórios do GitHub Enterprise em uma rede particular para saber mais sobre as outras funções do IAM necessárias antes da conexão do host.

Console

Para conectar o host do GitHub Enterprise ao Cloud Build:

  1. Abra a página Repositórios no console do Google Cloud .
    Abrir a página Repositórios
    Você vai encontrar a página Repositórios.
  2. No seletor de projetos, na barra superior, selecione o projeto Google Cloud .
  3. Na parte de cima da página, selecione a guia 2ª geração.
  4. Clique em Criar conexão de host para conectar um novo host ao Cloud Build.
  5. No painel à esquerda, selecione GitHub Enterprise como provedor de origem.
  6. Na seção Configurar conexão, insira as seguintes informações:
    1. Região: selecione uma região para a conexão.
    2. Nome: insira um nome para a conexão.
  7. Na seção Detalhes do host, insira as seguintes informações:
    1. URL do host: insira o URL do host da sua conexão. Por exemplo, github.example.com
    2. Certificado de AC: clique em "Procurar" para fazer upload do certificado autoassinado.
    3. Em Tipo de conexão, selecione uma das seguintes opções:
      1. Internet pública: selecione essa opção se a instância for acessível pela Internet pública.
      2. Acesso à rede particular: selecione essa opção se a instância estiver hospedada em uma rede particular.
      3. Em Serviço do diretório de serviços, selecione o local do seu serviço:
        * No projeto your-project
        * Em outro projeto
        * Inserir manualmente
        1. Se você selecionar Em outro projeto ou Inserir manualmente, insira as seguintes informações:
        * Project: insira ou selecione o ID do Google Cloud projeto no menu suspenso.
        * Região: esse campo pré-seleciona a região da sua conexão. A região especificada para o serviço precisa corresponder à região associada à conexão.
        2. Namespace: selecione o namespace do serviço.
        3. Serviço: selecione o nome do serviço no seu namespace.
  8. Clique em Conectar.
    Depois de clicar no botão Conectar, você vai precisar criar um app GitHub no seu host do GitHub Enterprise e instalá-lo em uma conta de usuário ou organização. Um token de autenticação do host do GitHub Enterprise será criado e armazenado neste projeto como um secret do Secret Manager. Para revogar o acesso, desinstale ou exclua o app GitHub do seu host a qualquer momento.
    O Cloud Build armazena os dados de autenticação do app GitHub criado como secrets no Secret Manager no seu projeto. Esses dados incluem sua chave privada e a chave secreta do webhook. A chave privada é usada como um método de autenticação para acessar a API do servidor corporativo. O secret do webhook é usado para validar os eventos enviados do servidor para o Cloud Build. A conta de agente de serviço do Cloud Build (service-{projectNumber}@gcp-sa-cloudbuild.iam.gserviceaccount.com) é usada para acessar seu secret. Para conferir o secret, consulte Listar secrets e conferir os detalhes do secret.
    Depois de autorizar o app GitHub do Cloud Build, você será redirecionado para a página Repositóriosdo Cloud Build.

gcloud

Para conectar o host do GitHub Enterprise ao Cloud Build usando comandos gcloud, siga estas etapas:

  1. Digite o seguinte comando para criar uma conexão do GitHub Enterprise:
gcloud builds connections create github-enterprise CONNECTION_NAME \  
  --host-uri=HOST_URI --region=REGION  

Em que:

--service-directory-service=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME \  
--ssl-ca-file=SSL_CA_FILEPATH  

Em que:

  1. Siga o link retornado na etapa anterior para criar e instalar o aplicativo Cloud Build do GitHub no seu servidor corporativo.
  2. Digite o seguinte comando para verificar a conexão:
gcloud builds connections describe CONNECTION_NAME --region=REGION  

Em que:

Conectar-se a um host do GitHub Enterprise de maneira programática

Para conectar o host do GitHub Enterprise ao Cloud Build de forma programática, instale o app GitHub seguindo estas etapas:

  1. Registre um novo app do GitHub. Por exemplo, você pode registrar um novo app do GitHub em https://my-ghe-server.net/settings/apps/new.
  2. Preencha os campos na página:
    1. Nome do app do GitHub: insira um nome para o app.
    2. URL da página inicial: insira um URL para o servidor do GitHub Enterprise.
    3. Desmarque a caixa Expire user authorization tokens.
    4. Na seção Webhook, siga estas etapas:
      • Ativo: marque a caixa para ativar o webook.
      • URL do webhook: insira o URL do webhook. Por exemplo, https://cloudbuild.googleapis.com/v2/projects/{PROJECT_NUMBER}/locations/{REGION}/connections:processWebhook. A região no URL do webhook precisa corresponder à região da sua conexão.
      • Secret do webhook: insira uma string gerada aleatoriamente e anote-a.
    5. Na seção Permissões, especifique as seguintes permissões:
      • Permissões do repositório:
        * Cheques: leitura e gravação
        * Conteúdo: leitura e gravação
        * Problemas: somente leitura
        * Metadados Somente leitura
        * Status de confirmação: somente leitura
        * Solicitações de envio: somente leitura
    6. Na seção Assinar eventos, marque as seguintes caixas:
      • Verificar execução
      • Check suite
      • Comentário de confirmação
      • Comentário sobre o problema
      • Solicitação de envio
      • Comentário de análise de solicitação de envio
      • Push
      • Repositório
    7. Marque a caixa Qualquer conta para permitir que o app do GitHub seja instalado por qualquer usuário ou organização.
  3. Clique em Criar app GitHub para criar seu app GitHub.
    Ao clicar em Criar app GitHub, você será redirecionado para a página do app. Anote o ID e o slug do app. O slug do app pode ser encontrado no último segmento do URL da página. Por exemplo, https://my-ghe-server.net/settings/apps/{app-slug}
  4. Na seção Chaves privadas, clique em Gerar uma chave privada.
    Armazene o arquivo baixado em um local seguro.
  5. No painel à esquerda, selecione Instalar app.
    Selecione o usuário ou a organização em que você quer instalar o app. Depois que ele for instalado, anote o ID de instalação. O ID de instalação pode ser encontrado no último segmento do URL da página. Por exemplo, https://my-ghe-server.net/settings/installations/{installation-id}

Depois de instalar o app GitHub, siga as etapas abaixo para conectar o host do GitHub Enterprise de maneira programática usando o Terraform ougcloud.

Terraform

Depois de instalar o app GitHub, você pode conectar o host do GitHub Enterprise ao Cloud Build usando o provedor do Terraform do Google.

No exemplo a seguir, o snippet de código faz o seguinte:

// Configure the terraform google provider  
terraform {  
  required_providers {  
    google = {}  
  }  
}  
// create Secrets and grant permissions to the Service Agent  
resource "google_secret_manager_secret" "private-key-secret" {  
    project = "PROJECT_ID"  
    secret_id = "PRIVATE_KEY_SECRET"  
    replication {  
        auto {}  
    }  
}  
resource "google_secret_manager_secret_version" "private-key-secret-version" {  
    secret = google_secret_manager_secret.private-key-secret.id  
    secret_data = file("private-key.pem")  
}  
resource "google_secret_manager_secret" "webhook-secret-secret" {  
    project = "PROJECT_ID"  
    secret_id = "WEBHOOK_SECRET"  
    replication {  
        auto {}  
    }  
}  
resource "google_secret_manager_secret_version" "webhook-secret-secret-version" {  
    secret = google_secret_manager_secret.webhook-secret-secret.id  
    secret_data = "WEBHOOK_SECRET_VALUE"  
}  
data "google_iam_policy" "serviceagent-secretAccessor" {  
    binding {  
        role = "roles/secretmanager.secretAccessor"  
        members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"]  
    }  
}  
resource "google_secret_manager_secret_iam_policy" "policy-pk" {  
  project = google_secret_manager_secret.private-key-secret.project  
  secret_id = google_secret_manager_secret.private-key-secret.secret_id  
  policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data  
}  
resource "google_secret_manager_secret_iam_policy" "policy-whs" {  
  project = google_secret_manager_secret.webhook-secret-secret.project  
  secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id  
  policy_data = data.google_iam_policy.serviceagent-secretAccessor.policy_data  
}  
// create the connection and add the repository resource ---  
resource "google_cloudbuildv2_connection" "my-connection" {  
    project = "PROJECT_ID"  
    location = "REGION"  
    name = "CONNECTION_NAME"  
    github_enterprise_config {  
        host_uri = "URI"  
        private_key_secret_version = google_secret_manager_secret_version.private-key-secret-version.id  
        webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id  
        app_id = "APP_ID"  
        app_slug = "APP_SLUG"  
        app_installation_id = INSTALLATION_ID  
    }  
    depends_on = [  
        google_secret_manager_secret_iam_policy.policy-pk,  
        google_secret_manager_secret_iam_policy.policy-whs  
    ]  
}  

Em que:

gcloud

Depois de instalar o app do GitHub, siga estas etapas para conectar o host do GitHub Enterprise por programação usando gcloud:

  1. Armazene seus secrets no Secret Manager:
echo -n WEBHOOK_SECRET | gcloud secrets create mygheapp-webhook-secret --data-file=-  
# creating secret from the downloaded private key:  
gcloud secrets create mygheapp-private-key --data-file=PRIVATE_KEY_FILE  

Em que:

  1. Conceda acesso ao agente de serviço do Cloud Build para acessar seus segredos:
PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")  
CLOUD_BUILD_SERVICE_AGENT="service-$PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"  
gcloud secrets add-iam-policy-binding mygheapp-webhook-secret \  
  --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \  
  --role="roles/secretmanager.secretAccessor"  
gcloud secrets add-iam-policy-binding mygheapp-private-key \  
  --member="serviceAccount:$CLOUD_BUILD_SERVICE_AGENT" \  
  --role="roles/secretmanager.secretAccessor"  

Em que:

  1. Crie sua conexão do GitHub Enterprise:
gcloud builds connections create github-enterprise CONNECTION_NAME \  
  --host-uri=HOST_URI \  
  --app-id=APP_ID \  
  --app-slug=APP_SLUG \  
  --private-key-secret-version=projects/PROJECT_ID/secrets/mygheapp-private-key/versions/1 \  
  --webhook-secret-secret-version=projects/PROJECT_ID/secrets/mygheapp-webhook-secret/versions/1 \  
  --app-installation-id=INSTALLATION_ID \  
  --region=REGION  

Em que:

  --service-directory-service=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME \  
  --ssl-ca-file=SSL_CA_FILEPATH  

Em que:

Próximas etapas