GitHub Actions

**CI/CD with Git and GitHub Actions** הוא פתרון אינטגרציה ופיתוח רציף (CI/CD) המבוסס על מערכת ניהול הגרסאות Git והפלטפורמה GitHub באמצעות כלי האוטומציה **GitHub Actions**.
הפתרון נועד לייעל את תהליכי פיתוח תוכנה על ידי אוטומציה של בנייה, בדיקה והפצה של קוד, ומהווה חלק מרכזי במתודולוגיית DevOps.

**Workflows** (זרימות עבודה) הם תהליכי אוטומציה המוגדרים באמצעות קובצי YAML, ויכולים לכלול שלבים (Steps) המריצים פעולות (Actions). **Actions** הן רכיבי קוד מוכנים מראש (או מותאמים אישית) המסוגלים לבצע משימות כמו התקנת ספריות, בדיקות או פריסת קוד. כך ניתן ליצור ולהריץ תהליכים מורכבים בקלות.

Git היא **מערכת לניהול גרסאות מבוזרת** (Distributed Version Control System) המאפשרת לצוותי פיתוח לעבוד במקביל על אותו פרויקט בלי ליצור התנגשויות בקוד. **GitHub** הוא שירות אחסון בענן לפרויקטי **Git**, המספק כלים לשיתוף פעולה ואוטומציה. CI/CD (**אינטגרציה ופיתוח רציף**) מתייחס לתהליך שבו שינויי קוד משולבים ונבדקים (CI), ולאחר מכן מופצים (CD) אוטומטית לגרסאות או לסביבות השונות.

## היסטוריה
המונחים CI (אינטגרציה רציפה) ו־CD (הפצה או פיתוח רציף) הופיעו בראשית שנות ה־2000 כחלק ממתודולוגיות Agile ו־DevOps.
באותה תקופה, כלים פופולריים דוגמת Jenkins, Travis CI ,CircleCI ו־GitLab CI כבר פעלו בתחום. בשנת 2019 השיקה GitHub את **GitHub Actions** – פלטפורמה מובנית ליצירת צינורות CI/CD מתוך מאגרי GitHub עצמם. הפלטפורמה זכתה במהרה לפופולריות בזכות האינטגרציה ההדוקה עם GitHub, התמיכה במגוון שפות תכנות והיכולת להתאים **Workflows** (זרימות עבודה) מורכבות באמצעות קובצי YAML.

## יתרונות
* **אינטגרציה הדוקה עם GitHub** – מאפשרת התממשקות מלאה עם Pull Requests, תגיות (Tags), ניהול גרסאות ועוד.
* **שוק פעולות עשיר (Marketplace)** – GitHub Marketplace כולל אלפי פעולות ("Actions") מוכנות מראש עבור פריסות בענן, בדיקות אבטחה, ניהול מכולות Docker ועוד.
* **קובצי YAML גמישים** – הגדרת תהליכים (Workflows) באמצעות YAML מאפשרת התאמה למגוון שפות ופרויקטים.
* **מעקב לוגים ודיווח** – בכל Workflow ניתן לצפות בתהליך הריצה ולקבל פירוט שגיאות, אזהרות וזמני ביצוע.

## שימושים נפוצים
* **אוטומציה של בדיקות** – הרצת בדיקות יחידה, אינטגרציה, עומס ואבטחה על מנת לזהות באגים טרם פריסה.
* **פריסת גרסאות** – הפצה אוטומטית של גרסאות לסביבות ענן כגון AWS, Azure או Google Cloud.
* **ניהול Secrets** – הגדרת סודות (Secrets) וסיסמאות בסביבה מוגנת, והזנתם אוטומטית לתהליך הבנייה והפריסה.
* **אינטגרציה עם שירותים משלימים** – שילוב עם כלים להתראות, ניתוח קוד סטטי (SAST), בדיקות איכות ופריסות Container.

## אתגרים וחסרונות
* **תלות בשירות חיצוני (Vendor Lock-in)** – הסתמכות מלאה על GitHub מצריכה זמינות ותמיכה, ועלולה להגביל ארגונים הדורשים סביבת ענן מקומית או רמת אבטחה ייעודית.
* **מגבלות בתוכנית החינמית** – על אף שפרויקטים ציבוריים נהנים מזמן ריצה חינמי, עבור פרויקטים פרטיים בהיקף גדול העלויות עשויות לגדול.
* **ניהול תצורה מורכב** – פרויקטים גדולים מחזיקים קובצי YAML ו־Workflows מרובים, ואף מסתמכים על פעולות וצד שלישי (Actions), מה שמחייב תחזוקה שוטפת.
* **סוגיות אבטחה** – יש צורך להקפיד על הגדרות נכונות של הרשאות ושמירת Secrets כדי למנוע דליפות מידע.

## דוגמה לקובץ YAML בסיסי

**YAML** הוא פורמט טקסט פשוט המבוסס על מרווחים (Indentation) והיררכיה, שמאפשר להגדיר הגדרות תצורה (Configuration) באופן קריא ומסודר.


```yaml
name: CI/CD Pipeline
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test
```


דוגמה זו מיועדת לפרויקט מבוסס Node.js, ומציגה **תהליך בדיקה אוטומטי** (npm test) בעת כל פעולת Push.
פעולת **Push** היא שליחת קוד מהעבודה המקומית אל מאגר (רפוזיטורי) ב־ **GitHub** לענף הראשי (בדרך כלל ענף ה־ **main** או **master**). ב־Git, *ענף*' (Branch) הוא גרסה נפרדת של הקוד המתפתחת במקביל, ו־'Pull Request' (**בקשת משיכה**) הוא תהליך שבו מגישים שינויים מתוך ענף אחד לבדיקה ואישור לפני מיזוג לענף המרכזי.
	
## ראו גם
* Git
* GitHub
* DevOps
* אינטגרציה רציפה
* הפצה רציפה

## לקריאה נוספת
* Shahin M., Babar M.A., Zhu L., "Continuous Integration, Delivery and Deployment," IEEE, 2017.
* מאמר בנושא CI/CD ב־arXiv
* מאמר על האבולוציה של CI/CD
* מאמר ב-IEEE לגבי תהליכי CI/CD
* מאמר ב־PLOS על פיתוח תוכנה רציף
* מחקר מ־ICSME 2022 על CI/CD בארגונים
* מאמר על הטמעת CI/CD בעסקים קטנים
* Eric Sink, "Version Control by Example," Pyrenean Gold Press, 2011.

## קישורים חיצוניים
* תיעוד רשמי – GitHub Actions
* מאמרים בנושא CI/CD באתר GitHub
* סקירה על יתרונות וחסרונות של GitHub Actions
* השוואה בין Jenkins ל-GitHub Actions
* אתגרי CI/CD ופתרונות באתר BrowserStack
* מה הם GitHub Actions וכיצד הם מושווים לכלי CI/CD נוספים
* סקירה על אתגרי CI/CD באתר aqua-cloud.io

## הערות שוליים

קטגוריה:פיתוח תוכנה
קטגוריה:תוכנה חופשית
קטגוריה:DevOps
קטגוריה:מערכות ניהול גרסאות