GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo crear una canalización de CI/CD para imágenes de CircleCI Docker

Si está buscando una manera de probar e implementar sus imágenes de Docker de CircleCI, la creación de una canalización de CI/CD puede ayudarlo mucho a mejorar la entrega de software.

En este tutorial, aprenderá cómo puede desarrollar potencialmente una canalización de CI/CD para su imagen de Docker usando CircleCI.

Siga leyendo e implemente sus imágenes de Docker, ¡solo si pasan la prueba!

Requisitos

Este tutorial será una demostración práctica. Si desea seguirnos, asegúrese de tener lo siguiente:

  • Un GitHub cuenta y repositorio de GitHub eso ya está configurado.
  • Una cuenta de CircleCI vinculada a su cuenta de GitHub.
  • Una cuenta de Docker Hub.
  • Docker instalado.
  • Una máquina Linux:este tutorial usa Ubuntu 20.04.3 LTS.

Creación de una imagen Docker de una aplicación basada en Python

Antes de saltar a la creación de una canalización de CI/CD, primero creará una imagen de Docker basada en una aplicación de Python que muestra textos en un navegador web. Explicará brevemente cómo se crea la aplicación, escribirá los casos de prueba para la aplicación y luego la colocará en un contenedor.

1. Abra su terminal y ejecute el siguiente comando para install Matraz y Pytest. Flask es un marco utilizado para crear aplicaciones web en Python, mientras que Pytest se utiliza para escribir pruebas de código Python.

pip install flask pytest

2. A continuación, cree un directorio del proyecto con su nombre preferido, pero el directorio del proyecto se llama flask-circleci en esta demostración. Este directorio es donde almacenará sus recursos para este tutorial.

mkdir flask-circleci

3. Cree un archivo llamado flask-circleci/main.py y llene el siguiente código.

El siguiente código muestra el texto "Bienvenido a mi aplicación Flask" en una página de inicio en un navegador.

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. Ahora, crea otro archivo llamado flask-circleci/test_main.py y copia/pega el siguiente código.

El siguiente código crea un cliente de prueba para su aplicación.

Pytest requiere que el nombre de su archivo de prueba comience con test_ como se muestra a continuación.

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. Ejecute los siguientes comandos para navegar al directorio de su proyecto (flask-circleci ), ejecute la prueba para su proyecto.

cd flask-circleci
pytest

Si la prueba tiene éxito, obtendrá un 100 % de progreso, como se muestra a continuación.

6. A continuación, cree un archivo de texto (requirements.txt ) para documentar sus dependencias en el directorio raíz y completar el texto a continuación. Este archivo es esencial al construir su imagen de Docker para que funcione correctamente.

Flask==2.0.3
pytest==6.2.5

7. Por último, cree un nuevo archivo (flask-circleci/Dockerfile) y escriba las instrucciones a continuación en el Dockerfile para construir su imagen de Docker.

Las instrucciones en el Dockerfile realice lo siguiente:

  • Cree un archivo en su imagen.
  • Copia todos los archivos en los archivos del directorio actual (flask-circleci ).
  • Ejecute su código
# 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

Creación de una canalización CI/CD de CircleCI

Ahora que tiene lista su imagen de Docker, creará una canalización de CI/CD para probar su código, y si todas las pruebas pasan la imagen de Docker y se envían a Docker Hub. Docker Hub es un servicio como GitHub, pero para imágenes de Docker, que lo ayuda a encontrar y compartir imágenes de contenedores con su equipo u otros desarrolladores.

Para crear la canalización de CI/CD, siga los pasos a continuación:

1. Abra su navegador web favorito e inicie sesión en su cuenta de Docker Hub.

2. En la página de inicio de Docker Hub, haga clic en Crear repositorio opción para crear un repositorio en Docker Hub.

3. Establezca un nombre único para su repositorio. Este tutorial utiliza un repositorio llamado circleci-tutorial , Como se muestra abajo.

4. Cree un nuevo archivo (flask-circleci/config.yml) en la raíz de su proyecto, y copie/pegue el siguiente código en config.yml expediente.

El siguiente código obtiene una imagen de Python lista para usar y la usa para instalar las dependencias y ejecutar las pruebas unitarias para compilar y enviar su imagen de Docker a su repositorio Docker Hub.

