Jenkins in Google Kubernetes Engine einrichten

In dieser Anleitung wird gezeigt, wie Sie Jenkins in GKE einrichten, um Ihre Pipeline für die Softwarebereitstellung zu orchestrieren.

Ziele

  • Kubernetes-Clusters mit GKE erstellen
  • Jenkins mit Helm installieren
  • Verbindung zu Jenkins herstellen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Compute Engine
  • Google Kubernetes Engine
  • Cloud Build

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Vorbereitung

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Cloud Console auf der Seite für die Projektauswahl ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Compute Engine, GKE, and Cloud Build APIs aktivieren.

    Aktivieren Sie die APIs

Umgebung vorbereiten

Bereiten Sie zuerst Ihre Bereitstellungsumgebung vor.

  1. Aktivieren Sie Cloud Shell. Cloud Shell bietet Zugriff auf die Befehlszeile in der Cloud Console und umfasst das Cloud SDK und andere Tools, die Sie für die Entwicklung in Google Cloud brauchen. Es kann mehrere Minuten dauern, bis Cloud Shell die Bereitstellung abgeschlossen hat.

    Cloud Shell aktivieren

    Wenn der Vorgang abgeschlossen ist, wird die folgende Ausgabe angezeigt:

    Welcome to Cloud Shell! For help, visit https://cloud.google.com/cloud-shell/help.
    
  2. Legen Sie für die standardmäßige Compute Engine-Zone den Wert us-east1-d fest:

    gcloud config set compute/zone us-east1-d
    
  3. Klonen Sie den Beispielcode oder laden Sie die ZIP-Datei herunter.

    git clone https://github.com/GoogleCloudPlatform/continuous-deployment-on-kubernetes.git
    

    Das Git-Repository enthält Kubernetes-Manifeste, mit denen Sie Jenkins bereitstellen werden. Die Manifeste und die zugehörigen Einstellungen werden unter Jenkins für Kubernetes Engine konfigurieren beschrieben.

  4. Wechseln Sie zum Beispielcodeverzeichnis:

    cd continuous-deployment-on-kubernetes
    

Kubernetes-Cluster erstellen

Sie können Ihren Kubernetes-Cluster mit GKE erstellen und verwalten.

  1. Stellen Sie einen Kubernetes-Cluster mithilfe von GKE bereit. Dieser Schritt kann einige Minuten dauern.

    gcloud container clusters create jenkins-cd \
      --machine-type n1-standard-2 --num-nodes 2 \
      --scopes "https://www.googleapis.com/auth/source.read_write,cloud-platform" \
      --cluster-version 1.15
    

    Durch die zusätzlichen Bereiche kann Jenkins auf Cloud Source Repositories und Container Registry zugreifen.

  2. Prüfen Sie, ob Ihr Cluster ausgeführt wird:

    gcloud container clusters list
    

    Suchen Sie nach RUNNING in der Spalte STATUS.

    NAME        LOCATION    MASTER_VERSION  MASTER_IP    MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
    jenkins-cd  us-east1-d  1.15.11-gke.15     35.231.8.57  n1-standard-2  1.15.11-gke.15   2          RUNNING
    
  3. Prüfen Sie, ob Sie eine Verbindung zu Ihrem Cluster herstellen können:

    kubectl cluster-info
    

    Wenn Sie erfolgreich eine Verbindung zu Ihrem Cluster herstellen können, werden die URLs der Kubernetes-Komponenten angezeigt:

    Kubernetes master is running at https://130.211.178.38
    GLBCDefaultBackend is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/default-http-backend
    Heapster is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/heapster
    KubeDNS is running at https://130.211.178.38/api/v1/proxy/namespaces/kube-system/services/kube-dns
    Metrics-server is running at https://130.211.178.38/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
    

Helm installieren

Verwenden Sie Helm zur Bereitstellung von Jenkins aus dem Repository.

  1. Laden Sie die Helm-Binärdatei herunter und installieren Sie sie:

    wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
    
  2. Entpacken Sie die Datei in Ihr lokales System:

    tar zxfv helm-v3.2.1-linux-amd64.tar.gz
    cp linux-amd64/helm .
    
  3. Fügen Sie sich in der rollenbasierten Zugriffssteuerung des Clusters als Clusteradministrator hinzu, damit Sie Jenkins Berechtigungen im Cluster gewähren können:

    kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin \
            --user=$(gcloud config get-value account)
    
  4. Fügen Sie das offizielle stabile Repository hinzu:

    ./helm repo add stable https://kubernetes-charts.storage.googleapis.com
    
  5. Prüfen Sie, ob Helm korrekt installiert ist. Führen Sie dazu den folgenden Befehl aus:

    ./helm version
    

    Es werden Versionen für den Client als v3.2.1 angezeigt:

    version.BuildInfo{Version:"v3.2.1", GitCommit:"fe51cd1e31e6a202cba7dead9552a6d418ded79a", GitTreeState:"clean", GoVersion:"go1.13.10"}
    

