GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak vytvořit kanál CI/CD pro obrazy CircleCI Docker

Pokud hledáte způsob, jak otestovat a nasadit své obrazy CircleCI Docker, vytvoření kanálu CI/CD vám může zabrat dlouhou cestu ke zlepšení poskytování softwaru.

V tomto tutoriálu se dozvíte, jak můžete potenciálně vyvinout kanál CI/CD pro váš obrázek Docker pomocí CircleCI.

Čtěte dále a nasaďte své obrazy Docker, pouze pokud projdou testem!

Předpoklady

Tento tutoriál bude praktickou ukázkou. Pokud je chcete sledovat, ujistěte se, že máte následující:

  • GitHub účet a úložiště GitHub který je již nastaven.
  • Účet CircleCI propojený s vaším účtem GitHub.
  • Účet Docker Hub.
  • Docker nainstalován.
  • Počítač se systémem Linux – Tento výukový program používá Ubuntu 20.04.3 LTS.

Vytvoření obrázku Dockeru aplikace založené na Pythonu

Než přejdete k vytvoření kanálu CI/CD, nejprve vytvoříte obraz Dockeru založený na aplikaci Python, která zobrazuje texty ve webovém prohlížeči. Krátce si projdete, jak je aplikace sestavena, napíšete testovací případy pro aplikaci a poté aplikaci kontejnerizujete.

1. Otevřete svůj terminál a spusťte následující příkaz pro install Baňka a Pytest. Flask je framework používaný k vytváření webových aplikací v Pythonu, zatímco Pytest se používá k psaní testů Python kódu.

pip install flask pytest

2. Dále vytvořte adresář projektu s preferovaným názvem, ale adresář projektu se nazývá flask-circleci v tomto demu. V tomto adresáři budete ukládat své zdroje pro tento tutoriál.

mkdir flask-circleci

3. Vytvořte soubor s názvem flask-circleci/main.py a vyplňte následující kód.

Níže uvedený kód zobrazuje text „Welcome to my Flask App“ na domovské stránce v prohlížeči.

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. Nyní vytvořte další soubor s názvem flask-circleci/test_main.py a zkopírujte/vložte následující kód.

Níže uvedený kód vytvoří testovacího klienta pro vaši aplikaci.

Pytest vyžaduje, aby název vašeho testovacího souboru začínal na test_, jak je ukázáno níže.

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. Spuštěním následujících příkazů přejděte do adresáře projektu (flask-circleci ), spusťte test pro váš projekt.

cd flask-circleci
pytest

Pokud bude test úspěšný, získáte 100% pokrok, jak je uvedeno níže.

6. Dále vytvořte textový soubor (requirements.txt ), abyste zdokumentovali své závislosti v kořenovém adresáři a naplnili text níže. Tento soubor je nezbytný při vytváření obrazu Dockeru, aby správně fungoval.

Flask==2.0.3
pytest==6.2.5

7. Nakonec vytvořte nový soubor (flask-circleci/Dockerfile) a níže uvedené pokyny zapište do Dockerfile k vytvoření image Dockeru.

Pokyny v Dockerfile proveďte následující:

  • Vytvořte soubor ve svém obrázku.
  • Zkopíruje všechny soubory v souborech v aktuálním adresáři (flask-circleci ).
  • Spusťte svůj kód
# 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

Vytvoření kanálu CircleCI CI/CD

Nyní máte svůj obraz Dockeru připravený, vytvoříte kanál CI/CD k otestování kódu, a pokud všechny testy projdou obrazem Dockeru a budou odeslány do Docker Hub. Docker Hub je služba jako GitHub, ale pro obrázky Docker, která vám pomůže najít a sdílet obrázky kontejnerů s vaším týmem nebo jinými vývojáři.

Chcete-li vytvořit kanál CI/CD, postupujte podle následujících kroků:

1. Otevřete svůj oblíbený webový prohlížeč a přihlaste se ke svému účtu Docker Hub.

2. Na domovské stránce Docker Hub klikněte na Vytvořit úložiště možnost vytvořit úložiště na Docker Hub.

3. Nastavte jedinečný název pro své úložiště. Tento tutoriál používá úložiště s názvem circleci-tutorial , Jak je ukázáno níže.

4. Vytvořte nový soubor (flask-circleci/config.yml) v kořenovém adresáři vašeho projektu a zkopírujte/vložte níže uvedený kód do config.yml soubor.

