GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment créer un pipeline CI/CD pour les images CircleCI Docker

Si vous cherchez un moyen de tester et de déployer vos images CircleCI Docker, la création d'un pipeline CI/CD peut vous permettre d'améliorer considérablement la livraison des logiciels.

Dans ce didacticiel, vous apprendrez comment vous pouvez potentiellement développer un pipeline CI/CD pour votre image Docker à l'aide de CircleCI.

Continuez à lire et déployez vos images Docker, uniquement si elles réussissent le test !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir les éléments suivants :

  • Un GitHub compte et dépôt GitHub qui est déjà configuré.
  • Un compte CircleCI lié à votre compte GitHub.
  • Un compte Docker Hub.
  • Docker installé.
  • Une machine Linux :ce didacticiel utilise Ubuntu 20.04.3 LTS.

Création d'une image Docker d'une application basée sur Python

Avant de passer à la création d'un pipeline CI/CD, vous allez d'abord créer une image Docker basée sur une application Python qui affiche des textes sur un navigateur Web. Vous expliquerez brièvement comment l'application est construite, rédigerez les cas de test pour l'application, puis conteneuriserez l'application.

1. Ouvrez votre terminal et exécutez la commande suivante pour install Flacon et Pytest. Flask est un framework utilisé pour créer des applications Web en Python tandis que Pytest est utilisé pour écrire des tests de code Python.

pip install flask pytest

2. Ensuite, créez un répertoire de projet avec votre nom préféré, mais le répertoire de projet s'appelle flask-circleci dans cette démo. Ce répertoire est l'endroit où vous stockerez vos ressources pour ce didacticiel.

mkdir flask-circleci

3. Créez un fichier appelé flask-circleci/main.py et remplissez le code suivant.

Le code ci-dessous affiche le texte "Bienvenue dans mon application Flask" sur une page d'accueil dans un navigateur.

from flask import Flask

app = Flask(__name__) #create an instance of the Flask class you just imported

@app.route('/')
def main():
    # display a string in the home page
    return "Welcome to my Flask App"

4. Maintenant, créez un autre fichier appelé flask-circleci/test_main.py et copiez/collez le code suivant.

Le code ci-dessous crée un client de test pour votre application.

Pytest exige que le nom de votre fichier de test commence par test_ comme illustré ci-dessous.

from main import app

def test_main():
		# Creates a test client for this application.
    response = app.test_client().get('/') 

		# assert the stutus code of the page('/') is 200
    assert response.status_code == 200 
		# assert the return statement to the page
    assert response.data == b'Welcome to my Flask App' 

5. Exécutez les commandes suivantes pour accéder au répertoire de votre projet (flask-circleci ), exécutez le test pour votre projet.

cd flask-circleci
pytest

Si le test réussit, vous obtiendrez une progression de 100 %, comme indiqué ci-dessous.

6. Ensuite, créez un fichier texte (requirements.txt ) pour documenter vos dépendances dans le répertoire racine et remplir le texte ci-dessous. Ce fichier est essentiel lors de la construction de votre image Docker afin qu'elle fonctionne correctement.

Flask==2.0.3
pytest==6.2.5

7. Enfin, créez un nouveau fichier (flask-circleci/Dockerfile) , et écrivez les instructions ci-dessous dans le Dockerfile pour créer votre image Docker.

Les instructions dans le Dockerfile effectuez les actions suivantes :

  • Créez un fichier à votre image.
  • Copie tous les fichiers dans les fichiers du répertoire courant (flask-circleci ).
  • Exécutez votre code
# set the Base Image from which your image will be built on
FROM python:3.8 
# create a directory called flask-circleci in root. 
# This directory will contain the code which currently resides in
RUN mkdir /flask-circleci

# make /flask-circleci the working directory
WORKDIR /flask-circleci

# copy your requirements file to the directory you just created
COPY requirements.txt /flask-circleci 

RUN pip install -r requirements.txt

# copy the current directory in you local machine to /flask-circleci in your image
ADD . /flask-circleci