Normalmente, para un proyecto en vivo, querrá poner su nombre de usuario y contraseña protegidos dentro de CircleCI o tal vez en un archivo .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. Finalmente, ejecute los siguientes comandos en la raíz de su proyecto para commit y push el código (flask-circleci/config.yml ) a su repositorio de GitHub.

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

Activación de la canalización CI/CD de CircleCI

Acaba de crear su Pipeline de CI/CD de CircleCI, pero en este momento, está sentado allí y no está haciendo mucho. Tendrá que activar su embudo configurando un proyecto en su cuenta de CircleCI.

1. Inicie sesión en su cuenta de CircleCI con su cuenta de GitHub en su navegador web.

2. A continuación, haga clic en Proyectos en el panel izquierdo y haz clic en Configurar proyecto en el lado derecho de su proyecto para activar la canalización de CircleCI en el proyecto.

Desde que inició sesión en CircleCI con su cuenta de GitHub, sus proyectos se sincronizan con CircleCI, como en la imagen a continuación.

3. Vuelve al Panel de control. y verás el mensaje Success estado. El éxito el estado indica que todo se ejecutó como se esperaba y que la imagen se envió a su repositorio de Docker Hub.

Haga clic en construir para ver todos los pasos que se ejecutaron en la canalización.

A continuación, puede ver la lista de pasos que tomó CircleCI para ejecutar la canalización.

4. Finalmente, vuelva a su repositorio de Docker Hub y verá la imagen que envió a Docker Hub a través de la canalización de CircleCI.

Enviar cambios a GitHub para activar la canalización de CircleCI

A estas alturas, ya tiene una canalización de CircleCI en funcionamiento. Pero tal vez hiciste cambios en tu proyecto. Si es así, ¿cómo sabría que la tubería aún funciona? Puede activar CircleCI enviando cambios a su repositorio de GitHub y ver si la prueba tiene éxito.

1. En su máquina local, reemplace el código que tiene en test_main.py con el código de abajo. El siguiente código asegura deliberadamente que la prueba falle porque el código de estado cambió de 200 a 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. A continuación, reemplace los steps en el config.yml que crea la imagen de Docker y la envía a Docker Hub con el siguiente código.

En el código a continuación, solo está cambiando la versión para asegurarse de que solo los cambios nuevos se envíen a su repositorio de 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. Ejecute los siguientes comandos en la raíz de su proyecto para commit y push el código a su repositorio de GitHub.

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

4. Ahora, vaya a su panel de control de CircleCI y verá que la compilación Error , Como se muestra abajo.

Haga clic en construir para ver los pasos tomados para impulsar los cambios y confirmar qué causó que la construcción fallara.

5. Por último, navegue a su repositorio de Docker Hub y confirme que los cambios no se enviaron.

Como puede ver en la imagen a continuación, la versión 2 no se cargó porque la prueba falló.

Conclusión

A lo largo de este tutorial, ha aprendido a escribir pruebas y Dockerize su aplicación de Python. Ha creado una canalización de CI/CD con CircleCI que ejecuta la prueba para su aplicación y envía su imagen de Docker a Docker Hub.

En este punto, ya tiene un conocimiento básico sobre el desarrollo de una canalización de CI/CD con CircleCI. Ahora, ¿cómo pretende utilizar este nuevo conocimiento? ¿Quizás crear una canalización de CI/CD que implemente su imagen de Docker en Heroku?


Docker
  1. Cómo crear un directorio compartido para todos los usuarios en Linux

  2. Cómo mover imágenes de Docker entre hosts

  3. Cómo compartir imágenes de Docker con otros

  4. Cómo montar un directorio de host en un contenedor Docker

  5. Cómo crear un enlace a un directorio

Cómo escanear imágenes de contenedores Docker en busca de vulnerabilidades con Trivy

Cómo configurar compilaciones automáticas para imágenes de Docker en GitHub

Cómo limpiar y eliminar imágenes de Docker

Cómo crear una imagen de Docker desde un contenedor en ejecución

Cómo crear imágenes de Docker en una canalización de GitLab CI

Cómo verificar el uso de espacio en disco para imágenes, contenedores y volúmenes de Docker