הקדמה ל-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.