EXPOSE 5000

CMD python main.py

Création d'un pipeline CI/CD CircleCI

Maintenant que votre image Docker est prête, vous allez créer un pipeline CI/CD pour tester votre code, et si tous les tests réussissent l'image Docker et sont poussés vers Docker Hub. Docker Hub est un service comme GitHub, mais pour les images Docker, qui vous aide à trouver et à partager des images de conteneurs avec votre équipe ou d'autres développeurs.

Pour créer le pipeline CI/CD, suivez les étapes ci-dessous :

1. Ouvrez votre navigateur Web préféré et connectez-vous à votre compte Docker Hub.

2. Sur la page d'accueil de Docker Hub, cliquez sur Créer un référentiel possibilité de créer un référentiel sur Docker Hub.

3. Définissez un nom unique pour votre référentiel. Ce tutoriel utilise un référentiel appelé circleci-tutorial , comme indiqué ci-dessous.

4. Créez un nouveau fichier (flask-circleci/config.yml) à la racine de votre projet, et copiez/collez le code ci-dessous dans le config.yml dossier.

Le code ci-dessous récupère une image Python prête à l'emploi et l'utilise pour installer les dépendances et exécuter les tests unitaires pour créer et pousser votre image Docker vers votre référentiel Docker Hub.

Généralement, pour un projet en direct, vous voudriez mettre votre nom d'utilisateur et votre mot de passe protégés dans CircleCI ou peut-être dans un fichier .env.

