GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So erstellen Sie eine CI/CD-Pipeline für CircleCI-Docker-Images

Wenn Sie nach einer Möglichkeit suchen, Ihre CircleCI-Docker-Images zu testen und bereitzustellen, kann die Erstellung einer CI/CD-Pipeline einen großen Beitrag zur Verbesserung der Softwarebereitstellung leisten.

In diesem Tutorial erfahren Sie, wie Sie mit CircleCI potenziell eine CI/CD-Pipeline für Ihr Docker-Image entwickeln können.

Lesen Sie weiter und stellen Sie Ihre Docker-Images nur bereit, wenn sie den Test bestehen!

Voraussetzungen

Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben:

  • Ein GitHub -Konto und GitHub-Repository das ist bereits eingerichtet.
  • Ein CircleCI-Konto, das mit Ihrem GitHub-Konto verknüpft ist.
  • Ein Docker-Hub-Konto.
  • Docker installiert.
  • Ein Linux-Rechner – Dieses Tutorial verwendet Ubuntu 20.04.3 LTS.

Erstellen eines Docker-Images einer Python-basierten Anwendung

Bevor Sie mit dem Erstellen einer CI/CD-Pipeline beginnen, erstellen Sie zunächst ein Docker-Image basierend auf einer Python-Anwendung, die Texte in einem Webbrowser anzeigt. Sie werden kurz durchgehen, wie die Anwendung erstellt wird, die Testfälle für die Anwendung schreiben und die Anwendung dann containerisieren.

1. Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl zum install aus Kolben und Pytest. Flask ist ein Framework zum Erstellen von Webanwendungen in Python, während Pytest zum Schreiben von Test-Python-Code verwendet wird.

pip install flask pytest

2. Als nächstes erstellen Sie ein Projektverzeichnis mit Ihrem bevorzugten Namen, aber das Projektverzeichnis heißt flask-circleci in dieser Demo. In diesem Verzeichnis speichern Sie Ihre Ressourcen für dieses Tutorial.

mkdir flask-circleci

3. Erstellen Sie eine Datei namens flask-circleci/main.py und füllen Sie den folgenden Code aus.

Der folgende Code zeigt den Text „Willkommen in meiner Flask-App“ auf einer Startseite in einem Browser an.

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. Erstellen Sie nun eine weitere Datei namens flask-circleci/test_main.py und kopieren/fügen Sie den folgenden Code ein.

Der folgende Code erstellt einen Testclient für Ihre Anwendung.

Pytest erfordert, dass der Name Ihrer Testdatei mit test_ beginnt, wie unten gezeigt.

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. Führen Sie die folgenden Befehle aus, um zu Ihrem Projektverzeichnis zu navigieren (flask-circleci ), führen Sie den Test für Ihr Projekt aus.

cd flask-circleci
pytest

Wenn der Test erfolgreich ist, erhalten Sie 100 % Fortschritt, wie unten gezeigt.

6. Als nächstes erstellen Sie eine Textdatei (requirements.txt ), um Ihre Abhängigkeiten im Stammverzeichnis zu dokumentieren und den Text unten auszufüllen. Diese Datei ist wichtig, wenn Sie Ihr Docker-Image erstellen, damit es ordnungsgemäß funktioniert.

Flask==2.0.3
pytest==6.2.5

7. Zuletzt erstellen Sie eine neue Datei (flask-circleci/Dockerfile) , und schreiben Sie die nachstehenden Anweisungen in die Dockerfile um Ihr Docker-Image zu erstellen.

Die Anweisungen in der Dockerfile Führen Sie Folgendes aus:

  • Erstellen Sie eine Datei in Ihrem Bild.
  • Kopiert alle Dateien in die Dateien im aktuellen Verzeichnis (flask-circleci ).
  • Führen Sie Ihren Code aus
# 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

Erstellen einer CircleCI CI/CD-Pipeline

Nachdem Sie Ihr Docker-Image fertig haben, erstellen Sie eine CI/CD-Pipeline, um Ihren Code zu testen, und wenn alle Tests das Docker-Image bestehen und an Docker Hub übertragen werden. Docker Hub ist ein Dienst wie GitHub, jedoch für Docker-Images, der Ihnen hilft, Container-Images zu finden und mit Ihrem Team oder anderen Entwicklern zu teilen.

Führen Sie die folgenden Schritte aus, um die CI/CD-Pipeline zu erstellen:

1. Öffnen Sie Ihren bevorzugten Webbrowser und melden Sie sich bei Ihrem Docker Hub-Konto an.

2. Klicken Sie auf der Startseite von Docker Hub auf Repository erstellen Option zum Erstellen eines Repositorys auf Docker Hub.

3. Legen Sie einen eindeutigen Namen für Ihr Repository fest. Dieses Tutorial verwendet ein Repository namens circleci-tutorial , Wie nachfolgend dargestellt.

4. Erstellen Sie eine neue Datei (flask-circleci/config.yml) im Stammverzeichnis Ihres Projekts und kopieren Sie den folgenden Code und fügen Sie ihn in die config.yml ein Datei.

Der folgende Code ruft ein vorgefertigtes Python-Image ab und verwendet es, um die Abhängigkeiten zu installieren und die Komponententests auszuführen, um Ihr Docker-Image zu erstellen und in Ihr Repository Docker Hub zu übertragen.

