Configurer un pipeline CI/CD pour les déploiements Cloud

La livraison rapide des logiciels est essentielle à l'exécution efficace de vos applications dans le cloud. Jenkins est un produit populaire visant à automatiser les pipelines Ccontinuous Iintegration (CI) et Continuous Deployment (CD) pour les charges de travail dans Oracle Cloud.

Architecture

Dans cette architecture de référence, Jenkins est hébergé sur Oracle Cloud Infrastructure afin de centraliser l'automatisation de la création et d'adapter le déploiement. Le processus d'intégration continue crée une application et la déploie à l'aide d'Oracle Cloud Infrastructure Registry (OCIR) et de Container Engine for Kubernetes (OKE). GitHub permet de gérer le code source.

GitHub fournit une intégration Web hook, de sorte que Jenkins commence à exécuter des constructions et des tests automatisés après chaque enregistrement de code. Un exemple d'application Web est déployé dans le cadre du pipeline CI/CD, auquel les utilisateurs finaux peuvent accéder à partir du cluster Container Engine for Kubernetes. Pour simplifier le processus, Terraform est utilisé pour l'automatisation de l'infrastructure.

Dans cette architecture de référence, Terraform utilise un module Terraform capable de déployer Jenkins dans différentes configurations, d'une seule machine virtuelle Jenkins à une configuration de noeud de contrôleur (serveur) et d'agent (worker). Cela signifie que le module Jenkins peut être intégré à d'autres déploiements d'architecture pour les cas d'emploi autres que Kubernetes (par exemple, développement d'applications APEX, WebLogic sur les machines virtuelles, etc.).

La configuration de l'agent permet de reconfigurer l'environnement pour fournir un nombre différent d'instances de calcul correspondant aux exigences de charge globale. Cela inclut la possibilité de remplacer les machines virtuelles d'agent afin d'éviter les problèmes d'accumulation d'anciennes dépendances, de conflits de dépendances transitoires et de s'appuyer sur des dépendances non déclarées.

Les noeuds de machine virtuelle exécutant Jenkins sont configurés à l'aide d'une image de machine virtuelle prédéfinie qui a été prédéfinie avec tous les logiciels nécessaires à la prise en charge de Jenkins.

Le diagramme suivant illustre cette architecture de référence.

Description de cicd-oci.png
Description de l'image cicd-oci.png

cicd-oci-oracle.zip

Cette architecture comporte les composants suivants :
  • Région

    Une région Oracle Cloud Infrastructure est une zone géographique localisée contenant un ou plusieurs centres de données, appelés domaines de disponibilité. Les régions sont indépendantes des autres régions et de vastes distances peuvent les séparer (d'un pays à l'autre ou même d'un continent à l'autre).

  • Domaines de disponibilité

    Les domaines de disponibilité sont des centres de données autonomes et indépendants au sein d'une région. Les ressources physiques de chaque domaine de disponibilité sont isolées des ressources des autres domaines de disponibilité, ce qui offre une tolérance aux pannes. Les domaines de disponibilité ne partagent pas d'infrastructure telle que l'alimentation ou le refroidissement, ni le réseau de domaine de disponibilité interne. Il est donc peu probable qu'un échec dans un domaine de disponibilité affecte les autres domaines de disponibilité de la région.

  • Réseau cloud virtuel (VCN) et sous-réseaux

    Jenkins s'exécute sur une instance de calcul de machine virtuelle (VM) déployée dans un VCN que vous pouvez segmenter en sous-réseaux. Jenkins est hébergé sur le sous-réseau public régional A et Container Engine for Kubernetes est déployé dans le sous-réseau public régional B.

  • Instance de calcul

    Jenkins est déployé dans une machine virtuelle d'instance Compute. Le cluster Container Engine for Kubernetes exécute également ses noeuds sur les instances Compute.

  • Moteur de conteneur pour Kubernetes

    Container Engine for Kubernetes est un service entièrement géré, évolutif et hautement disponible que vous pouvez utiliser pour déployer vos applications conteneurisées dans le cloud. Vous spécifiez les ressources Compute dont vos applications ont besoin et Container Engine for Kubernetes les provisionne sur Oracle Cloud Infrastructure dans une location existante.

  • Registry

    Registry est un registre géré par Oracle qui vous permet de simplifier le développement du workflow de production. Le registre vous permet, en tant que développeur, de stocker, de partager et de gérer facilement des artefacts de développement tels que des images Docker.

  • Jenkins

    Jenkins est un serveur d'automatisation open source qui permet aux développeurs de construire, tester et déployer des logiciels de manière fiable. Jenkins prend en charge le mode maître/agent, où la charge globale des projets de construction est déléguée à plusieurs noeuds d'agent par le maître. Une installation Jenkins unique peut héberger plusieurs projets ou fournir des environnements différents pour les constructions et les tests.

Recommandations

