איך ליצור צינור CI/CD עבור דוקר של תמונות ב- CircleCI

אם אתה מחפש דרך לבדוק ולהשקיע את הדימויים שלך ב- CircleCI, יצירת קו אוטומציה יכולה להביא אותך רחוק כדי לשפר את מסירת התוכנה שלך.

במדריך זה, תלמד כיצד תוכל לפתח קו אוטומציה עבור הדימוי שלך באמצעות CircleCI.

המשך קריאה והשק את הדימויים שלך, רק אם הם עוברים את הבדיקה!

דרישות מוקדמות

מדובר במדריך מעשי. אם ברצונך לבצע את המדריך, וודא שיש לך את הבא:

יצירת דימוי באמצעות Docker של אפליקציה בנויה ב-Python

לפני שתתחיל ליצור קו אוטומציה, יש לך ליצור דימוי של Docker בהתבסס על יישום ב-Python שמציג טקסטים בדפדפן אינטרנט. תעבור בקצרה דרך כיצד היישום מבוסס, תכתוב את מקרי הבדיקה עבור היישום ואז תקונטנריז את היישום.

1. פתח את הטרמינל שלך והרץ את הפקודה הבאה כדי להתקין את Flask ו- Pytest. Flask הוא סביבת עבודה המשמשת לבניית אפליקציות אינטרנט בפייתון, בעוד ש- Pytest משמש לכתיבת בדיקות לקוד פייתון.

pip install flask pytest

2. לאחר מכן, צור ספריית פרויקט עם השם המועדף עליך, אך ספריית הפרויקט תקרא flask-circleci בדוגמה זו. ספריית זו היא המקום שבו תאחסן את המשאבים שלך למדריך זה.

mkdir flask-circleci

3. צור קובץ בשם flask-circleci/main.py ומלא את הקוד הבא.

הקוד למטה מציג את הטקסט "ברוכים הבאים לאפליקציית Flask שלי" בדף הבית בדפדפן.

from flask import Flask

app = Flask(__name__) #צור מופע של מחלקת Flask שקיבלת עכשיו

@app.route('/')
def main():
    #הצג מחרוזת בדף הבית
    return "Welcome to my Flask App"

4. כעת, צור קובץ נוסף בשם flask-circleci/test_main.py והעתק/הדבק את הקוד הבא.

הקוד למטה יוצר לך לקוח בדיקה עבור האפליקציה שלך.

Pytest דורש ששם קובץ הבדיקות שלך יתחיל עם test_ כפי שמודגם למטה.

from main import app

def test_main():
		# יוצר קליינט לבדיקות עבור אפליקציה זו.
    response = app.test_client().get('/') 

		# אמת כי קוד התגובה של הדף ('/') הוא 200
    assert response.status_code == 200 
		# אמת כי ההחזר של הדף הוא תקין
    assert response.data == b'Welcome to my Flask App' 

5. הרץ את הפקודות הבאות כדי לנווט לתיקיית הפרויקט שלך (flask-circleci), הפעל את הבדיקות שלך.

cd flask-circleci
pytest

אם הבדיקה הצליחה, תקבל 100% התקדמות, כפי שמוצג למטה.

Running Test for the Project

6. לבסוף, צור קובץ טקסט (requirements.txt) לתיעוד התלויותיך בתיקייה הראשית ומלא את הטקסט למטה. קובץ זה הוא חיוני בבניית הדוקר שלך כך שהוא יעבוד כראוי.

Flask==2.0.3
pytest==6.2.5

7. לבסוף, צור קובץ חדש (flask-circleci/Dockerfile), וכתוב את ההוראות לקובץ ה־Dockerfile לבניית הדוקר שלך.

ההוראות בקובץ ה־Dockerfile מבצעות את הפעולות הבאות:

  • יצירת קובץ בתמונה שלך.
  • העתקת כל הקבצים בתיקייה הנוכחית (flask-circleci).
  • הפעלת קוד שלך
# קבע את התמונת הבסיס ממנה תיבנה התמונה שלך
FROM python:3.8 
# צור ספרייה בשם flask-circleci בשורש.
# הספרייה הזו תכיל את הקוד שנמצא כרגע ב
RUN mkdir /flask-circleci

# הפוך את /flask-circleci לספריית עבודה
WORKDIR /flask-circleci

