Vous l'aurez constaté, Kubernetes gagne en popularité et de nombreuses entreprises l'utilisent  désormais pour orchestrer leurs microservices en conteneur. De plus, les microservices augmentent le cycle de publication car il n'est pas nécessaire de créer et de déployer une énorme application monolithique à chaque modification minime.

Les équipes de DevOps doivent donc pouvoir déployer plusieurs fois par jour. Cependant, le processus continu d'intégration et de livraison devient un goulot d'étranglement car à la fin du processus de développement, les modifications de code vont déclencher un pipeline dans un outil de CI et cet outil est généralement partagé par tous vos microservices. Alors, que pouvons-nous faire? La réponse est Jenkins X:

Pour rappel nous avons déjà abordé le sujet il y a plusieurs articles de cela, seulement aujourd'hui nous irons plus loin.

Jenkins X vous permet de créer un système CI / CD distribué et découplé.

Créer un Cluster

Pour créer un cluster Kubernetes avec Jenkins X, il existe plusieurs alternatives. Vous pouvez utiliser Minikube, AWS, Azure, Oracle, OpenShift ou Google Cloud, mais pour simplifier, GCP sera choisi pour cet exemple.  

Conditions préalables :

  • Installer l'outil jx
  • Créer un compte Google Cloud
  • Créer un projet sur Google Cloud
  • Installer Git, gcloud et kubectl

C'est parti

Connectez-vous à votre compte Google Cloud:  

gcloud auth login

Créer un cluster:

jx create cluster gke --skip-login --default-admin-password=mypassword -n jenkinsx-demo

--default-admin-password définit le mot de passe pour accéder à Jenkins avec l'utilisateur admin; -n définit le nom du cluster Kubernetes.  

Suivez les instructions sur la console: sélectionnez votre projet Google Cloud (my-jenkinsx-demo), la zone Google Cloud (dans ce cas, europe-west1-c), le type d’ordinateur (n1-standard-2), le nombre minimal de nœuds ( 3 par défaut), nombre maximum de nœuds (3), installer le contrôleur d'entrée, définir le domaine (choisir par défaut), définir le nom d'utilisateur GitHub et recréer l'environnement cloud Jenkins X.  

Une fois le processus terminé, deux nouveaux référentiels seront créés sur votre compte GitHub et le contexte Kubernetes sera remplacé par celui de Jenkins X.

kubectl config get-contexts

gke_authentic-host-220807_europe-west1-c_jenkinsx-demo          gke_authentic-host-220807_europe-west1-c_jenkinsx-demo          gke_authentic-host-220807_europe-west1-c_jenkinsx-demo 

Vous êtes maintenant prêt à créer vos microservices et à les déployer sur votre nouveau cluster Kubernetes!

Déploiement de Microservices

Il existe trois alternatives pour créer votre microservice et le déployer:  

  • Créez votre microservice manuellement, puis importez-le à l'aide de l'importation jx.
  • Utilisez la commande jx create Spring qui permet de créer facilement un microservice avec Spring Boot à partir de votre terminal. Les dépendances peuvent être spécifiées en incluant l’argument -d suivi de la dépendance à ajouter, par exemple. jx crée un actionneur ressort -d web -d.
  • Utilisez jx create quickstart qui vous permet de sélectionner l’un des modèles fournis par Jenkins X.

Qu'est-ce qui se passe lorsque vous utilisez l'outil jx?  

  • Crée une application dans un répertoire.
  • Initialise le référentiel et envoie le code à GitHub.
  • Ajoute Dockerfile (pour créer un conteneur) et Jenkinsfile (pour créer un pipeline).
  • Crée un diagramme Helm à déployer sur Kubernetes
  • Enregistre webhook sur votre dépôt git pour vos équipes jenkins
  • Déclenche le pipeline pour la première fois

N'oubliez pas de configurer l'API de Github pour votre instance Jenkins en vous rendant à cette URL lors de la mise en place du cluster :

Pour cet exemple, Golang sera utilisé avec l'outil de démarrage rapide fourni par Jenkins X avec la commande suivante : "jx create quickstart -l Go"

MacBook-Pro-de-admin:~ admin$ jx create quickstart -l Go
? Project name golang-http
Generated quickstart at /Users/admin/golang-http
### NO charts folder /Users/admin/golang-http/charts/golang-http
Created project at /Users/admin/golang-http

No username defined for the current Git server!
? Do you wish to use gabrielsagnard as the Git user name: Yes
The directory /Users/admin/golang-http is not yet using git
? Would you like to initialise git now? Yes
? Commit message:  Initial import

Git repository created
performing pack detection in folder /Users/admin/golang-http
--> Draft detected Go (65.746753%)
selected pack: /Users/admin/.jx/draft/packs/github.com/jenkins-x/draft-packs/packs/go
replacing placeholders in directory /Users/admin/golang-http
app name: golang-http, git server: github.com, org: gabrielsagnard, Docker registry org: gabrielsagnard
skipping directory "/Users/admin/golang-http/.git"
Using Git provider GitHub at https://github.com


About to create repository golang-http on server https://github.com with user gabrielsagnard
? Which organisation do you want to use? gabrielsagnard
? Enter the new repository name:  golang-http


Creating repository gabrielsagnard/golang-http
Pushed Git repository to https://github.com/gabrielsagnard/golang-http

Created Jenkins Project: http://jenkins.jx.35.195.129.55.nip.io/job/gabrielsagnard/job/golang-http/

Watch pipeline activity via:    jx get activity -f golang-http -w
Browse the pipeline log via:    jx get build logs gabrielsagnard/golang-http/master
Open the Jenkins console via    jx console
You can list the pipelines via: jx get pipelines
When the pipeline is complete:  jx get applications

For more help on available commands see: https://jenkins-x.io/developing/browsing/

Note that your first pipeline may take a few minutes to start while the necessary images get downloaded!

Creating GitHub webhook for gabrielsagnard/golang-http for url http://jenkins.jx.35.195.129.55.nip.io/github-webhook/

L'argument -l nous permet de filtrer par language.  *

Le seul modèle disponible pour Golang pour le moment est golang-http.  Après avoir suivi toutes les étapes et le pipeline exécuté, l'application Go sera déployée sur le namespace staging (jx-staging).

Pour nettoyer son mac des clusters existants dans le cas où vous rencontrez cette erreur :

error creating cluster failed to create staging environment: Failed to create repository /environment-myxcluster-staging due to: POST https://api.github.com/user/repos: 401 Bad credentials 
rm ~/.jx/gitAuth.yaml