Remarque :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction à Oracle Cloud Infrastructure Free Tier.
- Il utilise des exemples de valeur pour les informations d'identification Oracle Cloud Infrastructure, la location et les compartiments. A la fin de votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
Créer des pipelines OCI DevOps pour créer et déployer les microservices Golang
Introduction
Cela fait partie de quatre séries de tutoriels en six parties qui vous montrent comment déployer un ensemble temporaire de ressources sur un cluster OKE à l'aide de microservices Golang représentant l'utilisation du kit SDK OCI, OCI-CLI, Resource Manager, OCI Devops et Helm pour déployer et détruire Apache Airflow.
Objectif
Dans ce tutoriel, vous apprendrez à créer des pipelines OCI DevOps pour la création et le déploiement.
Prérequis
- Réalisation du tutoriel précédent dans ce parcours de formation, Partie 3/6 : création d'un projet OCI Devops, configuration des droits d'accès et du référentiel de code pour les microservices.
Tâche 1 : Explorer le code de connexion
-
Ce microservice est un exemple de code dans Golang utilisé pour créer un jeton JWT et le renvoyer à l'utilisateur. Ce jeton sera ensuite utilisé par les go-microservices pour authentifier l'appel. Il s'agit d'une méthode simple d'authentification qui garantit la sécurité de ce tutoriel.
-
Le référentiel contient tous les fichiers requis pour le déploiement sur OKE à l'aide du service OCI DevOps, tels que les graphiques Helm, Dockerfile et
build_spec.yaml
.
Remarque
Le code a déjà été téléchargé dans votre référentiel OCI nommé go-login lors des étapes précédentes de cet exercice.
Tâche 2 : Explorer le code des microservices go
-
Ce microservice est un exemple de code permettant d'effectuer les tâches suivantes :
Méthode Description /oci-init Ce routage exécutera un travail d'application de pile sur le gestionnaire de ressources OCI. Cette opération exécutera une terraform pour créer un pool de noeuds sur le cluster OKE. Elle démarrera également le pipeline de build OCI Devops pour installer la circulation de l'air sur les nouveaux noeuds. /oci-destroy Cela supprimera le déploiement de flux d'air sur OKE, puis exécutera la destruction de pile sur le gestionnaire de ressources pour supprimer le pool de noeuds supplémentaire -
Le référentiel contient tous les fichiers nécessaires au déploiement sur OKE à l'aide du service OCI DevOps, tels que les graphiques Helm, Dockerfile et
build_spec.yaml
.
Remarque
Le code a déjà été téléchargé dans votre référentiel OCI appelé go-microservice lors des étapes précédentes de cet atelier.
Tâche 3 : création des artefacts DevOps pour la connexion Go et le microservice Go
Avant de créer le pipeline de build DevOps, nous devons créer les artefacts qui se connecteront aux résultats de build (package Helm et image de conteneur).
-
Accédez au registre OCI que vous avez créé pour ce tutoriel.
-
Cliquez sur les artefacts sous le projet DevOps, puis sur Ajouter un artefact et saisissez Référentiel d'images de conteneur.
Remarque importante concernant l'URL de registre :
-
Il s'agit de la base du registre pour la région sa-saopaulo-1.
-
Vérifiez le code de votre région, qui sera différent si vous n'utilisez pas "sa-saopaulo-1". Pour plus d'informations, reportez-vous à Régions et domaines de disponibilité.
-
-
Répétez l'étape 2 et ajoutez l'artefact go-microservice.
-
Créez un nouvel artefact général pour stocker les valeurs Helm pour go-login en collant le contenu du fichier
values.yaml
à partir du référentiel de code. -
Créez un nouvel artefact général pour stocker les valeurs Helm pour go-microservice en collant le contenu du fichier
values.yaml
à partir du référentiel de code. -
Créez un artefact de type de graphique Helm pour la connexion Go. Vous devez définir l'espace de noms et le code région corrects sur l'URL du graphique.
-
Créez un artefact de type de graphique Helm pour le microservice Go. Vous devez définir l'espace de noms et le code région corrects sur l'URL du graphique.
A ce stade, vous devez disposer des artefacts suivants dans votre projet DevOps.
Tâche 4 : création du pipeline de build Devops pour la connexion directe
-
Accédez à la page de la console pour votre projet DevOps et sélectionnez le projet DevOps que vous avez créé.
-
Sélectionnez Pipelines de build, puis cliquez sur Créer un pipeline de build, entrez le nom et la description, puis cliquez sur Créer.
-
Cliquez sur Ajouter une étape, puis sélectionnez Build géré.
-
Sur Référentiel de code principal, sélectionnez votre référentiel OCI pour passer à la connexion.
- Confirmez votre référentiel, sélectionnez-le, puis cliquez sur Ajouter.
-
Ajoutez une nouvelle étape sur le pipeline de build pour publier l'artefact dans le registre. Sélectionnez l'option Fournir des artefacts, puis l'artefact go-login-image créé au cours des étapes précédentes.
Votre pipeline doit ressembler à ceci.
Tâche 5 : création du pipeline de build DevOps pour le microservice Go
-
Accédez à la page de la console pour votre projet DevOps et sélectionnez le projet DevOps que vous avez créé.
-
Sélectionnez Pipelines de build, cliquez sur Créer un pipeline de build, entrez le nom et la description, puis cliquez sur Créer.
-
Cliquez sur Ajouter une étape, puis sélectionnez Build géré.
-
Dans Référentiel de code principal, sélectionnez le référentiel OCI pour go-microservice.
- Confirmez votre référentiel, sélectionnez-le, puis cliquez sur Ajouter.
-
Ajoutez une nouvelle étape sur le pipeline de build pour publier l'artefact dans le registre. Sélectionnez l'option Fournir des artefacts, puis l'artefact go-microservice-image créé au cours des étapes précédentes.
Votre pipeline doit ressembler à ceci.
Tâche 6 : Créer le pipeline {build_spec.yaml} - Connexion directe
Le fichier build_spec
est un fichier yaml qui décrit les étapes à effectuer lors de l'exécution du pipeline de build. Il est exécuté sur un programme d'exécution de build cloud et prend en charge la plupart des langages populaires dans les applications cloud natives. Le fichier se trouve à la racine de votre code de référentiel go-login sur OCI. Ce fichier utilise certaines variables du VAULT et nous devons les remplacer par nos Ocides Vault de tutoriel.
Pour plus d'informations sur les spécifications de build, reportez-vous à la section Build Specification.
Les deux variables suivantes doivent être définies.
-
HELM_REPO_USER
: nom utilisateur stocké en tant que clé secrète sur le coffre. -
USER_AUTH_TOKEN
: jeton d'autorisation pour l'utilisateur stocké sur le coffre.
-
Accédez à vos clés secrètes de coffre et obtenez l'OCID de chaque clé secrète.
-
Accédez à vos référentiels de projet et obtenez
ssh url
pour la connexion Go.-
Mettez à jour votre fichier build_spec.yaml et remplacez les valeurs par les clés secrètes OCID copiées, puis validez les modifications apportées au code.
-
-
Accédez à la console shell de votre bastion jump-box.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-login/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Accédez au pipeline de build go-login sous votre projet DevOps, sélectionnez l'onglet Paramètres et ajoutez les nouveaux paramètres suivants.
HELM_REPO
: base de votre registre OCI xxx.ocir.io.HELM_REPO_URL
: URL du registre OCI pour le graphique Helm associé.APP_HOST
: l'hôte sera utilisé pour accéder à votre application sur le contrôleur entrant.IMAGE_URL
: URL d'image OCI Registry sans balise.
-
Cliquez sur l'onglet Construire le pipeline, puis sur Démarrer l'exécution manuelle.
-
Comme nous pouvons le voir, le build a été terminé avec la propagation d'image vers OCI Registry.
-
-
Accédez à OCI Container Registry et vérifiez s'il existe une image.
Tâche 7 : configurer les informations d'identification OCI pour le microservice Go
Les microservices mobiles interagissent avec OCI à l'aide du SDK. Pour ce faire, nous devons configurer les informations d'identification correctes. Nous utiliserons les informations similaires que nous avons utilisées pour configurer l'interface de ligne de commande OCI lors de la configuration du bastion à partir des étapes précédentes de ce tutoriel.
Toutes les informations d'identification requises seront stockées sur la configmap OKE et injectées sur les variables d'environnement à l'intérieur du conteneur en cours d'exécution.
-
Accédez à vos référentiels OCI et obtenez
ssh url
pour votre référentiel go-microservice. -
Accédez à la page de console de votre cluster OKE, copiez l'ocid du cluster et remplacez-le à l'étape suivante dans la commande de la variable d'environnement
ENV_CLUSTER_ID
. -
Ouvrez votre terminal shell Jump-box bastion. Assurez-vous que votre clé SSH est créée à l'adresse suivante : ~/.oci/oci_api_key.pem. A l'exception de la variable ENV_CLUSTER_ID, toutes les autres variables se trouvent dans le fichier ~/.oci/config sous l'hôte de bastion que vous avez précédemment configuré l'interface de ligne de commande OCI.
cat ~/.oci/config
-
La liste de commandes shell ci-dessous crée un fichier configmap/values.yaml avec toutes les variables nécessaires à injecter sur le conteneur en cours d'exécution, puis le propage vers votre référentiel de code sur OCI. Avant d'exécuter les commandes sur votre terminal hôte de bastion, remplacez les valeurs "PASTE VOTRE..." ci-dessous.
cd $HOME rm -rf go-microservice/ git clone <PAST YOUR ssh url> cd go-microservice/chart-go-microservice/configmap/ rm values.yaml pem=$(cat ~/.oci/oci_api_key.pem|base64 -w 0) echo 'ENV_PEM: "'$pem'"' > values.yaml echo 'ENV_TENANCY_OCID: "PASTE YOUR TENANCY OCID"' >> values.yaml echo 'ENV_USER_OCID: "PASTE YOUR USER OCID"' >> values.yaml echo 'ENV_REGION: "PASTE YOUR REGION NAME"' >> values.yaml echo 'ENV_FINGERPRINT: "PASTE YOUR FINGERPRINT"' >> values.yaml echo 'ENV_CLUSTER_ID: "PASTER YOUR CLUSTER OCID"' >> values.yaml cd $HOME/go-microservice git add . git commit -m "added correct values on configmap" git push
Le microservice Go peut désormais communiquer avec OCI à l'aide du kit SDK.
Tâche 8 : Créer le pipeline {build_spec.yaml} - microservices Go
Le fichier build_spec est un fichier yaml qui décrit les étapes à effectuer lors de l'exécution du pipeline de build. Il est exécuté sur un programme d'exécution de build cloud et prend en charge la plupart des langages populaires dans les applications cloud natives. Le fichier se trouve à la racine de votre code de référentiel go-microservice sur OCI. Ce fichier utilise certaines variables du VAULT et nous devons les remplacer par nos Ocides Vault de tutoriel.
Pour plus d'informations sur les spécifications de build, reportez-vous à la section Build Specification.
Les deux variables suivantes doivent être définies.
-
HELM_REPO_USER
: nom utilisateur stocké en tant que clé secrète sur le coffre. -
USER_AUTH_TOKEN
: jeton d'autorisation pour l'utilisateur stocké sur le coffre.
-
Accédez à vos clés secrètes de coffre et obtenez l'OCID de chaque clé secrète.
-
Accédez aux référentiels de projet et obtenez l'URL SSH pour la connexion Go.
- Vous devez mettre à jour votre fichier build_spec.yaml et remplacer les valeurs par les clés secrètes OCID copiées, puis valider les modifications apportées au code.
-
Accédez à la console shell de votre bastion jump-box.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-microservice/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Accédez à votre pipeline de build go-microservice sous votre projet Devops, sélectionnez l'onglet "Paramètres" et ajoutez de nouveaux paramètres.
HELM_REPO
: base de votre registre OCI xxx.ocir.io.HELM_REPO_URL
: URL du registre OCI pour le graphique Helm associé.APP_HOST
: l'hôte sera utilisé pour accéder à votre application sur le contrôleur entrant.IMAGE_URL
: URL d'image OCI Registry sans balise.
-
Cliquez sur l'onglet Construire le pipeline, puis sur Démarrer l'exécution manuelle.
-
Comme nous pouvons le voir, le build a été terminé avec la propagation d'image vers OCI Registry.
-
-
Accédez à OCI Container Registry et vérifiez s'il existe une image.
Tâche 9 : préparez votre OKE pour recevoir les déploiements
Dans ce tutoriel, nous allons créer manuellement les espaces de noms OKE pour go-login et go-microservices. Nous devons également configurer les informations d'identification OCI Container Registry dans chacun des espaces de noms à l'aide de clés secrètes. Cette opération est obligatoire, sinon le déploiement ne pourra pas extraire l'image de conteneur du registre.
-
Obtenez le texte brut TOKEN et le nom utilisateur à partir du registre OCI que vous avez stocké sur le coffre-fort.
-
Ouvrez la console shell de votre bastion jump-box et exécutez la commande suivante.
Remarque : assurez-vous de remplacer les variables des commandes ci-dessous avec les informations d'identification obtenues à l'étape précédente et de vérifier le serveur d'accueil correct en fonction de votre région gru.ocir.io.
cd $HOME kubectl get ns kubectl create ns go-login kubectl create ns go-microservices kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-login kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-microservices
-
Maintenant, déployons le contrôleur entrant pour pouvoir accéder aux microservices sur Internet. Nous utilisons l'image entrante officielle sur la version v1.4.0.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml kubectl scale --replicas=4 deployment ingress-nginx-controller -n ingress-nginx
-
Maintenant, vérifions si les services entrants sont bons, cela devrait ressembler à ceci.
kubectl get svc -n ingress-nginx
-
Après avoir créé l'inbound-nginx, un équilibreur de charge est automatiquement créé sur OCI. Mettez à jour la forme de l'équilibreur de charge vers une forme moins chère et évitez ainsi les coûts supplémentaires.
-
-
Accédez à votre console, sélectionnez Equilibreurs de charge sous Fonctions de réseau, puis sélectionnez l'équilibreur de charge que vous venez de créer.
-
Cliquez pour mettre à jour SHAPE et cochez la case Utiliser un équilibreur de charge flexible.
Tâche 10 : création d'un environnement OCI DevOps
Pour pouvoir déployer vos applications, nous devons créer l'environnement.
-
Sélectionnez votre projet DevOps, cliquez sur Environnements, puis sur Créer un environnement.
Tâche 11 : déploiement de la connexion directe à OCI DevOps à l'aide de graphiques Helm
-
Accédez à votre projet Devops, cliquez sur Pipelines de déploiement et créez un pipeline pour go-login.
-
Cliquez pour ajouter une nouvelle phase à déployer, sélectionnez "Installer les graphiques Helm vers le cluster Kubernetes", sélectionnez l'artefact d'aide et l'artefact de valeurs pour go-login. Veillez à renseigner le nom de l'espace de noms en tant que go-login.
-
Créez un déclencheur sur le pipeline de build pour démarrer le déploiement automatiquement une fois le build terminé.
-
Accédez au pipeline de build go-login sous votre projet Devops et cliquez sur Ajouter une phase.
-
Sélectionnez Déclencher le déploiement, cliquez sur Sélectionner un pipeline de déploiement, puis sélectionnez go-login-deploy.
-
-
Cliquez sur Démarrer l'exécution manuelle pour tester le pipeline.
-
Sur la page Projet Devops, cliquez sur Déploiements pour vérifier le statut du déploiement en cours d'exécution.
Tâche 12 : vérifiez votre déploiement go-login
-
Accédez au terminal du bastion et vérifiez les éléments suivants :
-
Vérifiez l'état du pod.
kubectl get pod -n go-login
-
Vérifiez l'hôte et l'adresse entrantes de l'application.
kubectl get ingress -n go-login
-
Ce déploiement utilise le trafic de routage de contrôle entrant sur le nom d'hôte, ce qui signifie que nous devons appeler le service en utilisant le nom d'hôte correct dans le cadre de l'URL.
-
Dans ce tutoriel, nous n'avons pas utilisé de certificats SSL. Pour pouvoir appeler les services, nous devons inclure dans le fichier /etc/hosts local de votre ordinateur portable la route DNS adaptée. Ceci est recommandé pour les environnements de production.
-
Prenez note de votre adresse IP externe et ajoutez l'entrée dans votre /etc/hosts.
sudo vi /etc/hosts
-
Ajoutez une nouvelle ligne à la fin du fichier.
your.ip.aaa.xx go-login.superocilab.com
-
Exécutez la commande suivante .
cat /etc/hosts
-
Votre fichier /etc/hosts doit ressembler à ceci.
-
-
Vous pouvez maintenant appeler le service go-login à l'aide d'une boucle et générer un JWT TOKEN en appelant l'adresse /login.
curl http://go-login.superocilab.com curl http://go-login.superocilab.com/login
Tâche 13 : déploiement d'un microservice Go vers OCI Devops à l'aide de graphiques Helm
-
Accédez à votre projet Devops, cliquez sur Pipelines de déploiement et créez un pipeline pour go-microservice.
-
Cliquez pour ajouter une nouvelle phase à déployer, sélectionnez Installer les graphiques Helm vers le cluster Kubernetes, sélectionnez l'artefact d'aide et l'artefact de valeurs pour go-microservice. Veillez à remplir le nom de l'espace de noms en tant que go-microservices.
-
Créez un déclencheur sur le pipeline de build pour démarrer le déploiement automatiquement une fois le build terminé.
-
Accédez au pipeline de build go-microservice sous votre projet Devops et cliquez sur Ajouter une phase.
-
Sélectionnez Déclencher le déploiement, puis cliquez sur Sélectionner un pipeline de déploiement et sélectionnez go-microservice-deploy.
-
-
Cliquez sur Démarrer l'exécution manuelle pour tester le pipeline.
-
Sur la page Projet Devops, cliquez sur Déploiements pour vérifier le statut du déploiement en cours d'exécution.
Tâche 14 : vérification du déploiement de microservice Go
-
Accédez à votre terminal de bastion et vérifiez les informations suivantes :
-
Vérifiez l'état du pod.
kubectl get pod -n go-microservices
-
Vérifiez l'hôte et l'adresse entrantes de l'application.
kubectl get ingress -n go-microservices
-
Ce déploiement utilise le trafic de routage de contrôle entrant sur le nom d'hôte, ce qui signifie que nous devons appeler le service en utilisant le nom d'hôte correct dans le cadre de l'URL.
-
Dans ce tutoriel, nous n'avons pas utilisé de certificats SSL. Pour pouvoir appeler les services, nous devons inclure dans le fichier /etc/hosts local de votre ordinateur portable la route DNS adaptée. Ceci est recommandé pour les environnements de production.
-
Prenez note de votre adresse IP externe et ajoutez l'entrée sur votre /etc/hosts (vous pouvez également l'ajouter sur votre ordinateur local !)
sudo vi /etc/hosts
-
Ajoutez une nouvelle ligne à la fin du fichier.
your.ip.aaa.xx go-microservice.superocilab.com
-
Exécutez la commande suivante .
cat /etc/hosts
-
Votre fichier /etc/hosts doit ressembler à ceci.
-
Vous pouvez maintenant appeler le service go-microservice.
curl curl http://go-microservice.superocilab.com
Etape suivante
Pour passer au tutoriel suivant de ce parcours de formation, cliquez ici.
Liens connexes
Remerciements
- Auteur - Joao Tarla (ingénieur solutions Oracle LAD A-Team)
Ressources de formation supplémentaires
Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour consulter la documentation produit, consultez Oracle Help Center.
Create OCI DevOps pipelines to build and deploy the Golang microservices
F79787-01
April 2023
Copyright © 2023, Oracle and/or its affiliates.