# העתק את קובץ הדרישות שלך לתיקייה שכתבת עכשיו
COPY requirements.txt /flask-circleci 

RUN pip install -r requirements.txt

# העתק את התיקייה הנוכחית במחשבך המקומי ל /flask-circleci בתמונת ה Docker שלך
ADD . /flask-circleci

EXPOSE 5000

CMD python main.py

יצירת צינור CI/CD של CircleCI

עכשיו יש לך את התמונת Docker שלך מוכנה, תיצור צינור CI/CD כדי לבדוק את הקוד שלך, ואם כל הבדיקות עוברות, התמונה של Docker תידחס ל Hub של Docker. Docker Hub הוא שירות דומה ל-GitHub, אך עבור תמונות Docker, שעוזר לך למצוא ולשתף תמונות מכולות עם הצוות שלך או מפתחים אחרים.

כדי ליצור את צינור ה CI/CD, עקוב אחר השלבים הבאים:

1. פתח את הדפדפן האינטרנט האהוב עליך והתחבר אל חשבון Hub של Docker.

2. בדף הבית של Hub של Docker, לחץ על האפשרות צור מאגר כדי ליצור מאגר ב-Hub של Docker.

Creating a Repository

3. הגדר שם ייחודי עבור המאגר שלך. במדריך זה משתמשים במאגר בשם circleci-tutorial, כפי שמוצג למטה.

Naming and Creating the Docker Hub Repository

4. צור קובץ חדש (flask-circleci/config.yml) בשורש הפרוייקט שלך, והעתק/הדבק את הקוד לתוך הקובץ config.yml.

הקוד למטה משתמש בתמונת Python מוכנה ומשתמש בה כדי להתקין את התלויות ולהפעיל את מבחני היחידה כדי לבנות ולדחוף את תמונת ה-Docker שלך למאגר ה-Docker Hub שלך.

רגילה, עבור פרוייקט פעיל, תרצה להכניס את שם המשתמש והסיסמה שלך בתוך CircleCI או אולי בקובץ .env.

version: 2  # גרסה של CircleCI
jobs:
  build:
    docker:
      - image: python:3.8
    steps:
      - checkout

      - run:
        # יוצר סביבה וירטואלית עבור הפרויקט שלך,
				# מתקין תלות בסביבה ומפעיל בדיקות
          name: Run unit tests
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip install -r requirements.txt
            pytest
			# יוצר סביבת Docker רחוקה מוגדרת לבצע פעולות Docker.
      - setup_remote_docker 
       
      - run:
        # מתקין לך קליינט Docker שישמש להרצת פקודות Docker
          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:
         # בונה תמונת Docker להעלאה ל-Docker Hub
				 # התג (-t) הוא כפי שמוצג למטה, שבו CircleCI
				 # לקבל את קובץ ה-Dockerfile מהתיקייה הנוכחית.
         # <שם_משתמש_ב-Docker_Hub/סיסמה_ב-Docker_Hub:גרסה>.
          name: Build Docker image
          command: docker build -t khabdrick/circleci-tutorial:v1 .

      - run:
        # דוחף את הדמות שיצרת ל-Docker Hub.
        # החלף את khabdrick/circleci-tutorial:v1 ב-
				# <שם_משתמש_ב-Docker_Hub/סיסמה_ב-Docker_Hub:גרסה> שהשתמשת לבניית הדמות למעלה
          name: Push to Docker Hub
          command: |
            docker login -u username -p password
            docker push khabdrick/circleci-tutorial:v1

5. לבסוף, הרץ את הפקודות הבאות בשורש הפרויקט שלך כדי לcommit ולpush את הקוד (flask-circleci/config.yml) למאגר GitHub שלך.

git add . # מוסיף שינויים לאזור התצוגה
git commit -m "update" # עושה commit לשינויים שלך
git push # דחף ל-GitHub

עובד בפעולה את מערכת הניהול של מערכת CircleCI CI/CD

יצרת כעת את ה־CircleCI CI/CD Pipeline שלך, אך כרגע הוא פשוט עומד שם ולא עושה הרבה. עליך להפעיל את ה־pipeline שלך על ידי הגדרת פרויקט בחשבון שלך ב־CircleCI.

1. התחבר לחשבון ה־CircleCI שלך עם חשבון ה־GitHub שלך בדפדפן האינטרנט שלך.

