מדריך שימוש ב GITHUB ACTIONS

מדריך שימוש ב GITHUB ACTIONS

הקדמה ל-GitHub Actions

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

איך להגדיר GitHub Actions?

כדי להתחיל להשתמש ב-GitHub Actions, תצטרכו ליצור ספריה בשם .github/workflows/ בתוך מאגר הקוד שלכם. בתוך ספריה זו, כל קובץ YAML שתיצרו מייצג תהליך (Pipeline) שיפעל כאשר מתבצעת פעולה מסוימת במאגר. GitHub Actions פועל לפי עקרונות של טריגרים (Triggers), שמאפשרים להגדיר מתי התהליך יפעל, וצעד אחר צעד (Steps) שמבצעים פעולות שונות בתהליך.

הקובץ הבסיסי ביותר יראה כך:

name: CI Pipeline

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - name: Install dependencies
      run: npm install
    - name: Run tests
      run: npm test

הקובץ הזה מגדיר Pipeline בסיסי לבניית פרויקט Node.js וביצוע בדיקות אוטומטיות. התהליך מתרחש בכל פעם שמתבצע Push למאגר. הוא כולל מספר שלבים: הורדת הקוד (Checkout), התקנת Node.js, התקנת התלויות (Dependencies) והרצת בדיקות.

הבנת המרכיבים של GitHub Actions

כדי להבין איך פועלת אוטומציה ב-GitHub Actions, חשוב להבין את המרכיבים השונים של תהליך (Pipeline) ואת הדרך שבה הם משתלבים יחד. כל תהליך בנוי ממספר חלקים:

Workflow

ה-Workflow הוא הקובץ שמגדיר את התהליך כולו. בתוך הקובץ הזה נמצאים כל הטריגרים, העבודות (Jobs) והצעדים (Steps) שמרכיבים את התהליך.

<h3 class="wp-block-heading">Trigger</h3>

הטריגר קובע מתי התהליך יופעל. לדוגמה, תוכלו להגדיר תהליך שיפעל בכל פעם שמתבצע Push למאגר, כאשר נפתח Pull Request, או אפילו באופן מתוזמן (Scheduled).

Job

Job הוא מקטע עבודה עצמאי שיכול לרוץ במקביל או ברצף, תלוי בהגדרות שלכם. כל Job יכול לרוץ על מכונה וירטואלית נפרדת עם מערכת הפעלה והגדרות משלה.

Step

Step הוא כל פעולה בודדת בתוך ה-Job. זה יכול להיות הרצת פקודה, התקנת תלויות, או אפילו שימוש בפעולה (Action) מוכנה מראש מה-Marketplace של GitHub.

יצירת Pipeline לבדיקות אוטומטיות עם GitHub Actions

בדיקות אוטומטיות הן חלק חיוני בכל פרויקט תוכנה. בעזרת GitHub Actions, ניתן להגדיר Pipeline שיבצע את כל הבדיקות הנדרשות באופן אוטומטי בכל פעם שמתבצע שינוי בקוד. נתחיל עם דוגמה פשוטה של בדיקת פרויקט JavaScript:

name: Test JavaScript Code

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - name: Install dependencies
      run: npm install
    - name: Run lint
      run: npm run lint
    - name: Run tests
      run: npm test

במקרה הזה, התהליך מבצע בדיקות קוד בעזרת Linter ובדיקות יחידה (Unit Tests) עם כל שינוי במאגר הקוד. זהו דוגמה לפייפליין בסיסי שניתן להרחיב לפי הצורך.

אוטומציה של פריסת יישומים עם GitHub Actions

אחת הפעולות הנפוצות ביותר ב-DevOps היא פריסת יישומים לסביבת הייצור. GitHub Actions מאפשרת לבצע פריסה אוטומטית לאחר כל שינוי בקוד או לאחר אישור Pull Request. נניח שאתם רוצים לפרוס יישום Node.js ל-Heroku. ניתן להגדיר Pipeline לפריסה בצורה הבאה:

name: Deploy to Heroku

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '14'
    - name: Install dependencies
      run: npm install
    - name: Build project
      run: npm run build
    - name: Deploy to Heroku
      env:
        HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
      run: git push https://heroku:$HEROKU_API_KEY@git.heroku.com/YOUR_APP_NAME.git main

ה-Pipeline הזה מאפשר לכם לפרוס את היישום שלכם ל-Heroku בכל פעם שמתבצע Push לענף הראשי (main). שימו לב שאנו משתמשים במשתנה Secret כדי לשמור על מפתח ה-API של Heroku בצורה מאובטחת. ניתן להוסיף משימות נוספות כמו בדיקות ואופטימיזציה של הקוד לפני הפריסה.

שימוש ב-Secrets ב-GitHub Actions

ניהול נתונים רגישים כמו מפתחות API וסיסמאות הוא חלק חשוב בכל פרויקט. GitHub מספקת אפשרות להגדיר Secrets שמאפשרת לשמור על נתונים רגישים בצורה מאובטחת ולהשתמש בהם בתהליכים אוטומטיים. נניח שיש לכם מפתח API שצריך לשמש בתהליך:

name: Use API Key

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: Check out repository
      uses: actions/checkout@v2
    - name: Use the API key
      run: curl -H "Authorization: Bearer ${{ secrets.API_KEY }}" https://api.example.com/data

בפייפליין הזה, אנו משתמשים במפתח API שמוגדר כ-Secret בתוך GitHub. השימוש ב-Secrets מונע חשיפה של נתונים רגישים בקוד הפומבי ומבטיח שהנתונים נשמרים בצורה מאובטחת.

שימוש ב-Matrix לבדיקת פרויקטים במספר סביבות

לפעמים נרצה לבדוק את הקוד שלנו במספר סביבות שונות, כמו גרסאות שונות של Node.js. GitHub Actions מאפשרת לנו לעשות זאת בעזרת שימוש ב-Matrix. להלן דוגמה לפייפליין שבודק את הפרויקט שלנו בשלוש גרסאות שונות של Node.js:

name: Test Matrix

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12, 14, 16]
    steps:
    - name: Check out repository
      uses: actions/checkout@v2
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - name: Install dependencies
      run: npm install
    - name: Run tests
      run: npm test

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

שליחת התראות לאחר סיום תהליך

לאחר סיום תהליך ב-GitHub Actions, ניתן לשלוח התראות למפתחים או לצוותים השונים. לדוגמה, ניתן להגדיר שליחת הודעה ל-Slack עם מצב הבדיקות או הפריסה:

name: Notify Slack

on: [push]

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
    - name: Send message to Slack
      uses: 8398a7/action-slack@v3
      with:
        status: ${{ job.status }}
        author_name: 'GitHub Actions'
        fields: repo,message,commit,author
      env:
        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

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

סיכום

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

אם אתם מעוניינים ללמוד בצורה מעמיקה יותר אתם מוזמנים להתייעץ איתנו על קורס DevOps.

שתפו את הפוסט

דילוג לתוכן