Jenkins installieren

Zur Konfiguration der Jenkins-Installation verwenden Sie eine benutzerdefinierte Wertedatei. Details zur Konfiguration finden Sie in der Datei jenkins/values.yaml.

  1. Stellen Sie das Diagramm mit Ihren Konfigurationseinstellungen über die Helm-Kommandozeile bereit:

    ./helm install cd-jenkins -f jenkins/values.yaml stable/jenkins --version 1.2.2 --wait
    

    Weitere Informationen zum Konfigurieren der Jenkins-Installation finden Sie auf der Dokumentationsseite zu Jenkins-Diagrammen.

  2. Prüfen Sie nach der Ausführung des Befehls, ob der Status des Jenkins-Pods in Running und der des Containers in READY geändert wurde:

    kubectl get pods
    

    In der Spalte READY wird 1/1 und in der Spalte STATUS wird Running angezeigt. Es kann einige Minuten dauern, bis die Initialisierung von Jenkins abgeschlossen ist.

    NAME                          READY     STATUS    RESTARTS   AGE
    cd-jenkins-7c786475dd-vbhg4   1/1       Running   0          1m
    
  3. Richten Sie in Cloud Shell die Portweiterleitung zur Jenkins-Benutzeroberfläche ein:

    export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/component=jenkins-master" -l "app.kubernetes.io/instance=cd-jenkins" -o jsonpath="{.items[0].metadata.name}")
    kubectl port-forward $POD_NAME 8080:8080 >> /dev/null &
    
  4. Prüfen Sie, ob der Jenkins-Dienst richtig erstellt wurde:

    kubectl get svc
    

    Beispielausgabe:

    NAME               CLUSTER-IP     EXTERNAL-IP   PORT(S)     AGE
    cd-jenkins         10.35.249.67   <none>        8080/TCP    3h
    cd-jenkins-agent   10.35.248.1    <none>        50000/TCP   3h
    kubernetes         10.35.240.1    <none>        443/TCP     9h
    

Die Jenkins-Installation verwendet das Kubernetes-Plugin zum Erstellen von Builder-Agents. Diese werden bei Bedarf automatisch gestartet, wenn der Jenkins-Master einen Build ausführen muss. Wenn deren Aufgabe abgeschlossen ist, werden sie automatisch beendet und ihre Ressourcen wieder dem Ressourcenpool des Clusters hinzugefügt.

Verbindung mit Jenkins herstellen

  1. Rufen Sie das Administratorpasswort ab, das vom Jenkins-Helm-Diagramm automatisch erstellt wurde:

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    
  2. Klicken Sie zum Öffnen der Jenkins-Benutzeroberfläche in Cloud Shell auf Web Preview (Webvorschau) und dann auf Preview on port 8080 (Vorschau auf Port 8080).

    port8080

  3. Klicken Sie oben rechts im Fenster auf Anmelden. Geben Sie admin in das Feld User (Nutzer) und das Passwort aus dem vorherigen Schritt in das Feld Password (Passwort) ein.

  4. Klicken Sie auf die Schaltfläche Anmelden.

Sie haben jetzt Zugriff auf Jenkins und auf einen von GKE verwalteten Kubernetes-Cluster. Zur Erweiterung dieser Lösung können Sie diese Komponenten in Ihrer Continuous Delivery-Pipeline verwenden.

Bereinigen

Bereinigen Sie nach Abschluss der Anleitung die auf der GCP erstellten Ressourcen, damit Ihnen diese nicht weiter in Rechnung gestellt werden.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

Laufwerke löschen

  1. Rufen Sie in der Cloud Console die Seite Laufwerke auf.

    Zur Seite „Laufwerke“

  2. Klicken Sie auf das Kästchen für Ihr jenkins-home-Laufwerk.
  3. Klicken Sie auf Löschen , um das Laufwerk zu löschen.

Instanzen löschen

So löschen Sie eine Compute Engine-Instanz:

  1. Öffnen Sie in der Cloud Console die Seite VM-Instanzen.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf das Kästchen für die Instanz, die Sie löschen möchten.
  3. Klicken Sie auf Löschen , um die Instanz zu löschen.

Weitere Informationen