2. לאחר מכן, לחץ על לשונית ה־Projects בלוח הצד השמאלי, ולחץ על לחצן ה־Set Up Project בצד ימין של הפרויקט שלך כדי להפעיל את מערכת ה־CircleCI על הפרויקט.

מאחר שהתחברת ל־CircleCI עם חשבון ה־GitHub שלך, הפרויקטים שלך סונכרנים עם CircleCI, כפי שמוצג בדימוי למטה.

Setting up a Project

3. חזור ללשונית ה־Dashboard ותראה את מצב ה־Success. מצב ה־Success מציין שהכל התרחש כפי שצפוי, והדימוי הועלה למאגר ה־Docker Hub שלך.

לחץ על בנייה כדי לראות את כל השלבים שהופעלו ב־pipeline.

Viewing Project Status

מתחת לכך, תראה את רשימת השלבים ש־CircleCI ביצעה כדי להפעיל את ה־pipeline.

Viewing Steps that Ran the Pipeline

4. לבסוף, החזור למאגר ה־Docker Hub שלך, ותראה את הדימוי שהועלה ל־Docker Hub דרך ה־CircleCI pipeline.

Viewing Pushed circleci docker images in Docker Hub Repository

דחיפת שינויים ל־GitHub כדי להפעיל את ה־CircleCI Pipeline

עד כה, יש לך קוֹד circleci פעיל. אך אולי עשית שינויים בפרויקט שלך. אם כן, איך ידעת שהקוֹד עדיין עובד? תוכל להפעיל את circleci על ידי דחיפת שינויים למאגר github שלך ולראות אם הבדיקה תצליח.

1. במחשב המקומי שלך, החלף את הקוד שיש לך ב־test_main.py עם הקוד למטה. הקוד מבצע כוונה ומבטיח שהבדיקה תכשל מכיוון שקוד הסטטוס שונה מ־200 ל־400.

from main import app

def test_main():
		# יוצר קליינט בדיקה עבור היישום הזה.
    response = app.test_client().get('/') 

		# מוֹעיל לוודא שקוד הסטטוס של הדף('/') הוא 400 כאשר זה לא נכון, 
		# מה שגורם לבדיקה לכשל.
    assert response.status_code == 400 
		# מוֹעיל לוודא את ההחזר של הפקודה בדף
    assert response.data == b'Flask App' 

2. לאחר מכן, החלף את steps ב־config.yml שבונה את תמונת הדוקר ודוחפת אותה ל־docker hub עם הקוד למטה.

בקוד למטה, אתה רק משנה את הגרסה כדי לוודא שרק שינויים חדשים יודחפו למאגר github שלך.

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

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

3. הרץ את הפקודות הבאות בשורש הפרויקט שלך כדי להכניס לשלב את הקוד למאגר github שלך.

git add . # מוסיף שינויים לאזור הסטגנג
git commit -m "v2" # מכתיר את השינויים שלך
git push # הקש על github

4. כעת, נווט ללוח המחוונים שלך ב־circleci, ותראה שהבנייה נכשלה, כפי שמוצג למטה.

לחץ על בנייה כדי לראות את השלבים הנדרשים כדי לדחוס את השינויים ולאשר מה גרם לכשל בבנייה.

Viewing Project Status (Failed)
Showing Failed Tests

בסיום, נווט למאגר ה-Docker Hub שלך ואשר שהשינויים לא דוחסו.

כפי שניתן לראות בתמונה למטה, v2 לא הועלה מכיוון שהבדיקה נכשלה.

Viewing Repository in Docker Hub

סיכום

מכללל במהלך המדריך הזה, למדת כיצד לכתוב בדיקות ולהכניס את היישום שלך ב-Python לתוך Docker. יצרת צינור CI/CD עם CircleCI שמפעיל את הבדיקות עבור היישום שלך ודוחס את תמונת ה-Docker שלך ל-Docker Hub.

בנקודה זו, יש לך כבר ידע בסיסי על פיתוח צינור CI/CD עם CircleCI. כעת, איך אתה מתכוון להשתמש בידע הזה החדשני? אולי ייצור צינור CI/CD שפותח את תמונת ה-Docker שלך ל-Heroku?

Source:
https://adamtheautomator.com/circleci-docker-images/