Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Connexion du code Terraform à partir d'un référentiel GitLab à une location OCI à l'aide d'un pipeline d'intégration continue et de déploiement continu
Introduction
Tout en travaillant dans Oracle Cloud Infrastructure (OCI) ou tout autre cloud, nous avons besoin d'instructions claires sur l'automatisation en tout lieu. L'une des automatisations les plus importantes requises est le provisionnement de l'infrastructure.
Les utilisateurs veulent provisionner leur infrastructure cloud à l'aide de Terraform. Lorsqu'un code est impliqué, ils veulent le gérer à l'aide des pratiques de développement Agile sur un référentiel de code et le gérer de manière DevOps complète. Une fois le référentiel configuré avec le code initial, tout développeur peut soumettre un nouveau code et déployer la nouvelle infrastructure déclenchée à partir d'un pipeline d'intégration continue et de déploiement continu.
Dans ce tutoriel, nous allons comprendre toutes les étapes nécessaires pour configurer le pipeline d'infrastructure gérée par automatisation Terraform d'une manière agile de développement et utiliser GitLab en tant que fournisseur de référentiel. Le même processus s'applique à d'autres fournisseurs tels que GitHub et Azure DevOps.
Objectifs
-
Configurez le pipeline d'infrastructure gérée par automatisation Terraform à l'aide des pratiques de développement Agile.
-
Configurez des clés d'API pour l'utilisateur en fonction de laquelle l'agent GitLab se connectera à la location OCI.
-
Configurez un référentiel GitLab dans lequel tout le code Terraform sera propagé, ainsi que le code Terraform initial pour obtenir les détails de location OCI.
-
Configurez un pipeline d'intégration continue et de déploiement continu basé sur YAML qui déclenchera des actions Terraform dès que le nouveau code sera propagé et approuvé dans le référentiel.
Prérequis
-
Accès requis à OCI et aux stratégies autorisées dans Oracle Cloud Infrastructure Identity and Access Management (OCI IAM). L'utilisateur doit avoir accès aux ressources correspondantes qu'il souhaite créer ou mettre à jour à l'aide du code Terraform.
-
Accédez à GitLab pour créer un référentiel, puis un pipeline et une transmission de code.
-
Compréhension de base de la méthodologie agile de développement logiciel.
Tâche 1 : configurer les clés d'API
-
Connectez-vous à votre location OCI avec le compte de service ou l'administrateur et accédez à Paramètres d'utilisateur.
Ou
Vous pouvez également accéder à l'utilisateur à partir de la console OCI IAM. Assurez-vous simplement que cet utilisateur dispose de tout l'accès requis pour créer ou mettre à jour une infrastructure sur OCI.
-
Accédez à la section Ressources de l'utilisateur, cliquez sur Clés d'API et sur Ajouter une clé d'API. Ici, vous pouvez choisir de télécharger les nouvelles clés publiques et privées, de télécharger votre clé publique ou de coller votre clé publique.
-
Une fois que vous avez sélectionné l'une des options, enregistrez les clés à un emplacement approprié et enregistrez le fichier de configuration comme indiqué dans l'image suivante. Vous aurez besoin de ce fichier de configuration et de cette clé privée lors de la connexion à votre location à l'aide de Terraform.
Tâche 2 : configurer le référentiel GitLab avec du code Terraform
-
Créez un référentiel sur GitLab. Nous utiliserons ce référentiel pour propager le code Terraform.
-
Développez le code Terraform requis pour la connexion à la location. Dans ce tutoriel, nous utiliserons le code Terraform pour nous connecter à la location et obtenir les détails des domaines de disponibilité.
-
provider.tf
.provider "oci" { tenancy_ocid = var.tenancy_ocid user_ocid = var.user_ocid fingerprint = var.fingerprint private_key_path = var.private_key_path region = var.region } terraform { required_providers { oci = { version = ">= 3.0.0" } } }
-
variables.tf
.variable "tenancy_ocid" { type = string default = "ocid1.tenancy.oc1..aaaaaaaacko" } variable "user_ocid" { type = string default = "ocid1.user.oc1..aaaaaaaafelq" } variable "fingerprint" { type = string default = "72:d4:6c:f8:89" } variable "private_key_path" { type = string default = "oracleidentitycloudservice_user_key.pem" } variable "region" { type = string default = "us-ashburn-1" }
-
oracleidentitycloudservice_user_key.pem
.content of your private key
-
availability-domains.tf
.data "oci_identity_availability_domains" "ads" { #Required compartment_id = var.tenancy_ocid }
-
outputs.tf
.# The "name" of the availability domain to be used for the compute instance. output "name-of-first-availability-domains" { value = data.oci_identity_availability_domains.ads.availability_domains[0].name }
Remarque : utilisez les valeurs du fichier de configuration enregistré pour entrer les valeurs de paramètre dans le fichier
variables.tf
. -
Tâche 3 : configurer un pipeline CI/CD basé sur YAML et un déclencheur basé sur la fusion de codes
-
Une fois le code Terraform propagé vers le référentiel GitLab, créons le pipeline et le configurons à l'aide d'un fichier
yaml
. -
Créez un fichier
.gitlab-ci.yml
dans le référentiel et ajoutez le code suivant.build-job: stage: build script: - echo "Hello Gitlab" - uname -r - yum install -y yum-utils - yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo - sed -i 's/$releasever/7/g' /etc/yum.repos.d/hashicorp.repo - yum -y install terraform - pwd - ls -ltra - terraform init - terraform plan - terraform apply -auto-approve test-job1: stage: test script: - echo "This job tests something" test-job2: stage: test script: - echo "This job tests something, but takes more time than test-job1." - echo "After the echo commands complete, it runs the sleep command for 20 seconds" - echo "which simulates a test that runs 20 seconds longer than test-job1" - sleep 5 deploy-prod: stage: deploy script: - echo "This job deploys something from the main branch." environment: dev
Remarque :
- Toutes les commandes Terraform
init
,plan
etapply
sont exécutées à l'étape de build, mais vous pouvez les utiliser en conséquence à l'étape dont vous avez besoin. - Ce fichier de démonstration
yml
est basé sur les agents GitLab exécutant Oracle Linux 7. Vérifiez la disponibilité des modules Terraform en fonction du système d'exploitation de l'agent et de la disponibilité du réseau.
- Toutes les commandes Terraform
Liens connexes
Remerciements
- Auteur - Lovelesh Saxena (architecte principal en ingénierie logicielle)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Connect Terraform Code from a GitLab Repository to an OCI Tenancy using a CI/CD Pipeline
F94447-01
March 2024
Copyright © 2024, Oracle and/or its affiliates.