Configurer Jenkins sur Google Kubernetes Engine

Dans ce tutoriel, nous vous expliquons comment configurer Jenkins sur GKE pour vous aider à orchestrer votre pipeline de livraison de logiciels.

Objectifs

  • Créer un cluster Kubernetes avec GKE
  • Installer Jenkins à l'aide de Helm
  • Se connecter à Jenkins

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, dont :

  • Instance
  • Google Kubernetes Engine
  • Cloud Build

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder à la page de sélection du projet

  3. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activer les API Compute Engine, GKE, and Cloud Build.

    Activer les API

Préparer l'environnement

Commencez par préparer votre environnement de déploiement.

  1. Activez Cloud Shell. Cloud Shell vous donne accès à l'interface de ligne de commande dans Cloud Console, et intègre le SDK Cloud ainsi que d'autres outils dont vous pourrez avoir besoin pour le développement dans Google Cloud. Le provisionnement de Cloud Shell peut prendre quelques minutes.

    Activer Cloud Shell

    Une fois le processus terminé, vous obtenez le résultat suivant :

    Welcome to Cloud Shell! For help, visit https://cloud.google.com/cloud-shell/help.
    
  2. Définissez la zone Compute Engine par défaut sur us-east1-d :

    gcloud config set compute/zone us-east1-d
    
  3. Clonez l'exemple de code ou téléchargez le fichier zip.

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

    Le dépôt Git contient les fichiers manifestes Kubernetes qui vous permettront de déployer Jenkins. Ces fichiers manifestes et leurs paramètres sont décrits sur la page Configurer Jenkins pour Kubernetes Engine .

  4. Accédez au répertoire de l'exemple de code :

    cd continuous-deployment-on-kubernetes
    

Créer un cluster Kubernetes

GKE vous permet de créer et de gérer votre cluster Kubernetes.

  1. Provisionnez un cluster Kubernetes à l'aide de GKE. Cette étape peut prendre plusieurs minutes.

    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
    

    Les champs d'application supplémentaires permettent à Jenkins d'accéder à Cloud Source Repositories et à Container Registry.

  2. Vérifiez que votre cluster est en cours d'exécution.

    gcloud container clusters list
    

    Recherchez la mention RUNNING dans la colonne 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. Vérifiez que vous pouvez vous connecter à votre cluster.

    kubectl cluster-info
    

    Si vous parvenez à vous connecter au cluster, les URL des composants Kubernetes s'affichent.

    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
    

Installer Helm

Vous devez vous servir de Helm pour déployer Jenkins à partir du dépôt.

  1. Téléchargez et installez le binaire Helm :

    wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
    
  2. Décompressez le fichier sur votre système local :

    tar zxfv helm-v3.2.1-linux-amd64.tar.gz
    cp linux-amd64/helm .
    
  3. Ajoutez-vous en tant qu'administrateur de cluster dans le RBAC du cluster, afin de pouvoir accorder des autorisations Jenkins au sein de ce cluster :

    kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin \
            --user=$(gcloud config get-value account)
    
  4. Ajoutez le dépôt stable officiel :

    ./helm repo add jenkinsci https://charts.jenkins.io
    ./helm repo update
    
  5. Assurez-vous que Helm est correctement installé en exécutant la commande suivante :

    ./helm version
    

    Vous constaterez que la version affichée pour le client est v3.2.1 :

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

Installer Jenkins

Vous allez utiliser un fichier de valeurs personnalisé pour configurer l'installation de Jenkins. Pour plus d'informations sur la configuration, consultez le fichier jenkins/values.yaml.

  1. À l'aide de la CLI Helm, déployez le chart avec votre ensemble de configuration :

    ./helm install cd-jenkins -f jenkins/values.yaml jenkinsci/jenkins --version 2.6.4 --wait
    

    Pour en savoir plus sur la configuration de l'installation de Jenkins, reportez-vous à la page de documentation du chart Jenkins.

  2. Une fois l'exécution de la commande terminée, vérifiez que le pod Jenkins passe à l'état Running et que le conteneur est à l'état READY :

    kubectl get pods
    

    Vous verrez s'afficher 1/1 dans la colonne READY et Running dans la colonne STATUS. Jenkins peut prendre quelques minutes pour s'initialiser.

    NAME                          READY     STATUS    RESTARTS   AGE
    cd-jenkins-7c786475dd-vbhg4   1/1       Running   0          1m
    
  3. Configurez un transfert de port vers l'UI de Jenkins à partir de Cloud Shell :

    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ésent, vérifiez que le service Jenkins a bien été créé :

    kubectl get svc
    

    Exemple de résultat :

    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
    

L'installation de Jenkins nécessite l'utilisation du plug-in Kubernetes pour que des agents de compilation soient créés. En cas de besoin, ceux-ci seront automatiquement lancés lorsque le maître Jenkins devra effectuer une compilation. Une fois leur travail terminé, ils sont automatiquement arrêtés et leurs ressources sont ajoutées au pool de ressources du cluster.

Se connecter à Jenkins

  1. Récupérez le mot de passe administrateur créé automatiquement par le graphique Helm de Jenkins :

    printf $(kubectl get secret cd-jenkins -o jsonpath="{.data.jenkins-admin-password}" | base64 --decode);echo
    
  2. Pour ouvrir l'interface utilisateur de Jenkins, cliquez sur Aperçus sur le Web dans Cloud Shell, puis sur Preview on port 8080 (Prévisualiser sur le port 8080).

    port8080

  3. Cliquez sur Se connecter dans l'angle supérieur droit de la fenêtre. Saisissez admin dans le champ Utilisateur, puis indiquez le mot de passe récupéré à l'étape précédente dans le champ Mot de passe.

  4. Cliquez sur le bouton Connexion.

Vous avez maintenant accès à Jenkins et à un cluster Kubernetes géré par GKE. Pour aller plus loin dans cette solution, vous pourriez utiliser ces composants dans votre pipeline de diffusion continue.

Effectuer un nettoyage

Une fois le tutoriel terminé, nettoyez les ressources créées sur GCP pour éviter qu'elles ne vous soient facturées par la suite.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer .
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer des disques

  1. Accédez à la page Disques dans Cloud Console.

    Accéder à la page "Disques"

  2. Cochez la case correspondant à votre disque jenkins-home.
  3. Cliquez sur Supprimer  pour supprimer le disque.

Supprimer des instances

Pour supprimer une instance Compute Engine, procédez comme suit :

  1. Dans Cloud Console, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cochez la case correspondant à à l'instance que vous souhaitez supprimer.
  3. Cliquez sur Supprimer  pour supprimer l'instance.

Étapes suivantes