הקדמה
במאמר זה, אסביר כיצד לבנות תהליך בדיקות CI/CD באמצעות GitHub Actions. העבודה על פרויקט זה פותחה יחד עם אליאס שורוש.
המחסנית הטכנולוגית ששימשה למימוש הפתרון הם:
שפת תכנות: פייתון
סביבת בדיקות (Framework): pytest
סביבת דיווח (Framework): Allure
מה זה GitHub Actions?
לפי מאמר זה:
GitHub Actions הוא API של סיבה ותוצאה ב-GitHub: תזמור כל תהליך עבודה (workflow), המבוסס על כל אירוע, בזמן ש-GitHub מנהלת את הביצוע, מספקת משוב עשיר ומאבטחת כל שלב בדרך. עם GitHub Actions, תהליכי עבודה ושלבים הם פשוט קוד בפרוייקט (repository), כך שתוכלו ליצור, לשתף, לעשות שימוש חוזר ולבצע פיצול (fork) לפרקטיקות פיתוח התוכנה שלכם.
GitHub Actions הם בחינם ותומכים בפרוייקטים ציבוריים. המאמר יודגם באמצעות הפרוייקט הציבורי שלי, המכיל חבילת בדיקות E2E שנכתבו בפייתון.
מימוש הפתרון
עלינו ליצור תיקיית .github
בשורש הפרויקט שלנו, ובתוכה ליצור תיקיית workflows
. בתוכה, ניצור את תהליכי העבודה שלנו, שהם קבצי YAML.
זהו תוכן קובץ ה-workflow:
name: Python application
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Starting Selenoid Server (aerokube/selenoid) within actions
uses: ajinx/selenoid@2.0
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Install plugin
run: pip install pytest-github-actions-annotate-failures
- name: Test with pytest
run: |
pytest --alluredir=allure-results --browser remote
- name: Allure results
uses: simple-elf/allure-report-action@master
if: always()
id: allure-report
with:
allure_results: allure-results
allure_report: allure-report
gh_pages: gh-pages
allure_history: allure-history
- name: Deploy report to Github Pages
if: always()
uses: peaceiris/actions-gh-pages@v2
env:
PERSONAL_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: allure-history
הסבר שלב אחר שלב
אנו מריצים את ה-workflow על כל push או pull request לענף הראשי (main).
on:
push:
branches: [main]
pull_request:
branches: [main]
הוא מריץ את ה-build על מכונת אובונטו המסופקת על ידי GitHub, כאן נמצא המפרט עבור רצים המתארחים ב-GitHub. כמובן, קיימת גם אפשרות ליצור רצים מותאמים אישית. תהליך עבודה זה פשוט למדי ולכן השתמשתי ברץ מתארח.
runs-on: ubuntu-latest
כעת סדרה של שלבים בתהליך העבודה מבוצעים לפי הסדר:
- ביצוע checkout לקוד העדכני ביותר באמצעות הפעולה הבאה:
- uses: actions/checkout@v2
- פריסת רשת סלניום (selenium grid) חד-פעמית באמצעות Selenoid נעשית כדי לפשט את הרצת הדרייבר של סלניום (ChromeDriver) על הרץ, הרשת נסגרת עם סיום הריצה. הדבר נעשה באמצעות הפעולה הבאה:
- name: Starting Selenoid Server (aerokube/selenoid) within actions
uses: ajinx/selenoid@2.0
- התקנת פייתון באמצעות הפעולה הבאה:
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- התקנת התלויות של הפרויקט באמצעות pip בעזרת פקודת bash:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
התקנת תוסף Pytest שמוסיף הערות לכשלונות בדיקה ב-GitHub Actions באמצעות פקודת ה-bash הבאה:
- name: Install plugin
run: pip install pytest-github-actions-annotate-failures
- הרצת חבילת הבדיקות שלנו, אשר גם מגדירה את ספריית התוצאות של Allure, והרצה זו צריכה להתבצע על הרשת (grid) ולא באופן מקומי:
- name: Test with pytest
run: |
pytest --alluredir=allure-results --browser remote
- לאחר סיום הריצה, אנו יוצרים את דוח ה-Allure באמצעות הפעולה הבאה:
- name: Allure results
uses: simple-elf/allure-report-action@master
if: always()
id: allure-report
with:
allure_results: allure-results
allure_report: allure-report
gh_pages: gh-pages
allure_history: allure-history
- אנו פורסים את הדוח ל-GitHub Pages של הפרויקט באמצעות הפעולה הבאה:
- name: Deploy report to Github Pages
if: always()
uses: peaceiris/actions-gh-pages@v2
env:
PERSONAL_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PUBLISH_BRANCH: gh-pages
PUBLISH_DIR: allure-history
תוצאת הריצה מוצגת בסטטוס ה-PR כבדיקה (check), אנו יכולים לקבוע אם בדיקה זו נדרשת.
אנו יכולים לקבוע בהגדרות הפרויקט אם הבדיקה היא חובה עבור ה-push.
ניתן לצפות בהיסטוריית התוצאות של הריצה בלשונית ה-Actions.
ניתן למצוא את דוחות Allure בדפי ה-GitHub Pages של הפרויקט:
לסיכום
במאמר זה, סקרנו את יצירת תהליך אוטומציית CI/CD באמצעות GitHub Actions, פייתון ו-pytest.
קריאה נוספת על התכונות של GitHub Actions ניתן למצוא בקישור זה.
בדיקות מהנות!