Níže uvedený kód získá hotový obraz Pythonu a použije jej k instalaci závislostí a ke spuštění testů jednotek k vytvoření a odeslání obrazu Dockeru do vašeho úložiště Docker Hub.

V případě živého projektu byste obvykle měli své uživatelské jméno a heslo chránit v rámci CircleCI nebo možná v souboru .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. Nakonec spusťte následující příkazy v kořenovém adresáři vašeho projektu pro commit a push kód (flask-circleci/config.yml ) do vašeho úložiště GitHub.

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

Aktivace CircleCI CI/CD Pipeline

Právě jste vytvořili svůj CircleCI CI/CD Pipeline, ale právě teď tam jen sedí a nic moc nedělá. Budete muset aktivovat svůj kanál nastavením projektu ve svém účtu CircleCI.

1. Přihlaste se ke svému účtu CircleCI pomocí účtu GitHub ve webovém prohlížeči.

2. Dále klikněte na Projekty na levém panelu a klikněte na Nastavit projekt tlačítko na pravé straně vašeho projektu pro aktivaci potrubí CircleCI na projektu.

Protože jste se přihlásili do CircleCI pomocí svého účtu GitHub, vaše projekty se synchronizují s CircleCI, jako na obrázku níže.

3. Přejděte zpět na Hlavní panel a uvidíte Úspěch postavení. Úspěch stav označuje, že vše proběhlo podle očekávání a obrázek byl odeslán do vašeho úložiště Docker Hub.

Kliknutím na sestavení zobrazíte všechny připravované kroky.

Níže se můžete podívat na seznam kroků, které CircleCI podnikla pro spuštění kanálu.

4. Nakonec se přepněte zpět do svého úložiště Docker Hub a uvidíte obrázek, který jste odeslali do Docker Hub prostřednictvím kanálu CircleCI.

Přenesení změn do GitHubu ke spuštění kanálu CircleCI

Nyní již máte funkční potrubí CircleCI. Ale možná jste provedli změny ve svém projektu. Pokud ano, jak víte, že potrubí stále funguje? CircleCI můžete spustit odesláním změn do svého úložiště GitHub a uvidíte, zda bude test úspěšný.

1. Na místním počítači nahraďte kód, který máte v test_main.py s kódem níže. Níže uvedený kód záměrně zajišťuje selhání testu, protože se stavový kód změnil z 200 na 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. Dále nahraďte steps v config.yml který vytvoří obraz Dockeru a odešle jej do Docker Hub s níže uvedeným kódem.

V níže uvedeném kódu pouze měníte verzi, abyste zajistili, že do vašeho úložiště GitHub budou odeslány pouze nové změny.

      - 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. Spuštěním následujících příkazů v kořenovém adresáři projektu commit a push kód do vašeho úložiště GitHub.

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

4. Nyní přejděte na řídicí panel CircleCI a uvidíte, že sestavení se nezdařilo , Jak je ukázáno níže.

Kliknutím na sestavení zobrazíte kroky provedené k provedení změn a potvrzení toho, co způsobilo selhání sestavení.

5. Nakonec přejděte do svého úložiště Docker Hub a potvrďte, že změny nebyly přeneseny.

Jak můžete vidět na obrázku níže, verze 2 nebyla nahrána, protože test selhal.

Závěr

V tomto tutoriálu jste se naučili psát testy a dockerizovat svou aplikaci Python. Vytvořili jste kanál CI/CD pomocí CircleCI, který spustí test vaší aplikace a odešle vaši image Docker do Docker Hub.

V tomto bodě již máte základní znalosti o vývoji CI/CD potrubí s CircleCI. Jak tedy hodláte tyto nově nabyté znalosti využít? Možná vytvoření kanálu CI/CD, který nasadí váš obraz Dockeru do Heroku?


Docker
  1. Jak upravit obrázky Docker

  2. Jak vytvořit MySQL Docker Container pro testování

  3. Jak vytvořit odkaz na adresář

  1. Jak vytvořit sdílený adresář pro všechny uživatele v Linuxu

  2. Jak přesunout obrazy Dockeru mezi hostiteli

  3. Jak sdílet obrázky Docker s ostatními

  1. Learning Docker:Jak vytvořit kontejner Docker

  2. Jak připojit hostitelský adresář do kontejneru Docker

  3. Jak nasměruji obrázek dockeru do mého adresáře .m2 pro spuštění maven v dockeru na Macu?