Vos exigences peuvent différer de l'architecture décrite ici. Utiliser les recommandations suivantes comme point de départ.

  • Formes de calcul

    Cette architecture utilise une image Oracle Linux OS avec la forme VM.Standard2.1 pour héberger à la fois le serveur Jenkins et le moteur de conteneurs pour les noeuds de cluster Kubernetes. Si votre application a besoin de plus de mémoire ou de coeurs, vous pouvez choisir une forme différente.

  • VCN

    Lorsque vous créez un VCN, déterminez le nombre de blocs CIDR requis et la taille de chaque bloc en fonction du nombre de ressources que vous prévoyez d'attacher à des sous-réseaux dans VCN. Utilisez les blocs CIDR qui se trouvent dans l'espace d'adresse IP privé standard.

    Une fois que VCN a été créé, vous pouvez modifier, ajouter et enlever ses blocs CIDR.

    Cette architecture utilise un VCN public pour héberger Container Engine for Kubernetes. Vous pouvez également utiliser un VCN privé. Dans ce cas, utilisez une passerelle NAT pour donner accès au cluster sur Internet public.

  • Jenkins

    Cette architecture déploie Jenkins sur une instance Compute. Un noeud maître Jenkins est utilisé pour construire le pipeline CI/CD. Si vous avez plusieurs pipelines à construire et à exécuter en parallèle, vous pouvez utiliser un noeud d'agent Jenkins pour développer davantage de pipelines.

  • Moteur de conteneur pour Kubernetes

    Cette architecture déploie le cluster Container Engine for Kubernetes. Les noeuds du salarié sont déployés sur un O/S VM.Standard2.1 Oracle Linux. Cette architecture utilise trois noeuds de salarié dans le cluster, mais vous pouvez créer jusqu'à 1000 noeuds sur chaque cluster.

  • Registry

    Cette architecture déploie Registry en tant que registre Docker privé pour une utilisation interne. Les images Docker sont transférées et extraites du registre. Vous pouvez également utiliser Registry en tant que registre Docker public, permettant à tout utilisateur disposant d'un accès Internet et connaissant l'URL appropriée d'extraire des images des référentiels publics dans Oracle Cloud.

Remarques

  • Evolutivité

    Vous pouvez mettre à l'échelle votre application en mettant à jour le nombre de noeuds de salarié dans le cluster Container Engine for Kubernetes, en fonction du chargement. Vous pouvez également augmenter en réduisant le nombre de noeuds de salarié dans le cluster. Lorsque vous créez un service sur le cluster, vous pouvez créer un équilibreur de charge pour répartir le trafic entre les noeuds affectés à ce service. Pour Jenkins, vous pouvez utiliser le noeud maître Jenkins pour créer plus d'agents pour plusieurs pipelines.

  • Disponibilité de l'application

    Les domaines de pannes offrent la meilleure résilience au sein d'un seul domaine de disponibilité. Vous pouvez déployer des instances Compute qui effectuent les mêmes tâches dans plusieurs domaines de disponibilité. Cette conception élimine un point unique de panne en introduisant la redondance.

  • Responsabilité

    Cette architecture utilise un exemple d'application Web hébergée sur GitHub pour le contrôle source. Le registre est utilisé dans le pipeline build pour stocker l'image de construction Docker pour l'application.

  • Sécurité

    Utilisez des stratégies pour restreindre qui peut accéder aux ressources Oracle Cloud Infrastructure dont dispose votre société et comment.

    Container Engine for Kubernetes est intégré à Oracle Cloud Infrastructure Identity and Access Management (IAM), qui fournit une authentification facile avec la fonctionnalité d'identité native d'Oracle Cloud Infrastructure.

Déployer

Le code requis pour déployer cette architecture de référence est disponible dans GitHub. Vous pouvez extraire le code vers Oracle Cloud Infrastructure Resource Manager en un seul clic, créer la pile et le déployer. Vous pouvez également télécharger le code à partir de GitHub vers votre ordinateur, personnaliser le code et déployer l'architecture à l'aide de la CLI Terraform.

  • Déployer à l'aide d'Oracle Cloud Infrastructure Resource Manager :
    1. Cliquez sur Déploiement vers Oracle Cloud

      Si vous n'êtes pas déjà connecté, entrez les informations d'identification de location et d'utilisateur.

    2. Consultez et acceptez les conditions générales.
    3. Sélectionnez la région dans laquelle déployer la pile.
    4. Suivez les invites et instructions affichées à l'écran pour créer la pile.
    5. Après avoir créé la pile, cliquez sur Actions Terraform, puis sélectionnez Plan.
    6. Attendez que le travail soit terminé et vérifiez le plan.

      Pour apporter des modifications, revenez à la page Détails de la pile, cliquez sur Modifier la pile et apportez les modifications nécessaires. Exécutez ensuite à nouveau l'action Plan.

    7. Si aucune autre modification n'est nécessaire, revenez à la page Détails de la pile, cliquez sur Actions Terraform, puis sélectionnez Appliquer.
  • Déployer à l'aide de la CLI Terraform:
    1. Accédez à GitHub.
    2. Téléchargez ou clonez le code sur votre ordinateur local.
    3. Suivez les instructions de README.md.

Journal des modifications

Ce journal répertorie les modifications importantes :