הגדרת בניות מטריקס עבור צינורות CI/CD

כשפרויקט חייב לרוץ על גרסאות ופלטפורמות שונות, הגדרת pipeline ידנית הופכת לשכפול קוד ולהמתנה ארוכה לתוצאות. אנו מגדירים matrix builds ב-CI/CD כדי לבדוק את כל השילובים של גרסאות ומערכות הפעלה במקביל. הצוות שלנו מספק פתרון turnkey—מההגדרה ועד התמיכה—המבטיח פעילות יציבה ומשוב מהיר למפתחים.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אנחנו צוות של מהנדסי DevOps עם ניסיון של 5+ שנים ב-CI/CD. הגדרת builds מטריציוניים היא משימה שכל DevOps נתקל בה כשמתחזקים פרויקטים מרובי-פלטפורמות. דמיינו שאתם מפתחים ספריית Python שחייבת לעבוד עם גרסאות 3.9, 3.10, 3.11, 3.12 על Ubuntu, Windows ו-macOS. ללא מטריצה, אתם כותבים 12 jobs זהים או מריצים אותם ברצף — ה-pipeline שלכם מתנפח ל-60+ דקות. עם matrix builds, קובץ YAML אחד מייצר 12 jobs מקבילים, ודוח תאימות מלא מוכן תוך 5–7 דקות. הבדל הביצועים: matrix builds מהירים פי 4 מריצות רצפות. עבור צוות של 10 מפתחים, זה חוסך $2000 בחודש בעלויות CI ומבטל 10 שעות המתנה ביום.

בעיות שאנחנו פותרים

  • כפילות קוד: ארבעה jobs זהים עם גרסאות שונות — מקור לשגיאות ועומס תחזוקה.
  • Pipelines ארוכים: ריצות רצפות מכפילות את זמן ההמתנה של המפתחים.
  • אובדן הקשר: כשבדיקה אחת נכשלת, כל השאר נעצרים, ומסתירים את התמונה המלאה.

Matrix builds פותרים את כל השלוש בצורה דקלרטיבית.

איך להגדיר matrix build ב-GitHub Actions

---
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.9", "3.10", "3.11", "3.12"]
        os: [ubuntu-latest, windows-latest]
      fail-fast: false
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
      - run: pip install -e ".[test]" && pytest
---

jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12"] os: [ubuntu-latest, windows-latest] fail-fast: false steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - run: pip install -e ".[test]" && pytest הוא קריטי. כברירת מחדל, GitHub Actions עוצר את כל ה-matrix jobs בכשלון הראשון. לבדיקת תאימות, אתם צריכים לראות את כל התוצאות. זה נותן 8 jobs מקבילים.

הכללות והחרגות במטריצה

לא כל השילובים הגיוניים. Python 3.9 על Windows עשוי להיות לא נתמך:

---
strategy:
  matrix:
    python-version: ["3.9", "3.10", "3.11", "3.12"]
    os: [ubuntu-latest, windows-latest]
    exclude:
      - python-version: "3.9"
        os: windows-latest
    include:
      - python-version: "3.12"
        os: ubuntu-latest
        experimental: true

fail-fast: false מוסיף משתנים נוספים לשילובים ספציפיים. כאן strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12"] os: [ubuntu-latest, windows-latest] exclude: - python-version: "3.9" os: windows-latest include: - python-version: "3.12" os: ubuntu-latest experimental: true מאפשר include.

GitLab CI: parallel:matrix

ב-GitLab, השתמשו ב-experimental: true:

---
test:
  image: python:${PYTHON_VERSION}
  parallel:
    matrix:
      - PYTHON_VERSION: ["3.9", "3.10", "3.11", "3.12"]
        DATABASE: ["postgresql", "sqlite"]
  script:
    - pip install -e ".[test]"
    - pytest --database $DATABASE
---

GitLab יוצר 8 jobs כמו continue-on-error: ${{ matrix.experimental }}. עבור Docker מרובה-ארכיטקטורות:

---
build:
  parallel:
    matrix:
      - ARCH: [amd64, arm64]
        PLATFORM: [linux/amd64, linux/arm64]
        script:
          - docker buildx build --platform $PLATFORM -t myapp:${CI_COMMIT_SHORT_SHA}-${ARCH} --push .

לאחר מכן צרו manifest מרובה-ארכיטקטורות.

בחירת fail-fast ו-continue-on-error

parallel:matrix מבטיח תמונה מלאה של תאימות. בלעדיו, הכשלון הראשון מבטל את כל ה-jobs. הגדרת test: image: python:${PYTHON_VERSION} parallel: matrix: - PYTHON_VERSION: ["3.9", "3.10", "3.11", "3.12"] DATABASE: ["postgresql", "sqlite"] script: - pip install -e ".[test]" - pytest --database $DATABASE לשילובים ניסיוניים מאפשרת לבדוק גרסאות לא יציבות מבלי לחסום את ה-pipeline.

השוואה: מטריצה מול רצף

מאפיין רצף מטריצה (מקביל)
זמן ביצוע ל-4 גרסאות (5 דקות כל אחת) 20 דקות 5 דקות
כפילות קוד 4 עותקים Job אחד עם מטריצה
נראות בדיקה אחת בכל פעם הכל בו-זמנית
סיכון לעצירה בכשלון הראשון נשלט דרך fail-fast

עבור 10–20 PRs ביום, מפתחים ממתינים דקות במקום חצי שעה. Matrix builds מהירים פי 4.

השוואה בין מערכות CI

מערכת CI תחביר תכונות
GitHub Actions test: [3.9, postgresql] include/exclude, fail-fast, continue-on-error
GitLab CI test: [3.9, sqlite] variables, include/exclude, parallel
Jenkins Matrix Project Plugin, הגדרת צירים

מתי נדרשים matrix builds?

  • ספריות מרובות-ריצות (Python 3.9–3.12, PHP 7.4–8.2).
  • אפליקציות חוצות-פלטפורמות (Node.js על Linux, Windows, macOS).
  • Docker מרובה-ארכיטקטורות (amd64, arm64 עבור Raspberry Pi ושרתי ARM).

Matrix builds מקצרים את זמן הבדיקות פי 4 בהשוואה לריצות רצפות. זה קריטי במהלך פיתוח פעיל, וחוסך $2000/חודש בעלויות CI עבור צוות של 10 מפתחים.

תהליך העבודה

  1. ניתוח: זיהוי גרסאות, ארכיטקטורות, מערכות הפעלה.
  2. עיצוב: בחירת מערכת CI, עיצוב מטריצה עם החרגות ושילובים ניסיוניים.
  3. יישום: כתיבת קונפיגורציה, הגדרת caching, runners מקבילים.
  4. בדיקה: הרצת מטריצה מלאה, אימות התנהגות.
  5. פריסה: שילוב ב-CI/CD, תיעוד.

מה כלול

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

למהנדסים שלנו יש ניסיון של 5+ שנים ב-CI/CD, עם למעלה מ-50 פרויקטים המשתמשים ב-matrix builds. אנחנו מבטיחים ללא כפילות קוד והפחתה של פי 2–4 בזמן הבדיקות.

לוחות זמנים ותמחור

הוספת אסטרטגיית מטריצה ל-job קיים: משעה אחת. הגדרה מלאה עם exclude, ניסיוני ו-build: parallel: matrix: - ARCH: [amd64, arm64] PLATFORM: [linux/amd64, linux/arm64] script: - docker buildx build --platform $PLATFORM -t myapp:${CI_COMMIT_SHORT_SHA}-${ARCH} --push . נכון: חצי יום. Monorepo עם מספר שפות: עד 2–3 ימים. התמחור מחושב באופן אישי. צרו קשר לייעוץ — נגדיר matrix builds לפרויקט שלכם. הזמינו הגדרת CI/CD וקבלו ביצוע בדיקות מקביל ללא כפילות קוד.