Auf dieser Seite wird erläutert, wie Sie einen GitHub Enterprise-Host mit Cloud Build verbinden.
Hinweise
-
Enable the Cloud Build and Secret Manager APIs.
- Überprüfen Sie, ob Sie die neueste Version von GitHub Enterprise haben.
Achten Sie darauf, dass Sie Ihrem GitHub Enterprise-Host eine benutzerdefinierte Domain zuordnen und ein gültiges SSL-Zertifikat für Ihren Host haben.
Wenn Ihre GitHub Enterprise-Instanz in einem privaten Netzwerk gehostet wird, lesen Sie Repositories aus GitHub Enterprise in einem privaten Netzwerk erstellen, bevor Sie die Anleitung auf dieser Seite ausführen.
Erforderliche IAM-Berechtigungen
Zum Verbinden Ihres GitHub Enterprise-Hosts weisen Sie dem Nutzerkonto die Rolle „Cloud Build-Verbindungsadministrator“ (roles/cloudbuild.connectionAdmin
) zu.
Informationen zum Hinzufügen der erforderlichen Rollen zu Ihrem Nutzerkonto finden Sie unter Zugriff auf Cloud Build-Ressourcen konfigurieren. Weitere Informationen zu IAM-Rollen, die mit Cloud Build verknüpft sind, finden Sie unter IAM-Rollen und -Berechtigungen.
Wenn Sie Verbindungen mit den gcloud
-Installationsschritten erstellen möchten, weisen Sie dem Cloud Build-Dienst-Agent die Rolle „Secret Manager-Administrator“ (roles/secretmanager.admin
) zu, indem Sie den folgenden Befehl in Ihrem Google Cloud -Projekt ausführen:
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"
Wenn Ihre GitHub Enterprise-Instanz in einem privaten Netzwerk gehostet wird, finden Sie unter Repositories aus GitHub Enterprise in einem privaten Netzwerk erstellen Informationen zu zusätzlichen IAM-Rollen, die vor der Hostverbindung erforderlich sind.
Verbindung zu einem GitHub Enterprise-Host herstellen
Console
So verbinden Sie Ihren GitHub Enterprise-Host mit Cloud Build:
Öffnen Sie in der Google Cloud Console die Seite Repositories.
Die Seite Repositories wird angezeigt.
Wählen Sie in der Projektauswahl in der oberen Leiste Ihr Google Cloud -Projekt aus.
Wähle oben auf der Seite den Tab 2. Generation aus.
Klicken Sie auf Hostverbindung erstellen, um einen neuen Host mit Cloud Build zu verbinden.
Wählen Sie im linken Bereich GitHub Enterprise als Quellanbieter aus.
Geben Sie im Abschnitt Verbindung konfigurieren die folgenden Informationen ein:
Region: Wählen Sie eine Region für Ihre Verbindung aus.
Name: Geben Sie einen Namen für die Verbindung ein.
Geben Sie im Abschnitt Hostdetails die folgenden Informationen ein:
Host-URL: Geben Sie die Host-URL für Ihre Verbindung ein. z. B.
github.example.com
.CA-Zertifikat: Klicken Sie auf „Durchsuchen“, um Ihr selbst signiertes Zertifikat hochzuladen.
Wählen Sie unter Verbindungstyp eine der folgenden Optionen aus:
Öffentliches Internet: Wählen Sie diese Option aus, wenn Ihre Instanz über das öffentliche Internet zugänglich ist.
Zugriff auf privates Netzwerk: Wählen Sie diese Option aus, wenn Ihre Instanz in einem privaten Netzwerk gehostet wird.
Wählen Sie unter Service Directory-Dienst den Standort für Ihren Dienst aus:
- In Projekt
your-project
- In einem anderen Projekt
- Manuell eingeben
Wenn Sie In einem anderen Projekt oder Manuell eingeben auswählen, geben Sie die folgenden Informationen ein:
Projekt: Geben Sie Ihre Google Cloud Projekt-ID ein oder wählen Sie sie im Drop-down-Menü aus.
Region: In diesem Feld wird die Region Ihrer Verbindung vorausgewählt. Die für Ihren Dienst angegebene Region muss mit der Region übereinstimmen, die mit Ihrer Verbindung verknüpft ist.
Namespace: Wählen Sie den Namespace Ihres Dienstes aus.
Dienst: Wählen Sie den Dienstnamen in Ihrem Namespace aus.
- In Projekt
Klicken Sie auf Verbinden.
Nach dem Klicken auf die Schaltfläche Verbinden werden Sie aufgefordert, eine GitHub-App auf Ihrem GitHub Enterprise-Host zu erstellen und in einem Nutzerkonto oder einer Organisation zu installieren. Ein Authentifizierungstoken von Ihrem GitHub Enterprise-Host wird erstellt und in diesem Projekt als Secret Manager-Secret gespeichert. Sie können den Zugriff jederzeit widerrufen, indem Sie die GitHub-App von Ihrem Host deinstallieren oder löschen.
Cloud Build speichert die Authentifizierungsdaten der erstellten GitHub-App als Secrets in Secret Manager in Ihrem Projekt. Diese Daten umfassen Ihren privaten Schlüssel und Ihr Webhook-Secret. Der private Schlüssel wird als Authentifizierungsmethode für den Zugriff auf die API des Enterprise-Servers verwendet. Das Webhook-Secret wird verwendet, um die vom Server an Cloud Build gesendeten Ereignisse zu validieren. Das Cloud Build Service Agent-Konto (
service-{projectNumber}@gcp-sa-cloudbuild.iam.gserviceaccount.com
) wird verwendet, um auf Ihr Secret zuzugreifen. Informationen zum Aufrufen Ihres Secrets finden Sie unter Secrets auflisten und Secret-Details ansehen.Nachdem Sie die Cloud Build-GitHub-App autorisiert haben, werden Sie zur Cloud Build-Seite Repositories weitergeleitet.
gcloud
Führen Sie die folgenden Schritte aus, um Ihren GitHub Enterprise-Host mit gcloud
-Befehlen mit Cloud Build zu verbinden:
Geben Sie den folgenden Befehl ein, um eine GitHub Enterprise-Verbindung zu erstellen:
gcloud builds connections create github-enterprise CONNECTION_NAME \ --host-uri=HOST_URI --region=REGION
Wobei:
- CONNECTION_NAME ist ein Name für Ihre GitHub Enterprise-Hostverbindung in Cloud Build.
- HOST_URI ist der URI Ihrer GitHub Enterprise-Instanz. Beispiel:
https://mmy-ghe-server.net
. - REGION ist die Region für Ihre Verbindung.
Wenn sich Ihre GitHub Enterprise-Instanz in einem privaten Netzwerk befindet, geben Sie Ihre Service Directory-Ressource an. Sie können auch Ihr CA-Zertifikat angeben.
--service-directory-service=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME \ --ssl-ca-file=SSL_CA_FILEPATH
Wobei:
- PROJECT_ID ist die Projekt-ID Ihres Google Cloud .
- REGION ist die Region für Ihre Verbindung.
- NAMESPACE ist der Namespace für Ihren Dienst.
- SERVICE_NAME ist der Name Ihres Dienstes in Ihrem Namespace.
- SSL_CA_FILEPATH ist der Pfad zu Ihrem CA-Zertifikat.
Nachdem Sie den Befehl
gcloud builds connections...
ausgeführt haben, erhalten Sie einen Link zur Installation der Cloud Build-GitHub-App.Folgen Sie dem im vorherigen Schritt zurückgegebenen Link, um die Cloud Build GitHub-App auf Ihrem Unternehmensserver zu erstellen und zu installieren.
Geben Sie den folgenden Befehl ein, um die Verbindung zu prüfen:
gcloud builds connections describe CONNECTION_NAME --region=REGION
Wobei:
- CONNECTION_NAME ist der Name Ihrer GitHub Enterprise-Hostverbindung in Cloud Build.
- REGION ist die Region für Ihre Verbindung.
Wenn das Feld
installationState
aufCOMPLETE
gesetzt ist, haben Sie die Verbindung erfolgreich installiert. Andernfalls enthält das FeldinstallationState
einen Link zu weiteren erforderlichen Schritten.
Programmatische Verbindung zu einem GitHub Enterprise-Host herstellen
Wenn Sie Ihren GitHub Enterprise-Host programmatisch mit Cloud Build verbinden möchten, müssen Sie die GitHub-App installieren. Führen Sie dazu die folgenden Schritte aus:
Registrieren Sie eine neue GitHub-App, z. B. unter
https://my-ghe-server.net/settings/apps/new
.Füllen Sie die Felder auf der Seite aus:
- Name der GitHub-App: Geben Sie einen Namen für Ihre App ein.
- Homepage-URL: Geben Sie eine URL für Ihren GitHub Enterprise Server ein.
- Entfernen Sie das Häkchen aus dem Kästchen Expire user authorization tokens (Ablauf von Nutzerautorisierungstokens).
- Führen Sie im Bereich Webhook die folgenden Schritte aus:
- Aktiv: Aktivieren Sie das Kästchen, um Ihren Webhook zu aktivieren.
- Webhook URL (Webhook-URL): Geben Sie Ihre Webhook-URL ein. Beispiel:
https://cloudbuild.googleapis.com/v2/projects/{PROJECT_NUMBER}/locations/{REGION}/connections:processWebhook
. Die Region in der Webhook-URL muss mit der Region Ihrer Verbindung übereinstimmen. - Webhook-Secret: Geben Sie einen zufällig generierten String ein und notieren Sie ihn.
- Geben Sie im Bereich Berechtigungen die folgenden Berechtigungen an:
- Repository-Berechtigungen:
- Checks: Lesen und Schreiben
- Inhalte: Lesen und Schreiben
- Probleme: Schreibgeschützt
- Metadaten (schreibgeschützt)
- Commit-Status: Schreibgeschützt
- Pull-Anfragen: Schreibgeschützt
- Repository-Berechtigungen:
- Klicken Sie im Bereich Ereignisse abonnieren die folgenden Kästchen an:
- Schecklauf
- Testsuite
- Commit-Kommentar
- Problemkommentar
- Pull-Anfrage
- Kommentar zur Überprüfung von Pull-Anfragen
- Push
- Repository
- Klicken Sie das Kästchen für Beliebiges Konto an, damit Ihre GitHub-App von jedem Nutzer oder jeder Organisation installiert werden kann.
Klicken Sie auf GitHub-App erstellen, um Ihre GitHub-App zu erstellen.
Nachdem Sie auf GitHub-App erstellen geklickt haben, werden Sie zur App-Seite weitergeleitet. Notieren Sie sich Ihre App-ID und den App-Slug. Der App-Slug befindet sich im letzten Segment der URL der Seite. z. B.
https://my-ghe-server.net/settings/apps/{app-slug}
.Klicken Sie im Bereich Private keys (Private Schlüssel) auf Generate a private key (Privaten Schlüssel generieren).
Speichern Sie die heruntergeladene Datei an einem sicheren Ort.
Wählen Sie im linken Bereich App installieren aus.
Wählen Sie den Nutzer oder die Organisation aus, für den bzw. die Sie die App installieren möchten. Notieren Sie sich nach der Installation der App die Installations-ID. Die Installations-ID finden Sie im letzten Segment der URL der Seite. Beispiel:
https://my-ghe-server.net/settings/installations/{installation-id}
.
Nachdem Sie Ihre GitHub-App installiert haben, führen Sie die folgenden Schritte aus, um Ihren GitHub Enterprise-Host programmatisch mit Terraform oder gcloud
zu verbinden.
Terraform
Nachdem Sie Ihre GitHub-App installiert haben, können Sie Ihren GitHub Enterprise-Host mit dem Google Terraform-Provider mit Cloud Build verbinden.
Im folgenden Beispiel führt das Code-Snippet Folgendes aus:
- Konfiguriert den Terraform Google-Anbieter
- Erstellt ein Secret zum Speichern des privaten Schlüssels und des Webhook-Secrets der GitHub-App.
- Gewährt dem Cloud Build-Dienst-Agent die erforderlichen Berechtigungen für den Zugriff auf Secrets
Erstellt eine GitHub Enterprise-Verbindung
// 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 ] }
Wobei:
- PROJECT_ID ist die Projekt-ID Ihres Google Cloud .
- PRIVATE_KEY_SECRET ist das Secret mit dem privaten Schlüssel Ihrer GitHub-App.
- WEBHOOK_SECRET ist der Secret-Name, der den Webhook-Secret-Wert Ihrer GitHub-App enthält.
- WEBHOOK_SECRET_VALUE ist der Wert des Webhook-Secrets Ihrer GitHub-App.
- REGION ist die Region für Ihre Verbindung.
- CONNECTION_NAME ist ein Name für Ihre GitHub Enterprise-Hostverbindung in Cloud Build.
- URI ist der URI Ihrer Verbindung. Beispiel:
https://my-github-enterprise-server.net
. - APP_ID ist die ID Ihrer GitHub-App.
- APP_SLUG ist der App-Slug. Beispiel:
https://github.com/settings/apps/{app-slug}
. - INSTALLATION_ID ist die Installations-ID Ihrer GitHub-App. Sie finden die Installations-ID in der URL Ihrer Cloud Build-GitHub-App,
https://github.com/settings/installations/{installation-id}
.
gcloud
Nachdem Sie Ihre GitHub-App installiert haben, führen Sie die folgenden Schritte aus, um Ihren GitHub Enterprise-Host programmatisch mit gcloud
zu verbinden:
Secrets in Secret Manager speichern:
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
Wobei:
- WEBHOOK_SECRET ist der String, den Sie für Ihr Webhook-Secret erstellt haben.
- PRIVATE_KEY_FILE ist der Pfad zum generierten privaten Schlüssel.
Gewähren Sie dem Cloud Build-Dienst-Agent Zugriff auf Ihre Secrets:
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"
Wobei:
- PROJECT_ID ist die Projekt-ID Ihres Google Cloud .
- CLOUD_BUILD_SERVICE_AGENT ist Ihr Konto pro Produkt und Projekt.
GitHub Enterprise-Verbindung erstellen:
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
Wobei:
- CONNECTION_NAME ist ein Name für Ihre GitHub Enterprise-Hostverbindung in Cloud Build.
- HOST_URI ist der URI Ihrer GitHub Enterprise-Instanz. Beispiel:
https://mmy-ghe-server.net
. - APP_ID ist die ID Ihrer GitHub-App.
- APP_SLUG ist der App-Slug. Beispiel:
https://my-ghe-server.net/settings/apps/app-slug
. - PROJECT_ID ist die Projekt-ID Ihres Google Cloud .
- INSTALLATION_ID ist die Installations-ID Ihrer GitHub-App, z. B.
https://my-ghe-server.net/settings/installations/installation-id
. - REGION ist die Region für Ihre Verbindung.
Wenn sich Ihre GitHub Enterprise-Instanz in einem privaten Netzwerk befindet, geben Sie Ihre Service Directory-Ressource an. Sie können auch Ihr CA-Zertifikat angeben.
--service-directory-service=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME \ --ssl-ca-file=SSL_CA_FILEPATH
Wobei:
- PROJECT_ID ist die Projekt-ID Ihres Google Cloud .
- REGION ist die Region für Ihre Verbindung.
- NAMESPACE ist der Namespace Ihres Dienstes.
- SERVICE_NAME ist der Name Ihres Dienstes in Ihrem Namespace.
- SSL_CA_FILEPATH ist der Pfad zu Ihrem CA-Zertifikat.