In dieser Anleitung wird Folgendes beschrieben:
- Das Erstellen eines kontinuierlichen Jenkins-Integrationssystems, um Builds mit On-Demand-Agents von Jenkins in Compute Engine auszuführen
- Das Speichern Ihrer Build-Artefakte in Cloud Storage
- Das Anwenden einer Lebenszyklusrichtlinie, um ältere Build-Artefakte in Cloud Storage in kostengünstigere Speicheroptionen zu verschieben
Architektur
Das folgende Diagramm veranschaulicht den Aufbau der Anleitung.
Im Diagramm wird Jenkins ein Dienstkonto hinzugefügt, um Agent-Instanzen zu erstellen und Artefakte zur langfristigen Speicherung in Cloud Storage zu verschieben. Jenkins stellt die Instanzen während der Ausführung von Builds bereit. Wenn die Build-Artefakte älter werden, durchlaufen sie verschiedene Storage-Klassen, um die Aufbewahrungskosten zu reduzieren.
Ziele
- Mit Packer ein Basis-Image erstellen, um Ihre Jenkins-Builds auszuführen.
- Jenkins mithilfe von Cloud Marketplace bereitstellen.
- Jenkins für die Bereitstellung flüchtiger Build-Agents konfigurieren.
- Build-Artefakte in Cloud Storage hochladen.
- Lebenszyklusrichtlinien zur Reduzierung der Cloud Storage-Kosten konfigurieren.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Compute Engine
- Cloud Storage
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Sie können mithilfe des Preisrechners eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.
Vorbereitung
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Compute Engine API aktivieren.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Compute Engine API aktivieren.
Umgebung einrichten
In diesem Abschnitt konfigurieren Sie die für diese Anleitung erforderliche Infrastruktur und die benötigten Identitäten. Den Rest der Anleitung führen Sie in der Cloud Shell aus.
IAM konfigurieren
Erstellen Sie ein IAM-Dienstkonto (Identitäts- und Zugriffsverwaltung), um Berechtigungen an Jenkins zu delegieren. Mit diesem Konto kann Jenkins Daten in Cloud Storage speichern und Instanzen in Compute Engine starten. Jenkins führt Ihre Builds in sitzungsspezifischen Instanzen aus und speichert Build-Artefakte in Cloud Storage.
Dienstkonto erstellen
Erstellen Sie das Dienstkonto:
gcloud iam service-accounts create jenkins --display-name jenkins
Speichern Sie die E-Mail-Adresse des Dienstkontos und die aktuelle Google Cloud-Projekt-ID in Umgebungsvariablen, um sie in späteren Befehlen verwenden zu können:
export SA_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:jenkins" --format='value(email)') export PROJECT=$(gcloud info --format='value(config.project)')
Binden Sie die folgenden Rollen an das Dienstkonto:
gcloud projects add-iam-policy-binding $PROJECT \ --role roles/storage.admin --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.instanceAdmin.v1 \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.networkAdmin \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.securityAdmin \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/iam.serviceAccountActor \ --member serviceAccount:$SA_EMAIL
Dienstkontoschlüssel herunterladen
Nachdem Sie dem Dienstkonto die entsprechenden Berechtigungen erteilt haben, müssen Sie dessen Schlüssel erstellen und herunterladen. Bewahren Sie den Schlüssel an einem sicheren Ort auf. Sie benötigen ihn später zum Konfigurieren des JClouds-Plug-ins, das Sie für die Authentifizierung bei der Compute Engine API verwenden.
Erstellen Sie die Schlüsseldatei:
gcloud iam service-accounts keys create jenkins-sa.json --iam-account $SA_EMAIL
Klicken Sie in Cloud Shell auf Mehrmore_vert und wählen Sie dann Datei herunterladen aus.
Geben Sie
jenkins-sa.json
ein.Klicken Sie auf Herunterladen und speichern Sie die Datei lokal.
Jenkins-Agent-Image erstellen
Als Nächstes erstellen Sie ein wiederverwendbares Compute Engine-Image, das die Software und Tools für den Start als Jenkins-Ausführungsprogramm enthält.
SSH-Schlüssel für Cloud Shell erstellen
Später in dieser Anleitung erstellen Sie mit Packer Images. Zu diesem Zweck muss der Befehl ssh
mit Ihren Build-Instanzen kommunizieren. Den SSH-Zugriff ermöglichen Sie, indem Sie einen SSH-Schlüssel erstellen und in Cloud Shell hochladen:
Erstellen Sie ein SSH-Schlüsselpaar. Wenn bereits ein Schlüsselpaar vorhanden ist, wird dieses verwendet. Andernfalls wird mit dem Befehl ein neues Paar erstellt:
ls ~/.ssh/id_rsa.pub || ssh-keygen -N ""
Fügen Sie den Metadaten Ihres Projekts den öffentlichen SSH-Schlüssel für Cloud Shell hinzu:
gcloud compute project-info describe \ --format=json | jq -r '.commonInstanceMetadata.items[] | select(.key == "ssh-keys") | .value' > sshKeys.pub echo "$USER:$(cat ~/.ssh/id_rsa.pub)" >> sshKeys.pub gcloud compute project-info add-metadata --metadata-from-file ssh-keys=sshKeys.pub
Basis-Image erstellen
Als Nächstes erstellen Sie mit Packer ein VM-Basis-Image für Ihre Build-Agents, die in Jenkins als sitzungsspezifische Build-Ausführungsprogramme dienen. Für die einfachsten Jenkins-Agents muss nur Java installiert sein. Sie können das Image anpassen. Fügen Sie hierzu in der Packer-Konfiguration im Bereich provisioners
Shell-Befehle hinzu oder verwenden Sie andere Packer-Bereitsteller.
Laden Sie in Cloud Shell den neuesten Release von Packer herunter und entpacken Sie ihn. Im folgenden Beispiel wird Packer 1.7.10 verwendet. Auf der Hashicorp-Website können Sie nachsehen, ob es eine neuere Version gibt:
wget https://releases.hashicorp.com/packer/1.7.10/packer_1.7.10_linux_amd64.zip unzip packer_1.7.10_linux_amd64.zip
Erstellen Sie die Konfigurationsdatei für Ihre Packer-Image-Builds:
export PROJECT=$(gcloud info --format='value(config.project)') cat > jenkins-agent.json <<EOF { "builders": [ { "type": "googlecompute", "project_id": "$PROJECT", "source_image_family": "ubuntu-2004-lts", "source_image_project_id": "ubuntu-os-cloud", "zone": "us-central1-a", "disk_size": "50", "image_name": "jenkins-agent-{{timestamp}}", "image_family": "jenkins-agent", "ssh_username": "ubuntu" } ], "provisioners": [ { "type": "shell", "inline": ["sudo apt-get update && sudo apt-get install -y default-jdk"] } ] } EOF
Führen Sie Packer raus, um das Image zu erstellen:
./packer build jenkins-agent.json
Wenn der Build abgeschlossen ist, wird der Name des Speicherabbilds im Format
jenkins-agent-[TIMESTAMP]
angezeigt. Dabei ist[TIMESTAMP]
die Epochenzeit, zu der der Build gestartet wurde.==> Builds finished. The artifacts of successful builds are: --> googlecompute: A disk image was created: jenkins-agent-1612997575
Jenkins installieren
In diesem Abschnitt stellen Sie mithilfe von Cloud Marketplace eine Jenkins-Instanz bereit. Sie passen die Instanz entsprechend an, um das im vorherigen Abschnitt erstellte Agent-Image zu verwenden.
Rufen Sie die Cloud Marketplace-Lösung für Jenkins auf.
Klicken Sie auf Starten.
Ändern Sie das Feld Maschinentyp in 4 vCPUs, 15 GB Speicher, n1-standard-4.
Klicken Sie auf Deploy und warten Sie, bis die Jenkins-Instanz fertig bereitgestellt wurde. Anschließend sehen Sie Folgendes:
Öffnen Sie die Jenkins-Instanz im Browser. Klicken Sie hierfür auf den Link Site Address.
Melden Sie sich mit den im Detailbereich angezeigten Anmeldedaten für Admin user und Admin password bei Jenkins an.
Ihre Jenkins-Instanz kann jetzt verwendet werden.
Jenkins-Plug-ins konfigurieren
Jenkins benötigt Plug-ins, um in Compute Engine On-Demand-Agents zu erstellen und Artefakte in Cloud Storage zu speichern. Sie müssen diese Plug-ins installieren und konfigurieren.
Plug-ins installieren
- Wählen Sie in der Jenkins-UI Manage Jenkins aus.
- Klicken Sie auf Manage Plugins.
- Klicken Sie auf den Tab Available (Verfügbar).
Suchen Sie über die Filterleiste die folgenden Plug-ins und klicken Sie auf die zugehörigen Kästchen:
- Compute Engine-Plug-in
- Cloud Storage-Plug-in
Die folgende Abbildung zeigt das ausgewählte Cloud Storage-Plug-in:
Klicken Sie auf Download now and install after restart.
Klicken Sie das Kästchen Restart Jenkins when installation is complete and no jobs are running (Jenkins neu starten, wenn die Installation abgeschlossen ist und keine Jobs ausgeführt werden) an. Jenkins wird neu gestartet und installiert das Plug-in.
Anmeldedaten für Plug-ins erstellen
Sie müssen für Ihre neuen Plug-ins Google Credentials
erstellen:
- Melden Sie sich noch einmal bei Jenkins an und klicken Sie auf Manage Jenkins.
- Klicken Sie auf Credentials.
- Klicken Sie unter Store auf Jenkins.
- Klicken Sie im Hauptbereich der UI auf Global credentials (unrestricted).
Erstellen Sie die Google-Anmeldedaten:
- Klicken Sie auf Add Credentials.
- Legen Sie für Kind die Option Google Service Account from private key fest.
- Geben Sie im Feld Project Name Ihre Google Cloud-Projekt-ID ein.
- Klicken Sie auf Choose file.
- Wählen Sie die Datei
jenkins-sa.json
aus, die Sie zuvor von Cloud Shell heruntergeladen haben. Klicken Sie auf OK.
Klicken Sie auf Jenkins.
Compute Engine-Plug-in konfigurieren
Konfigurieren Sie das Compute Engine-Plug-in mit den Anmeldedaten, die für die Bereitstellung der Agent-Instanzen verwendet werden.
- Klicken Sie auf Manage Jenkins.
- Klicken Sie auf Manage Nodes and Clouds.
- Klicken Sie auf Configure Clouds.
- Klicken Sie auf Add a new Cloud.
- Klicken Sie auf Compute Engine.
Legen Sie die folgenden Einstellungen fest und ersetzen Sie
[YOUR_PROJECT_ID]
durch Ihre Google Cloud-Projekt-ID:- Name:
gce
- Project ID:
[YOUR_PROJECT_ID]
- Instance Cap:
8
- Name:
Wählen Sie das Dienstkonto in der Drop-down-Liste Service Account Credentials aus. Es wird als Ihre Google Cloud-Projekt-ID aufgeführt.
Jenkins-Instanzkonfigurationen einrichten
Nachdem Sie das Compute Engine-Plug-in konfiguriert haben, können Sie für Ihre gewünschten Build-Konfigurationen Jenkins-Instanzkonfigurationen einrichten.
- Klicken Sie auf der Seite Configure Clouds unter Instance Configurations auf Add add.
Geben Sie unter General (Allgemein) Folgendes ein:
- Name:
ubuntu-2004
- Description:
Ubuntu agent
- Labels:
ubuntu-2004
- Name:
Geben Sie unter Location Folgendes ein:
- Region<:
us-central1
- Zone:
us-central1-f
- Region<:
Klicken Sie auf Advanced.
Wählen Sie unter Machine Configuration (Maschinenkonfiguration) den Machine Type (Maschinentyp) n1-standard-1 aus.
Wählen Sie unter Networking (Netzwerk) die folgenden Einstellungen aus:
- Network: Übernehmen Sie die Standardeinstellung.
- Subnetwork: Übernehmen Sie die Standardeinstellung.
- Wählen Sie Attach External IP? aus.
Wählen Sie für Boot Disk Folgendes aus:
- Wählen Sie unter Image project Ihr Google Cloud-Projekt aus.
- Wählen Sie unter Image name das Image aus, das Sie zuvor mit Packer erstellt haben.
Klicken Sie auf Save, um Ihre Konfigurationsänderungen zu übernehmen.
Jenkins-Job zum Testen der Konfiguration erstellen
Jenkins ist so konfiguriert, dass bei Auslösung eines Jobs, der einen Agent mit dem Label ubuntu-2004
erfordert, automatisch eine Instanz gestartet wird. Erstellen Sie einen Job, mit dem Sie testen können, ob die Konfiguration erwartungsgemäß funktioniert.
- Klicken Sie auf der Jenkins-Benutzeroberfläche auf Create new job.
- Geben Sie
test
als Elementnamen ein. - Klicken Sie auf Freestyle project und dann auf OK.
- Klicken Sie die Kästchen Execute concurrent builds if necessary und Restrict where this project can run an.
- Geben Sie im Feld Label Expression den Wert
ubuntu-2004
ein. - Klicken Sie im Bereich Build auf Add Build step.
- Klicken Sie auf Execute Shell.
Geben Sie in der Befehlszeile einen Teststring ein:
echo "Hello world!"
Klicken Sie auf Save.
Klicken Sie auf Build Now, um einen Build zu starten.
Build-Artefakte in Cloud Storage hochladen
Sie können Build-Artefakte für zukünftige Analysen oder Tests speichern. Konfigurieren Sie Ihren Jenkins-Job so, dass ein Artefakt generiert und in Cloud Storage hochgeladen wird. Das Build-Log wird in denselben Bucket hochgeladen.
Erstellen Sie in Cloud Shell einen Speicher-Bucket für Ihre Artefakte:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil mb gs://$PROJECT-jenkins-artifacts
Klicken Sie auf der Jenkins-UI in der Jobliste auf Test.
Klicken Sie auf Configure.
Geben Sie unter Build im Textfeld Command Folgendes an:
env > build_environment.txt
Klicken Sie unter Post-build Actions auf Add post-build action.
Klicken Sie auf Cloud Storage Plugin.
Geben Sie im Feld Storage Location den Artefaktpfad ein und ersetzen Sie
[YOUR_PROJECT_ID]
durch Ihre Google Cloud-Projekt-ID:gs://[YOUR_PROJECT_ID]-jenkins-artifacts/$JOB_NAME/$BUILD_NUMBER
Klicken Sie auf Add Operation.
Klicken Sie auf Classic Upload.
Geben Sie im Feld File Pattern den Wert
build_environment.txt
ein.Geben Sie im Feld Storage Location den Speicherpfad ein und ersetzen Sie
[YOUR_PROJECT_ID]
durch Ihre Google Cloud-Projekt-ID:gs://[YOUR_PROJECT_ID]-jenkins-artifacts/$JOB_NAME/$BUILD_NUMBER
Klicken Sie auf Save.
Klicken Sie auf Build Now (Jetzt erstellen), um einen neuen Build zu starten. Der Build wird auf der zuvor bereitgestellten Compute Engine-Instanz ausgeführt. Wenn der Build abgeschlossen ist, wird die Artefaktdatei
build_environment.txt
in den konfigurierten Cloud Storage-Bucket hochgeladen.Rufen Sie in Cloud Shell mit
gsutil
das Build-Artefakt auf:export PROJECT=$(gcloud info --format='value(config.project)') gsutil cat gs://$PROJECT-jenkins-artifacts/test/2/build_environment.txt
Verwaltung des Objektlebenszyklus konfigurieren
Sie greifen in der Regel eher auf neuere Build-Artefakte zu. Damit Sie bei selten aufgerufenen Objekten Kosten sparen, verwalten Sie den Objektlebenszyklus, um Artefakte von leistungsstärkeren Speicherklassen in kostengünstigere Speicherklassen mit höherer Latenz zu verschieben.
Erstellen Sie in Cloud Shell die Datei für die Lebenszykluskonfiguration, um alle Objekte nach 30 Tagen zu Nearline und dann nach 365 Tagen zu Coldline zu übertragen.
cat > artifact-lifecycle.json <<EOF { "lifecycle": { "rule": [ { "action": { "type": "SetStorageClass", "storageClass": "NEARLINE" }, "condition": { "age": 30, "matchesStorageClass": ["MULTI_REGIONAL", "STANDARD", "DURABLE_REDUCED_AVAILABILITY"] } }, { "action": { "type": "SetStorageClass", "storageClass": "COLDLINE" }, "condition": { "age": 365, "matchesStorageClass": ["NEARLINE"] } } ] } } EOF
Laden Sie die Konfigurationsdatei in Ihren Artefaktspeicher-Bucket hoch:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil lifecycle set artifact-lifecycle.json gs://$PROJECT-jenkins-artifacts
Bereinigen
Löschen Sie alle Jenkins-Agents, die noch ausgeführt werden:
gcloud compute instances list --filter=metadata.jclouds-group=ubuntu-2004 --uri | xargs gcloud compute instances delete
Löschen Sie mithilfe von Cloud Deployment Manager die Jenkins-Instanz:
gcloud deployment-manager deployments delete jenkins-1
Löschen Sie den Cloud Storage-Bucket:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil -m rm -r gs://$PROJECT-jenkins-artifacts
Löschen Sie das Dienstkonto:
export SA_EMAIL=$(gcloud iam service-accounts list --filter="displayName:jenkins" --format='value(email)') gcloud iam service-accounts delete $SA_EMAIL
Weitere Informationen
- Kontinuierliches Deployment in Kubernetes Engine mit Jenkins
- Jenkins in Kubernetes Engine bereitstellen
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center