version: 2  # Version of CircleCI
jobs:
  build:
    docker:
      - image: python:3.8
    steps:
      - checkout

      - run:
        # creates a virtual environment for you project, 
				# install dependencies in it and run tests
          name: Run unit tests
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip install -r requirements.txt
            pytest
			# Creates a remote Docker environment configured to execute Docker commands.
      - setup_remote_docker 
       
      - run:
        # installs a docker client that will be used to run the docker commands
          name: Install Docker client
          command: |
            set -x
            VER="17.03.0-ce"
            curl -L -o /tmp/docker-$VER.tgz https://get.docker.com/builds/Linux/x86_64/docker-$VER.tgz
            tar -xz -C /tmp -f /tmp/docker-$VER.tgz
            mv /tmp/docker/* /usr/bin
      - run:
         # Builds a docker image to push to Docker Hub
				 # Tag (-t) pattern is below, where CircleCI 
				 # to get the Dockerfile from the current directory.
         # <docker_hub_username/docker-hub-password:version>.
          name: Build Docker image
          command: docker build -t khabdrick/circleci-tutorial:v1 .

      - run:
        # Pushes the Docker image you created to the Docker Hub.
        # Replace khabdrick/circleci-tutorial:v1 with the 
				# <docker_hub_username/docker-hub-password:version> you used to build the image above
          name: Push to Docker Hub
          command: |
            docker login -u unsername -p password
            docker push khabdrick/circleci-tutorial:v1

5. Enfin, exécutez les commandes suivantes à la racine de votre projet pour commit et push le code (flask-circleci/config.yml ) à votre référentiel GitHub.

git add . # adds changes to staging area
git commit -m "update" # commits your changes
git push # Push to GitHub

Activation du pipeline CI/CD CircleCI

Vous venez de créer votre pipeline CircleCI CI/CD, mais pour le moment, il est juste là et ne fait pas grand-chose. Vous devrez activer votre pipeline en configurant un projet dans votre compte CircleCI.

1. Connectez-vous à votre compte CircleCI avec votre compte GitHub sur votre navigateur Web.

2. Ensuite, cliquez sur Projets dans le panneau de gauche, puis cliquez sur Configurer le projet sur le côté droit de votre projet pour activer le pipeline CircleCI sur le projet.

Depuis que vous vous êtes connecté à CircleCI avec votre compte GitHub, vos projets se synchronisent avec CircleCI, comme dans l'image ci-dessous.

3. Revenez au tableau de bord et vous verrez l'onglet Succès statut. Le succès status indique que tout s'est déroulé comme prévu et que l'image a été transmise à votre référentiel Docker Hub.

Cliquez sur construire pour voir toutes les étapes qui se sont déroulées dans le pipeline.

Ci-dessous, vous pouvez voir la liste des étapes suivies par CircleCI pour exécuter le pipeline.

4. Enfin, revenez à votre référentiel Docker Hub et vous verrez l'image que vous avez transmise à Docker Hub via le pipeline CircleCI.

Apporter des modifications à GitHub pour déclencher le pipeline CircleCI

À présent, vous disposez déjà d'un pipeline CircleCI fonctionnel. Mais peut-être avez-vous apporté des modifications à votre projet. Si oui, comment sauriez-vous que le pipeline fonctionne toujours ? Vous pouvez déclencher CircleCI en envoyant des modifications à votre référentiel GitHub et voir si le test réussira.

1. Sur votre machine locale, remplacez le code que vous avez dans test_main.py avec le code ci-dessous. Le code ci-dessous garantit délibérément que le test échoue car le code d'état est passé de 200 à 400 .

from main import app

def test_main():
		# Creates a test client for this application.
    response = app.test_client().get('/') 

		# assert the status code of the page('/') is 400 when it isn't, 
		# causing the test to fail.
    assert response.status_code == 400 
		# assert the return statement ton the page
    assert response.data == b'Flask App' 

2. Ensuite, remplacez les steps dans le config.yml qui construit l'image Docker et la transmet à Docker Hub avec le code ci-dessous.

Dans le code ci-dessous, vous modifiez simplement la version pour vous assurer que seules les nouvelles modifications sont transmises à votre référentiel GitHub.

      - run:
          name: Build Docker image
          command: docker build -t khabdrick/circleci-tutorial:v2 .

      - run:
          name: Push to DockerHub
          command: |
            docker login -u khabdrick -p Muhammed-1998
            docker push khabdrick/circleci-tutorial:v2

3. Exécutez les commandes suivantes à la racine de votre projet pour commit et push le code dans votre référentiel GitHub.

git add . # adds changes to staging area
git commit -m "v2" # commits your changes
git push # Push to GitHub

4. Maintenant, accédez à votre tableau de bord CircleCI et vous verrez que la construction Échec , comme indiqué ci-dessous.

Cliquez sur la construction pour voir les étapes suivies pour pousser les modifications et confirmer ce qui a causé l'échec de la construction.

5. Enfin, accédez à votre référentiel Docker Hub et confirmez que les modifications n'ont pas été transmises.

Comme vous pouvez le voir dans l'image ci-dessous, la v2 n'a pas été téléchargée car le test a échoué.

Conclusion

Tout au long de ce didacticiel, vous avez appris à écrire des tests et à dockeriser votre application Python. Vous avez créé un pipeline CI/CD avec CircleCI qui exécute le test pour votre application et transmet votre image Docker à Docker Hub.

À ce stade, vous avez déjà une connaissance de base du développement d'un pipeline CI/CD avec CircleCI. Maintenant, comment comptez-vous utiliser ces nouvelles connaissances ? Peut-être créer un pipeline CI/CD qui déploie votre image Docker sur Heroku ?


Docker
  1. Comment créer un répertoire partagé pour tous les utilisateurs sous Linux

  2. Comment déplacer des images Docker entre les hôtes

  3. Comment partager des images Docker avec d'autres

  4. Comment monter un répertoire hôte dans un conteneur Docker

  5. Comment modifier les images Docker

Comment analyser les images de conteneur Docker à la recherche de vulnérabilités avec Trivy

Comment configurer des builds automatiques pour les images Docker sur GitHub

Comment nettoyer et supprimer des images Docker

Comment créer une image Docker à partir d'un conteneur en cours d'exécution

Comment créer des images Docker dans un pipeline GitLab CI

Comment vérifier l'utilisation de l'espace disque pour les images Docker, les conteneurs et les volumes