פעולות GitHub: שחרור אוטומטי
(סעיף: טכנולוגיה ותשתיות)
תקציר
GitHub Actions הוא צינור מקומי כקוד במאגר. עבור iGaming, אלה הם שחרורים מהירים ומאובטחים של אחוריים, חזיתות, ETL/DBT ושירותי ML/LLM: מטריצות מבחן, מטמון תלות, בריכות אצן מבודדות, Rausable Workflows לסטנדרטים אחידים, OIDC במקום סודות ארוכים, חתימה ו-SBBOM M תגיות ו-GitOps-בליטות של מניפסטים. המפתח הוא תבניות ושערי איכות/אבטחה כדי לשמור על p99 ועלות תחת שליטה.
1) עקרונות אדריכליים
צינורות כקוד ('.github/workflows/.yml'), DRUSE by Reusable/Composite Actions.
בריכות ראנר (באנגלית: Runner Pools) הן בריכות המארחות (ubuntu-last) + מארחות את עצמן (K8s/VM, GPU עבור ML).
סביבות: dev/stage/prod' עם סוקרים נדרשים, פסקי זמן, וסודות סביבה.
מדיניות: ענפים מוגנים/תגיות, CODEOWNERS, בדיקות חובה.
תצפית: סיכומי עבודה, חפצים, כריתת עצים, מדדי משך.
2) תבנית בסיסית CI # CD (backend)
yaml name: ci-cd-backend on:
pull_request:
branches: [ main ]
push:
tags: [ "v" ]
permissions:
contents: read id-token: write # для OIDC packages: write
env:
IMAGE: ghcr. io/${{ github. repository }}/api:${{ github. sha }}
jobs:
lint_test:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5 with: { python-version: '3. 12' }
- name: Cache pip uses: actions/cache@v4 with:
path: ~/.cache/pip key: pip-${{ runner. os }}-${{ hashFiles('requirements. txt') }}
- run: pip install -r requirements. txt
- run: make lint && make test
- name: Build & push image (BuildKit)
uses: docker/build-push-action@v6 with:
push: ${{ github. event_name == 'push' }}
tags: ${{ env. IMAGE }}
cache-from: type=gha cache-to: type=gha,mode=max
security:
needs: [ lint_test ]
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: SCA/SAST/Secrets uses: your-org/security-composite@v3 # Composite Action вашей орг.
release_prod:
if: startsWith(github. ref, 'refs/tags/v')
needs: [ security ]
runs-on: ubuntu-latest environment: production steps:
- uses: actions/checkout@v4
- name: SBOM & Sign uses: your-org/sbom-sign-action@v2 with:
image: ${{ env. IMAGE }}
- name: GitOps bump manifests uses: your-org/gitops-bump@v2 with:
image: ${{ env. IMAGE }}
path: apps/api/values. yaml
רעיון: PR * מוך/יחידות * אבטחה * על ידי 'V' - SBOM/חתימה ו-GitOps-bump מניפסואים לפריסה.
3) שימוש חוזר: שמיש/מורכב
Reusable Workflows: תבניות צינור בודדות לכל השירותים (ב-refo '.github').
פעולות מורכבות: הדבקת צעדים חוזרים (מוך/יחידות/סריקות).
yaml jobs:
ci_template:
uses: your-org/ci-templates/.github/workflows/python. yml@v3 with:
python: '3. 12'
run-tests: true
4) מטריצות, מטמון וביצועים
סטראטגי. מטריקס למבחנים מקבילים (שפות/DB/OS).
מטמון: ”פעולות/מטמון” לתלות; Latective Kit 'cache-to: gha'; פרוקסי תלות.
תחרותיות: "מקורית: קבוצה: api - $ 'github. ביטול בהתקדמות, נכון, חוסך דקות.
חפצים: דוחות חנות/סיקור/פרופילים עם ”שימור ימים”.
yaml strategy:
matrix:
py: [ '3. 10', '3. 12' ]
db: [ 'mysql', 'postgres' ]
5) אישורים סביבתיים
הגדרות דרושות סוקרים עבור 'ייצור' (שער ידני).
סודות סביבה: פריסת אסימונים, מפתחות חתימה, כתובת של יציעים.
סביבת תצוגה מקדימה (תפוגה אוטומטית) לבקרת עלויות.
6) גישת OIDC לעננים (ללא סודות ארוכי ימים)
אפשר ”id-token: write”, הגדרת מדיניות אמון בענן ושימוש בנקודות זכות זמניות.
ישים עבור AWS/Azure/GCP/חפץ-רשם/מנהל סודי.
עיקרון החיסיון המועט ביותר: תפקידים אישיים על "dev/stage/prod'.
yaml
- name: Assume cloud role via OIDC uses: your-org/oidc-assume@v1 with:
role: arn:aws:iam::123:role/gha-deploy-prod
7) שחרור, תגיות וחפצים
שחרור באמצעות תגית: changelog, שחרור נכסים, פרסום תמונות/חבילות.
חסינות: ”קדימה בלבד” תגיות, חתימת מיכל/תרשים.
SBOM (CyclonDX/SPDX) + חתימה (cosign/sigstore) - שער לא חתום - אין פריסה.
8) משלוח מתקדם של GitOps
התקליטור אינו "from Actions', אלא באמצעות PR/להתחייב למניפסט רפו (Argo CD/Flux).
קנרית/כחול-ירוק: משקל/גרסה GitOps-bump steps; קידום אוטומטי על מדדי SLO.
yaml
- uses: mikefarah/yq@v4 with:
cmd: yq -i '.image = strenv(IMAGE)' apps/api/values. yaml
- run:
git config user. name "gha-bot"
git commit -am "bump api -> $IMAGE" && git push
9) צינור ואבטחת שרשרת אספקה
מי יכול לרוץ: רק מענפים מוגנים/תגיות, עם המחאות נדרשות.
סריקה: SAST/SCA/סריקה סודית, DAST על סביבות תצוגה מקדימה.
חתימות: תמונות, גיליונות הלם, בינארי; אימות במהלך התרוקנות.
פוליטיקאים: נשלחים רק מזרמי עבודה מהימנים; סיכת SHA לפעולות צד שלישי.
10) יכולת תצפית, SLO ו ־ ChatOps
דו "חות סיכום (Junit/כיסוי/סריקות), סטטוסים ביחסי ציבור.
מדדים: משך במה, הצלחה/כישלון, תור רץ.
ChatOps: הערות בוט ביחסי ציבור (קישורים ללוחות מחוונים, תצוגה מקדימה URL), פקודות '/קידום ', '/rollback' באמצעות 'workflow _ slock'.
11) FinOps (עלות דקות ומשאבים)
ביטול קונקורנסי ליחסי ציבור, מטריצה רק לחלקים משתנים (paths-filter).
היגיינה של חפצים: ”שימור ימים”, תצוגה מקדימה אוטומטית.
בריכות המארחות את עצמן לאסיפות כבדות/מל "ל, לילה" שעות שקטות ".
מטמון תלות ומטמון קיט GHA הם חיסכון משמעותי.
12) מונוראפוסים ותזמור הורה/ילד
מפעיל תיקייה/נתיב: זרימת עבודה עצמאית לרכיב.
ניתן להשתמש מחדש כשכבת סטנדרטיזציה בין קבוצות (תשלומים/סיכון/CRM/ETL/ML).
הפרדת סודות/סביבות על ידי רכיבים.
13) תבניות לאיימינג
A) backend/API (Go/Node/Python)
yaml name: backend on: [ pull_request, push ]
jobs:
ci:
uses: your-org/ci-templates/.github/workflows/backend. yml@v3 release:
if: startsWith(github. ref, 'refs/tags/v')
uses: your-org/ci-templates/.github/workflows/release. yml@v3 secrets: inherit
ETL/DBT
yaml name: etl-dbt on: [ pull_request ]
jobs:
dbt:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5 with: { python-version: '3. 11' }
- run: pip install dbt-core dbt-bigquery
- run: dbt deps && dbt run && dbt test
- name: Publish docs run: dbt docs generate && tar czf docs. tgz target/
load artifact, retention period 3 days uses: actions/upload-artifact @ v4 with: {name: dbt-docs, path: docs. tgz, retention-days: 3 }
B) ML/LLM (פריטי הסקה)
yaml name: ml-pack on:
push:
tags: [ "model-" ]
jobs:
build-engine:
runs-on: self-hosted-gpu steps:
- uses: actions/checkout@v4
- run: python export_onnx. py
- run: trtexec --onnx=model. onnx --saveEngine=model. plan
- uses: actions/upload-artifact@v4 with: { name: engine, path: model. plan, retention-days: 7 }
- name: Sign & SBOM uses: your-org/sbom-sign-action@v2 with: { file: model. plan }
14) רשימת מימושים
1. הגדר תבניות CI/CD (Reusable/Composite) והחיל אותן על כל התקליטורים.
2. כולל סביבות עם אישורים וסודות מפוצלים.
3. עבור ל-OIDC לעננים/מנהלים סודיים, הסר מפתחות עמידים.
4. הזן חתימת SAST/SCA/סודות/DAST, SBOM וחתימת חפץ; שערי פגיעות קריטיים.
5. הגדרות GitOps: מניפסט-repo, אוטומטי-בליטות תמונות/גרסאות, קנרית/כחול-ירוק.
6. לייעל מטמון/מטריצות, "במקביל. מבטל בהתקדמות, מפנה חפצים.
7. פריסת רצים המארחים את עצמם (כולל GPUs) עם גבולות ובידוד.
8. אפשר מסנן שבילים והגדרות כללים כדי להימנע מנהיגת דקירות נוספות.
9. הוסף שאטופים: סטטוסים/פקודות; דיווחים ביחסי ציבור.
10. תיקון מדיניות השימוש המאובטח בפעולות (pin SHA, להגביל חיצוני).
15) תרופות אנטי ־ פטריות
אותם צעדים בכל הפעולות המחודשות במקום Reusable/Composite = = מתוך סטנדרטים מסונכרנים.
סודות עננים ארוכי חיים במשתנים במקום במעקב.
היעדר סביבות/אישורים עבור
גרסאות לא דחוסות של צד שלישי פעולות # סיכוני שרשרת אספקה.
אין SBOM/חתימות = אין אימות על תקליטור.
מטריצות מסיביות שתמיד עולות.
תקליטור מפעולות ישירות לייצור ללא שינויים באיתור GitOps.
תקציר
GitHub Actions מאפשר לך לבנות צינור יחיד, מאובטח ומשוחזר של שחרורים: תקן צינורות באמצעות Reusable/Composite, השתמש ב-OIDC וסביבותיו עם אישורים, יישם את SBOM/חתימה, העביר תקליטור ל-GitOps עם משלוח פרוגרסיבי, ועלויות תחת שליטה באמצעות מטמון/מטריסה/תחרותית. גישה זו מאזנת את קצב המוצר של iGaming, שומרת על איכות ומפחיתה סיכונים תפעוליים.