Qu'est-ce qu'un pipeline CD? L'article vous indique comment utiliser Kubernetes, Ansible créer pipeline CD et Jenkins

Auteur | Magalix

Traducteur | sauce feu feu Zebian | Carol

Source | Architect Technology Alliance

Photo de couverture | RPSC à payer pour télécharger la photo IC

CI / CD à résoudre est le problème?

CI / CD (nom complet de CI Intégration continue, intégration continue, le nom CD complet déploiement continu, déploiement continu) Ce terme est souvent utilisé avec d'autres termes, DevOps, Agile, Scrum et Kanban, l'automatisation apparaissent ensemble.

Parfois, les gens voient juste dans le cadre du flux de travail, sans vraiment comprendre ce qu'il est ou ce qu'il utilise un sens oui. Les jeunes ingénieurs Devops souvent CI / CD pour acquis les choses qu'ils peuvent ne pas avoir vu le cycle de version du logiciel « traditionnel », par conséquent, obtenir moins que les avantages de son CI / CD.

CI / CD au nom de l'intégration continue, la livraison et le déploiement continu. CI / CD non réalisé de l'équipe doit passer par les étapes suivantes lors de la création de nouveaux produits logiciels:

  • Chef de produit (au nom des intérêts des clients) pour fournir le produit doit avoir les caractéristiques et les comportements qui devraient être mises en uvre. Le lien doit être aussi complet et précis.

  • Les développeurs Avec l'aide d'analystes d'affaires, par l'écriture de code, tests unitaires effectués et soumettre les résultats au système de contrôle de version (par exemple Git).

  • Après la fin de la phase de développement, le projet sera transféré à l'AQ (assurance de la qualité, l'assurance de la qualité). Pour le produit à exécuter quelques tests, comme les tests d'acceptation des utilisateurs, tests d'intégration, tests de performance, et ainsi de suite. Entre-temps, avant la phase de QA est terminée, il ne fait aucune modification de la base de code. Si vous avez des bugs, ils seront retournés au développeur pour réparer, puis des produits modifiés seront remis à l'AQ à nouveau.

  • Après QA, l'équipe des opérations déploiera le code à un environnement de production.

  • Mais il y a de nombreux inconvénients ci-dessus flux de travail:

    Tout d'abord, le chef de produit à la demande entre le produit prêt pour la production, il prend beaucoup de temps.

    Pour les développeurs, afin de résoudre un mois ou plus avant que le code est écrit dans le bogue est pas facile. Rappelez-vous, que si le bug a été trouvé après la fin de la phase de développement et de la phase QA commence.

    Lorsque le besoin urgent de changer le code (comme la nécessité de réparer le bug grave thermique), en raison de la nécessité de déployer le plus rapidement possible, sera souvent raccourcir la phase d'assurance qualité.

    Étant donné que la communication et la collaboration entre les différentes équipes rarement, quand le bogue se produit, les gens vont commencer à se blâmer. Tout le monde est préoccupé par cette partie de sa responsabilité, tout en ignorant l'objectif commun.

    CI / CD pour résoudre le problème en introduisant l'automatisation. Chaque fois que les modifications du code sont poussés au système de contrôle de version, sera testé, puis le déployer à l'environnement stagingUAT pour d'autres tests avant de le déployer dans un environnement de production pour les utilisateurs. L'automatisation peut faire en sorte que l'ensemble du processus est rapide, fiable, reproductible et réduire la probabilité d'erreur.

    Cela étant le cas, quel est le CI / CD?

    Certains livres ont présenté très clairement. Comment, pourquoi et quand mettre en uvre dans votre infrastructure CI / CD. Cependant, nous préférons toujours un peu moins de théorie, un peu plus pratique. Cela étant le cas, nous allons décrire brièvement les étapes automatisées après avoir soumis les modifications du code doivent être exécutées:

    L'intégration continue (CI): La première étape ne figure pas dans l'assurance qualité. En d'autres termes, il ne concerne pas les caractéristiques du code est de fournir les exigences des clients. Au contraire, il se préoccupe de la qualité du code. Par des tests unitaires, tests d'intégration, peuvent être informés des questions sur la qualité du code aux développeurs. Nous pouvons encore être renforcée par la couverture et l'analyse statique du code de test, assurant ainsi encore la qualité du code.

    tests d'acceptation des utilisateurs: Ceci est la première partie du processus de CD. A ce stade, le code effectuera des tests automatisés pour veiller à ce qu'ils répondent aux attentes des clients. Par exemple, une application web peut être en mesure de fonctionner correctement, ne jetez pas des erreurs, mais les clients veulent les visiteurs d'être en mesure de promouvoir la page de destination comprend un par avant d'entrer dans la maison. Le code actuel dirigera les visiteurs vers la page principale, qui sont les besoins réels des clients sont biaisées, test UAT sera indiqué que ce genre de problème. Dans l'environnement non-CD, ce travail doit être fait manuellement les testeurs d'assurance qualité.

    Déploiement: Ceci est la deuxième partie du processus de CD. Il implique le serveur / conteneur hébergeant l'application pour apporter des changements afin qu'il puisse refléter la version mise à jour. Ce travail devrait être achevé d'une manière automatisée, il est préférable de faire des outils de gestion de configuration tels qu'un Ansible, chef ou de marionnettes.

    Quels sont les pipelines (Pipeline)?

    Pipeline est un terme supérieur a un concept simple. Lorsque vous devrez peut-être effectuer un grand nombre de scripts pour atteindre un objectif commun dans un certain ordre, et ces scripts sont collectivement appelés « tuyau ».

    Par exemple, dans l'affaire Jenkins, un pipeline peut contenir une ou plusieurs étapes doivent être complétées afin de parvenir à une construction réussie. Une pluralité d'étapes du procédé peut être visualisé, la compréhension du temps passé dans chaque phase, et une compréhension claire de l'échec de construction.

    Lab: Créer un pipeline à golang App

    Dans ce laboratoire, nous allons construire un pipeline de livraison continue (CD). Nous utilisons une langue Go application très simple. Pour simplifier, nous sommes un seul type de code de test fonctionne. Pré-requis pour l'expérience sont les suivantes:

    • les instances en cours d'exécution Jenkins. Il peut être une instance de nuage, machine virtuelle ou un conteneur de docker métal nu. Il doit pouvoir peuvent être connectés au public sur le réseau, de sorte que les bibliothèques par Jenkins webhook.

    • Reflétant le Registre: Vous pouvez utiliser le Registre Docker, qui est un produit à base de nuages, comme ECR ou RME, vous pouvez même utiliser un registre personnalisé.

    ECR: https: //aws.amazon.com/ecr/

    RME: https: //cloud.google.com/container-registry/

    Comptes sur GitHub. Bien que nous avons utilisé GitHub dans ce cas, mais le processus peut être effectué des modifications mineures, comme d'autres référentiels (comme Bitbucket).

    Le conduit peut être décrit comme suit:

    Première étape: Dossier de candidature

    Notre exemple d'application fera un « Bonjour tout le monde » en réponse aux demandes GET. Créer un nouveau fichier appelé main.go, et ajouter ce qui suit dans le fichier:

    Parce que nous voulons construire un CD de pipeline, vous devez donc faire quelques tests. Notre code est très simple, il suffit d'un cas de test pour vous assurer que nous recevons la chaîne correcte lorsque vous cliquez sur l'URL racine. Créer un nouveau fichier nommé main_test.go dans le même répertoire et ajouter ce qui suit:

    Il y a plusieurs autres fichiers peuvent nous aider à déployer des applications, les fichiers sont nommés:

    le Dockerfile

    Nous sommes ici pour les applications de l'emballage:

    Dockerfile est un fichier de construction en plusieurs étapes, il peut rendre l'image aussi petit que nombre possible d'un. Il a commencé par une golang: la construction alpine à base d'images. L'image binaire résultant sera utilisé pour la seconde, qui est juste une image de zéro, ne comprend pas la dépendance ou à la bibliothèque, ne contenant que le binaire démarrer l'application.

    scratch: https://hub.docker.com/_/scratch/

    le service

    Puisque nous utilisons Kubernetes comme plate-forme pour l'hébergement de cette application, et nécessite donc au moins un service et le déploiement. Notre fichier service.yml ressemble à ceci:

    Ceci est rien de spécial. Il suffit d'utiliser un NodePort comme le type de service. 32000 port, il écoutera sur une adresse IP de nud de cluster. connexions entrantes transmises à la nacelle (POD) sur le port 8080. Les communications internes, le service écoute sur le port 80.

    le déploiement

    Une fois l'application elle-même d'un docker, vous pouvez le déployer à Kubernetes au moyen de ressources de déploiement. Le fichier deployment.yml suit comme:

    Le déploiement définit la plupart intéressante est l'image miroir. Nous n'avons pas l'image codée en dur et les balises de nom, mais l'utilisation d'une variable. Par la suite, nous verrons comment utiliser cette définition comme modèle Ansible et remplace le nom de l'image (et tous les autres paramètres) déployés par les paramètres de ligne de commande.

    le PlayBook

    Dans cette expérience, nous avons utilisé Ansible comme outil de déploiement. le déploiement des ressources Kubernetes Il existe de nombreuses façons, y compris les graphiques de barre, mais je pense que l'utilisation de Ansible plus facile. Ansible PlayBook organisé par l'instruction. Notre fichier playbook.yml ressemble à ceci:

    K8S Ansible contient déjà un module pour gérer la communication avec le serveur API Kubernetes. , Nous ne devons donc installer kubectl, mais nous avons besoin d'un fichier kubeconfig valide pour se connecter au cluster (sera décrit en détail plus loin). Jetons un rapide coup d'oeil PlayBook:

    K8S le module: https://docs.ansible.com/ansible/latest/modules/k8s_module.html

    kubectl: https://kubernetes.io/docs/reference/kubectl/overview/

    La fonction principale de la PlayBook est utilisé pour déployer des services et des ressources au cluster.

    Parce que nous avons besoin dans la mise en uvre des données dynamiquement injectée dans le fichier de définition, donc nous avons besoin d'utiliser comme fichiers de définition de modèle, qui peut fournir une variable de l'extérieur.

    À cette fin, Ansible offre une fonction de recherche, vous pouvez passer des fichiers YAML valide comme modèle en eux. Ansible soutiendra une variété de variables injectées dans le modèle de la méthode. Dans cette expérience particulière, nous allons utiliser la méthode de ligne de commande.

    Deuxième étape: Installation Jenkins, Ansible et Docker

    Maintenant, nous pouvons installer Ansible, Jenkins et déployer automatiquement un environnement d'exécution du serveur et Docker à travers elle. Nous avons également besoin d'installer OpenShift modules Python pour permettre la connexion Ansible et Kubernetes.

    processus d'installation Ansible est très simple, il suffit d'installer Python, puis utilisez pip installer Ansible dessus:

    1. Connectez-vous à l'instance Jenkins.

    2. Installez Python 3, Ansible et modules OpenShift:

    Sudo apt update && sudo apt install -y python3 && sudo apt installer -y python3-pip && sudo PIP3 installer ansible && sudo installer PIP3 OpenShift

    3. Par défaut, pip convertir les fichiers binaires sont installés dans le dossier de l'utilisateur dans un répertoire caché. Nous avons besoin d'ajouter ce répertoire à la variable $ PATH, vous pouvez aussi facilement appeler la commande:

    echo "export PATH = $ PATH: ~ / .local / bin" > >  ~ / .Bashrc &&. ~ / .Bashrc

    4. Exemples d'installation et de déploiement nécessaires rôles Jenkins Ansible:

    ansible-galaxy installer geerlingguy.jenkins

    5. Installez le rôle Docker:

    ansible-galaxy installer geerlingguy.docker

    6. Créez un fichier playbook.yaml et ajouter ce qui suit:

    7. Exécutez le fichier PlayBook avec la commande suivante:

    playbook.yaml ansible-PlayBook.

    Notez ici que l'adresse IP publique des exemples que nous avons utilisé comme nom d'hôte utilisé par Jenkins. Si vous utilisez DNS, vous devrez peut-être remplacer le nom DNS à une instance. , S'il vous plaît noter également que avant d'exécuter le PlayBook, vous devez activer le port 8080 (le cas échéant) sur le pare-feu.

    8. Après quelques minutes, Jenkins sera installé. Vous pouvez accéder à votre adresse IP de l'ordinateur (ou le nom DNS) et spécifiez le port 8080 pour vérifier:

    9. Cliquez sur remplissage « Connexion » dans « admin » comme nom d'utilisateur et mot de passe. Notez que ce sont des rôles que nous utilisons les informations d'identification par défaut définie Ansible, l'utilisation Jenkins dans un environnement de production, vous pouvez (et devrait) être changé. Il peut être fait en définissant le rôle variable. Pour plus de détails, voir le rôle de la page officielle.

    Page officielle: https: //galaxy.ansible.com/geerlingguy/jenkins

    10. Enfin, vous devez faire est d'installer sera utilisé pour brancher l'expérience de ce qui suit: git, pipeline, CloudBees Docker créer et publier, GitHub

    Troisième étape: Jenkins configuré pour se connecter à l'utilisateur de cluster

    Comme mentionné plus haut, cette expérience suppose que vous avez installé et exécuter un cluster Kubernetes. Afin que nous devons ajouter Jenkins pour se connecter à ce cluster, le fichier kubeconfig nécessaire. Dans cette expérience particulière, nous allons utiliser un cluster hébergés sur Google Cloud Kubernetes, donc nous allons utiliser la commande gcloud. Votre kilométrage peut varier. Mais dans tous les cas, il faut copier les fichiers dans le répertoire utilisateur de Jenkins, comme suit:

    S'il vous plaît noter que le compte que vous utilisez ici doit avoir les autorisations nécessaires pour créer et gérer le déploiement (Déploiements) et les services (Services).

    Étape 04: La création d'emplois Jenkins Pipeline

    Jenkins a créé un nouvel emploi et sélectionnez le type de conduite. les paramètres de l'emploi sont les suivantes:

    Nous sommes en train de changer:

    • Nous avons utilisé pour construire le sondage SCM comme un déclencheur, ce paramètre guidera dépôt Git Jenkins d'inspection régulière (vérifié chaque minute par ***** indiqué une fois). Si le référentiel depuis le dernier sondage a été modifié, il déclenche l'emploi.

    • Dans le pipeline lui-même, nous spécifions l'URL du référentiel et des informations d'identification. Branch est maître.

    • Tout le code dans cette expérience, nous allons travailler pour ajouter un Jenkinsfile, le fichier avec le code stocké dans le même référentiel. Cet article va discuter plus tard le Jenkinsfile.

    Cinquième étape: Configuration des informations d'identification pour GitHub Jenkins et Docker Hub

    Go / credentials / magasin / système / domaine / _ / NewCredentials et les informations d'identification ajouter aux deux objectifs. Assurez-ID efficace et la description, comme les consulter ultérieurement:

    / Titres de compétence / magasin / système / domaine / _ / NewCredentials:

    Sixième étape: Création Jenkinsfile

    Jenkinsfile Jenkins conseils sur la façon de construire, tester, docker de, publier et diffuser notre application. Notre Jenkinsfile suit comme:

    pipeline {

    un agent quelconque

    environnement {

    Registre = "magalixcorp / k8scicd"

    GOCACHE = "/ tmp"

    }

    étapes {

    étape ( 'Build') {

    l'agent {

    docker {

    l'image 'golang'

    }

    }

    étapes {

    // Créer notre répertoire de projet.

    sh 'cd $ {} GOPATH / src'

    sh 'mkdir -p $ {} GOPATH / src / bonjour-monde

    // Copier tous les fichiers dans notre espace de travail Jenkins à notre répertoire de projet.

    sh 'cp -r $ {} WORKSPACE / * $ {} GOPATH / src / bonjour-monde

    // Construire l'application.

    sh 'build go'

    }

    }

    l'étape ( 'Test') {

    l'agent {

    docker {

    l'image 'golang'

    }

    }

    étapes {

    // Créer notre répertoire de projet.

    sh 'cd $ {} GOPATH / src'

    sh 'mkdir -p $ {} GOPATH / src / bonjour-monde

    // Copier tous les fichiers dans notre espace de travail Jenkins à notre répertoire de projet.

    sh 'cp -r $ {} WORKSPACE / * $ {} GOPATH / src / bonjour-monde

    // Supprimer les résultats des tests mis en cache.

    sh « aller -cache propre »

    // Exécuter les tests Unité.

    sh 'test go. / ... -v -COURTE'

    }

    }

    l'étape ( 'Publication') {

    environnement {

    registryCredential = 'dockerhub'

    }

    étapes {

    {scénario

    def = AppImage Registre docker.build + ": $ BUILD_NUMBER"

    docker.withRegistry ( '', registryCredential) {

    appimage.push

    appimage.push ( 'latest')

    }

    }

    }

    }

    l'étape ( 'Déploiement') {

    étapes {

    {scénario

    def = image_id registre + ": $ BUILD_NUMBER"

    sh "ansible-PlayBook playbook.yml --extra-vars \" image_id = $ {} image_id \ ""

    }

    }

    }

    }

    }

    Fichier semble plus facile que de construire. Conduit comprenant essentiellement quatre étapes:

    1. Allez construire un binaire dans la phase de construction et d'assurer qu'il n'y a pas d'erreurs dans le processus de construction.

    2. Phase de test simple des applications des tests AUI pour assurer que l'application fonctionne comme prévu.

    3. Construction Docker Publier miroir de scène, et les pousser au registre. Depuis lors, son utilisation pour tout environnement.

    4. Appel Ansible dans la phase de déploiement à un contact Kubernetes et le fichier de définition d'application.

    Maintenant, nous allons parler d'un élément clé de cette Jenkinsfile.

    Sensiblement similaire aux deux premières étapes. Ils ont passé l'image golang Docker aux applications de construction. Laissez la scène prête tous les outils nécessaires pour construire et tester des conteneurs Docker courent est toujours une bonne habitude. Une autre option est d'installer ces outils ou à partir du serveur sur le serveur principal. Lorsque vous avez besoin de tester différentes versions de l'outil, la question est venue. Par exemple, nous pourrions utiliser BUILD Go 1.9 et tester notre code, parce que notre application n'est pas encore prêt à utiliser la dernière version de golang. Miroir contient tout le contenu, si changeant les versions et même le type d'image devient aussi simple que changer la chaîne.

    étape publier (ligne 42) premier spécifie une variable d'environnement qui sera utilisé dans l'étape suivante. Les points variables dans l'étape précédente est ajouté à l'ID de références Jenkins Docker Hub.

    Ligne 48: Nous utilisons le plugin docker pour construire le miroir. La valeur par défaut Dockerfile dans le registre et le numéro de build ajouté comme balises miroir. Lorsque vous devez déterminer Jenkins pour construire le code source est conteneur en cours d'exécution, ce qui devient très important.

    49-51 Ligne: Après avoir construit une image réussie, nous utilisons le numéro de build poussera Docker Hub. De plus, nous serons l'étiquette « nouveau » à miroir (deuxième onglet), de sorte que, si les besoins des utilisateurs, peut être extrait dans le miroir sans spécifier le numéro de build.

    Ligne 56-60: Dans la phase de déploiement, nous allons déployer et le fichier de définition de service au cluster. Nous utilisons le PlayBook discuté avant d'appeler Ansible. Notez que nous image_id comme arguments de ligne de commande passé. Cette valeur remplacera automatiquement le nom du fichier image de déploiement.

    CD tester notre pipeline

    La dernière partie de cet article, un exemple de test. Nous soumettrons le code à GitHub et de faire en sorte que notre code peut fonctionner sans problème au cluster dans le pipeline:

    1. Ajouter des fichiers:

    git add *

    2. Soumettre les modifications:

    git commit -m "Commit initial"

    3. poussé à GitHub:

    git push

    4. Sur Jenkins, nous pouvons attendre un déclencheur travail automatiquement, vous pouvez également cliquer sur « construire immédiatement (Const maintenant) ».

    5. Si le travail est exécuté avec succès, nous pouvons vérifier les applications qui sont déployées à l'aide de la commande suivante.

    6. Obtenir l'adresse IP du nud:

    7. Maintenant, laissez-nous initions une requête HTTP à l'application:

    Nous pouvons voir que nos applications fonctionnent correctement. Let a délibérément fait une erreur dans le code, et de veiller à ce que le pipeline n'envoie un code d'erreur à l'environnement cible:

    Modifier le message sera affiché comme « Bonjour tout le monde! » (Nous première lettre de chaque mot en majuscule, et suivi d'un point d'exclamation). Parce que nos clients ne veulent pas que le message à afficher de cette manière, de sorte que le pipeline doit être arrêté en phase de test Test.

    Tout d'abord, nous avons fait un changement. Maintenant, main.go fichier devrait ressembler à:

    Ensuite, nous allons nous engager et pousser le code:

    Retour à Jenkins, nous pouvons voir la version finale est cassé:

    En cliquant sur le travail a échoué, nous pouvons voir les raisons de son échec:

    Le code d'erreur ne sera jamais atteindre l'environnement cible.

    TL; DR

    • CI / CD fait partie intégrante de toutes les méthodes modernes pour suivre l'environnement Agile.

    • A travers le pipeline, vous pouvez vous assurer une transition en douceur du système de contrôle de version de code pour l'environnement cible (test / mise en scène / production / etc.), Tout en appliquant toutes les pratiques de contrôle de tests et de qualité nécessaires.

    • Dans cet article, nous avons réalisé une expérience réelle, de construire un pipeline pour fournir continué à déployer des applications golang.

    • Jenkins, nous pouvons extraire le code à partir du référentiel, en utilisant le Docker pertinent en miroir et sa construction test.

    • Ensuite, nous Docker de l'application et de les pousser à Docker Hub-- parce qu'il a passé notre test.

    • Enfin, nous utilisons Ansible va déployer l'application à exécuter Kubernetes l'environnement cible.

    • Utiliser des tuyaux Jenkins et les changements de make Ansible au flux de travail devient très simple et flexible, le problème est presque pas de frottement. Par exemple, nous pouvons ajouter plus dans la phase de test de test, vous pouvez changer la version pour Go construire et tester le code, vous pouvez utiliser plusieurs variables pour changer d'autres aspects du déploiement et de service.

    • La grande chose est que nous utilisons le déploiement Kubernetes, qui assure que lorsque vous modifiez la mise en miroir du conteneur, les temps d'arrêt d'application est égal à zéro. Parce que Déploiements en utilisant la méthode de retournement de mettre fin et recréer le conteneur par défaut. Seulement quand un nouveau conteneur est en cours d'exécution en bon état, le déploiement va tuer le vieux conteneur.

    Original: https: //hackernoon.com/how-to-create-a-cd-pipeline-with-kubernetes-ansible-and-jenkins-i6c03yp2

    Cet article traduction RPSC, s'il vous plaît indiquer la source de la source.

    Six étapes, la reconnaissance de plaque d'immatriculation est boutonnée AI! (Accompagné d'une analyse détaillée)
    Précédent
    Cette norme, Alipay est devenu sec! La Chine aura plus d'initiative
    Prochain
    Comment vision rationnelle du taux 5G jusqu'à?
    Java 10 nouvelles fonctionnalités les plus explications conviviales | programme de travail
    Sous épidémie ville fermée, voir la chaîne d'immeubles de bureaux distribués de la société les meilleures pratiques
    Un espace déclenché par la « tragédie »
    « Huawei recherche de » positif outre-mer mesurée, le règlement d'Apple de 500 millions $ « spin bas de la porte », cacher Firefox HTTPS | Geeks titres
    Lorsque le traitement des données en temps réel ne peut pas, comment dois-je faire?
    Sur les principes techniques et l'actualité des défis de récupération de données à partir d'événements de bibliothèque micro suppression de l'UA
    espace de stockage de pétrole plutôt que plus d'accord sur si oui ou non à couper
    « Une nouvelle infrastructure » sur la sortie de position géométrie affectent la demande d'acier?
    Charge de pointe décalant son de lecture à voix haute école mauvais moment, Ningxia, plus de 150.000 élèves de l'école secondaire de retour sur le campus
    prévention des épidémies d'entrée en dehors du Jiangxi stricte « passerelle » construire une forte « première ligne de défense. »
    Shanxi: 34 tonnes citerne réservoir d'essence a frappé rupture beaucoup de fuites