Normalerweise möchten Sie für ein Live-Projekt Ihren Benutzernamen und Ihr Passwort geschützt in CircleCI oder vielleicht in einer .env-Datei speichern.

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. Führen Sie abschließend die folgenden Befehle im Stammverzeichnis Ihres Projekts aus, um commit auszuführen und push den Code (flask-circleci/config.yml ) in Ihr GitHub-Repository.

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

Aktivieren der CircleCI CI/CD-Pipeline

Sie haben gerade Ihre CircleCI CI/CD-Pipeline erstellt, aber im Moment sitzt sie nur da und tut nicht viel. Sie müssen Ihre Pipeline aktivieren, indem Sie ein Projekt in Ihrem CircleCI-Konto einrichten.

1. Melden Sie sich mit Ihrem GitHub-Konto in Ihrem Webbrowser bei Ihrem CircleCI-Konto an.

2. Klicken Sie als Nächstes auf Projekte im linken Bereich und klicken Sie auf Projekt einrichten Schaltfläche auf der rechten Seite Ihres Projekts, um die CircleCI-Pipeline für das Projekt zu aktivieren.

Da Sie sich mit Ihrem GitHub-Konto bei CircleCI angemeldet haben, werden Ihre Projekte wie im Bild unten mit CircleCI synchronisiert.

3. Navigieren Sie zurück zum Dashboard und Sie sehen den Erfolg Status. Der Erfolg status zeigt an, dass alles wie erwartet gelaufen ist und das Image in Ihr Docker-Hub-Repository gepusht wurde.

Klicken Sie auf Build, um alle Schritte anzuzeigen, die in der Pipeline ausgeführt wurden.

Unten sehen Sie die Liste der Schritte, die CircleCI unternommen hat, um die Pipeline auszuführen.

4. Wechseln Sie schließlich zurück zu Ihrem Docker Hub-Repository, und Sie sehen das Image, das Sie über die CircleCI-Pipeline an Docker Hub gepusht haben.

Änderungen an GitHub übertragen, um die CircleCI-Pipeline auszulösen

Inzwischen haben Sie bereits eine funktionierende CircleCI-Pipeline. Aber vielleicht haben Sie Änderungen an Ihrem Projekt vorgenommen. Wenn ja, woher wissen Sie, dass die Pipeline noch funktioniert? Sie können CircleCI auslösen, indem Sie Änderungen an Ihr GitHub-Repository übertragen und sehen, ob der Test erfolgreich ist.

1. Ersetzen Sie auf Ihrem lokalen Rechner den Code in test_main.py mit dem Code unten. Der folgende Code stellt absichtlich sicher, dass der Test fehlschlägt, da sich der Statuscode von 200 geändert hat bis 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. Ersetzen Sie als Nächstes die steps in der config.yml das das Docker-Image erstellt und es mit dem folgenden Code an Docker Hub überträgt.

Im folgenden Code ändern Sie nur die Version, um sicherzustellen, dass nur neue Änderungen in Ihr GitHub-Repository übertragen werden.

      - 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. Führen Sie die folgenden Befehle im Stammverzeichnis Ihres Projekts zum commit aus und push den Code in Ihr GitHub-Repository.

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

4. Navigieren Sie nun zu Ihrem CircleCI-Dashboard und Sie werden sehen, dass der Build Fehlgeschlagen ist , Wie nachfolgend dargestellt.

Klicken Sie auf Build, um die Schritte anzuzeigen, die zum Übertragen der Änderungen unternommen wurden, und bestätigen Sie, was dazu geführt hat, dass der Build fehlgeschlagen ist.

5. Navigieren Sie zuletzt zu Ihrem Docker Hub-Repository und bestätigen Sie, dass die Änderungen nicht übertragen wurden.

Wie Sie im Bild unten sehen können, wurde v2 nicht hochgeladen, da der Test fehlgeschlagen ist.

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie Tests schreiben und Ihre Python-Anwendung dockerisieren. Sie haben mit CircleCI eine CI/CD-Pipeline erstellt, die den Test für Ihre Anwendung ausführt und Ihr Docker-Image an Docker Hub überträgt.

Zu diesem Zeitpunkt verfügen Sie bereits über grundlegende Kenntnisse in der Entwicklung einer CI/CD-Pipeline mit CircleCI. Wie beabsichtigen Sie nun, dieses neu gewonnene Wissen zu nutzen? Vielleicht eine CI/CD-Pipeline erstellen, die Ihr Docker-Image für Heroku bereitstellt?


Docker
  1. So erstellen Sie ein freigegebenes Verzeichnis für alle Benutzer in Linux

  2. So teilen Sie Docker-Images mit anderen

  3. So erstellen Sie einen MySQL-Docker-Container zum Testen

  4. So erstellen Sie einen Link zu einem Verzeichnis

  5. Wie zeige ich ein Docker-Image auf mein .m2-Verzeichnis, um Maven in Docker auf einem Mac auszuführen?

So scannen Sie Docker-Container-Images mit Trivy auf Schwachstellen

So richten Sie automatische Builds für Docker-Images auf GitHub ein

So bereinigen und löschen Sie Docker-Images

So erstellen Sie ein Docker-Image aus einem laufenden Container

So erstellen Sie Docker-Images in einer GitLab-CI-Pipeline

So überprüfen Sie die Speicherplatznutzung für Docker-Images, Container und Volumes