IGaming परियोजनाओं के लिए GitLab CI/CD
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
GitLab CI/CD iGaming एप्लिकेशन, एनालिटिक्स और ML सेवाओं के लिए एक डिलीवरी पाइपलाइन है। यह जोड़ ती है: भंडार, कोड, पर्यावरण और सुरक्षा प्रबंधन के रूप में पाइपलाइन, अपने स्वयं के कंटेनर/पैकेज रजिस्ट्री, कुबर्नेट्स और टेराफॉर्म के साथ एकीकरण, साथ ही भेद्यता और लाइसेंस स्कैनिंग। सफलता की कुंजी एक ही पाइपलाइन टेम्पलेट, ऑटो-स्केल के साथ पंचांग धावक, एक सख्त अधिकार और रहस्य मॉडल, GitOps प्रक्रियाओं और लागत नियंत्रण है।
1) वास्तुकला और भूमिकाएँ
GitLab (SaaS या स्व-प्रबंधित): समूह/परियोजनाएं, संरक्षित शाखाएँ/टैग, विलय अनुरोध अनुमोदन।
धावक: Docker/Kubernetes/वर्चुअल मशीन निष्पादक। K8s में अल्पकालिक चूल्हा मध्यम बहाव को कम करता है।
रजिस्टर: कंटेनर/पैकेज/डिपेंडेंसी प्रॉक्सी - कैश बेस इमेज और डिपेंडेंसी।
अवलोकन: नौकरी लॉग, नौकरी कलाकृतियां, पाइपलाइन अंतर्दृष्टि, निगरानी के लिए निर्यात मेट्रिक्स।
भूमिकाएँ: डेवलपर्स (MR), मेंटेनर्स (अनुमोदन/रिलीज़), SecOps (स्कैनिंग नीतियां), प्लेटफ़ॉर्म/DevOps (धावक, टेम्पलेट, GitOps)।
2) फंडामेंटल्स .gitlab-ci। yml ': चरण, नियम, बाधाएं
yaml stages: [lint, test, build, security, package, deploy]
variables:
DOCKER_DRIVER: overlay2
IMAGE: "$CI_REGISTRY_IMAGE/app:$CI_COMMIT_SHA"
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
.default:
image: alpine:3. 20 before_script: [ 'apk add --no-cache bash curl jq' ]
lint:
stage: lint script: [ "make lint" ]
rules: [ { if: '$CI_PIPELINE_SOURCE == "merge_request_event"' } ]
unit:
stage: test script: [ "make test" ]
artifacts:
when: always reports: { junit: "reports/junit. xml" }
needs: [ "lint" ]
build_image:
stage: build image: docker:27 services: [ 'docker:27-dind' ]
variables: { DOCKER_TLS_CERTDIR: "" }
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE.
- docker push $IMAGE cache:
key: "docker-${CI_COMMIT_REF_SLUG}"
paths: [ "/var/lib/docker" ]
policy: pull-push needs: [ "unit" ]
अभ्यास:
- शाखाओं/एमआर/टैग के लिए 'रूल्स'; डीएजी समानता के लिए 'नेड्स'; JUnit/कवरेज के लिए 'कलाकृतियां: रिपोर्ट'; 'वर्कफ्लो' - ताकि अनावश्यक पाइपलाइनें न चलाएं।
3) धावक और ऑटो-स्केल
Kubernetes निष्पादक (अनुशंसित)
पंचांग फली, सीपीयू/रैम कोटा, nodeSelector/tains, गुप्त अलगाव।
कैश/कलाकृतियाँ: वस्तु भंडारण; निर्भरता प्रॉक्सी для एनपीएम/मावेन/पीवाईपीआई/डॉकर।
डॉक्टर निष्पादक
सरल शुरुआत; बिना विशेषाधिकार के निर्माण के लिए DinD या Kaniko/BrainKit का उपयोग करें।
युक्तियाँ:- लोड प्रकारों द्वारा अलग धावक पूल (बिल्ड/टेस्ट/सिक्योरिटी/एमएल); प्रति समूह/परियोजना की संगामिति सीमा; रनर टैग ('k8s', 'gpu', 'सुरक्षा')।
4) कैश, कलाकृतियां और मैट्रिसेस
yaml cache:
key: "pip-${CI_COMMIT_REF_SLUG}"
paths: [ "venv/", ".cache/pip/" ]
policy: pull-push
test:py:
stage: test parallel:
matrix:
- PY: ["3. 10", "3. 12"]
image: python:${PY}
script:
- python -m venv venv &&. venv/bin/activate
- pip install -r requirements. txt
- pytest -q
यातायात और समय को बचाने के लिए वैश्विक निर्भरता प्रॉक्सी का उपयोग करें, मैट्रिक्स द्वारा विभाजन-परीक्षण, स्वच्छता के लिए।
5) सुरक्षा और अनुपालन (शिफ्ट-लेफ्ट)
विशिष्ट "सुरक्षा-चरण":yaml sast:
stage: security image: registry. gitlab. com/security-products/sast:latest script: [ "analyzer run" ]
artifacts: { reports: { sast: "gl-sast-report. json" } }
rules: [ { if: '$CI_PIPELINE_SOURCE == "merge_request_event"' } ]
secret_detection:
stage: security image: registry. gitlab. com/security-products/secret-detection:latest script: [ "analyzer run" ]
artifacts: { reports: { secret_detection: "gl-secret-report. json" } }
sbom:
stage: security image: alpine:3. 20 script:
- apk add syft cosign
- syft $IMAGE -o cyclonedx-json > sbom. json
- cosign sign --key $COSIGN_KEY $IMAGE artifacts:
reports: { cyclonedx: "sbom. json" }
इसके अलावा: स्टैंड, डिपेंडेंसी/लाइसेंस अनुपालन के लिए DAST, महत्वपूर्ण निष्कर्षों के लिए अनिवार्य MR-अनुमोदन, मास्किंग चर।
6) वातावरण, समीक्षा एप्लिकेशन और रिलीज़
yaml review:
stage: deploy image: bitnami/kubectl environment:
name: review/$CI_COMMIT_REF_SLUG url: https://$CI_COMMIT_REF_SLUG. apps. example. com on_stop: stop_review script:
-./deploy. sh --env=review --image=$IMAGE rules: [ { if: '$CI_PIPELINE_SOURCE == "merge_request_event"' } ]
stop_review:
stage: deploy when: manual environment:
name: review/$CI_COMMIT_REF_SLUG action: stop script: [ "./deploy. sh --env=review --delete" ]
रिलीज ़/टैग पाइपलाइन: हेल्म चार्ट/कलाकृतियों को प्रकाशित करना, रिलीज़ नोट्स बनाना, छवियों पर हस्ताक्षर करना।
7) प्रगतिशील वितरण: कैनरी/नीला-हरा
yaml deploy_canary:
stage: deploy script: [ "./helm_upgrade. sh --set canary. weight=10 --image=$IMAGE" ]
environment: { name: production }
rules: [ { if: '$CI_COMMIT_TAG' } ]
promote_100:
stage: deploy when: manual script: [ "./helm_upgrade. sh --set canary. weight=100" ]
needs: [ "deploy_canary" ]
गुणवत्ता गेट जोड़ें: SLO विलंबता/त्रुटि-दर की निगरानी से → रिज़ॉल्यूशन/रोलबैक।
8) माता-पिता/बच्चे और बहु-परियोजना पाइपलाइन
माता-पिता/बच्चा: बड़े मोनोरेपोस में तेजी लाएं (प्रत्येक घटक एक बाल पाइपलाइन है)।
yaml trigger_components:
stage: build trigger:
include: [ "ci/component-a. yml", "ci/component-b. yml" ]
strategy: depend
मल्टी-प्रोजेक्ट: "रिलीज़" परियोजना सीडी को रेपो (GitOps) घोषित करने के लिए ट्रिगर करती है।
9) GitOps и Terraform/IaC
रिपॉजिटरी प्रकट करने के लिए एमआर के माध्यम से GitOps
yaml gitops_bump:
stage: deploy image: alpine/git script:
- git clone $MANIFESTS_REPO manifests
- yq -i '.image = env(IMAGE)' manifests/apps/app/values. yaml
- cd manifests && git commit -am "bump $CI_COMMIT_SHA" && git push origin HEAD:$TARGET_BRANCH
टेराफॉर्म в सीआई
yaml terraform:
stage: deploy image: hashicorp/terraform:1. 9 script:
- terraform init -backend-config="bucket=$TF_BUCKET"
- terraform plan -out tfplan
- terraform apply -auto-approve tfplan rules: [ { if: '$CI_COMMIT_BRANCH == "infra"'} ]
10) रहस्य और पहुँच
सीआई चर: नकाबपोश/संरक्षित; पर्यावरण/समूह द्वारा अलग।
संरक्षित शाखाएं/टैग: प्रोड में जारी - केवल संरक्षित शाखाओं से और मैनुअल पुष्टि के साथ।
बाहरी रहस्य: सीक्रेट मैनेजर/HashiCorp वॉल्ट (JWT/OIDC) के साथ एकीकरण, केवल नौकरी की अवधि के लिए धावकों पर बढ़ ते हुए।
11) पाइपलाइन और एसएलओ अवलोकन
पाइपलाइन DORA/KPI: लीड टाइम, प्लानिंग फ्रीक्वेंसी, फेल रेट, MTTR।
उपकरण: नॉन-ब्लॉकिंग कार्यों, कोड कवरेज रिपोर्ट के लिए रिट्रेज ़/टाइमआउट, 'अनुमति _ विफलता'।
निर्यात मैट्रिक्स: चरणों की अवधि, धावक कतार, सफलता अनुपात; ChatOps में अलर्ट।
12) FinOps: लागत और प्रदर्शन
निर्भरता प्रॉक्सी + डॉकर निर्भरता और परत कैश।
विभाजन धावक पूल (prod/security/ML) संगामिति सीमा के साथ।
ऑटो-ठहराव समीक्षा एप्लिकेशन और निष्क्रिय वातावरण; 'कलाकृतियाँ: समाप्त करें _ in'।
बड़ी विधानसभाएँ - स्पॉट/पूर्वनिर्मित पूल पर; बुनियादी छवियों का पूर्व-हीटिंग।
13) iGaming मामलों के लिए साँचा
बैकेंड/एपीआई सेवा
yaml include: [ "ci/includes/security. yml", "ci/includes/docker. yml" ]
deploy_prod:
stage: deploy environment: { name: production, url: https://api. example. com }
script: [ "./helm_upgrade. sh --env=prod --image=$IMAGE" ]
rules: [ { if: '$CI_COMMIT_TAG' } ]
ईटीएल/डीबीटी मॉडल
yaml dbt_run:
stage: build image: ghcr. io/dbt-labs/dbt-snowflake:latest script: [ "dbt deps", "dbt run --profiles-dir. ", "dbt test" ]
artifacts: { paths: [ "target/" ], expire_in: 3 days }
एमएल/एलएलएम कलाकृतियाँ
yaml ml_pack:
stage: package image: nvidia/cuda:12. 1. 0-runtime-ubuntu22. 04 tags: [ "gpu" ]
script:
- python export_onnx. py
- trtexec --onnx=model. onnx --saveEngine=model. plan artifacts: { paths: [ "model. plan", "model. onnx" ] }
14) कार्यान्वयन चेकलिस्ट
1. पाइपिंग को परिभाषित करें और साझा कमांड के लिए पैटर्न शामिल करें (लिंट/परीक्षण/बिल्ड/सुरक्षा/तैनाती)।
2. पंचांग - धावक तैनात करें, निर्भरता प्रॉक्सी सक्षम करें, कलाकृतियों/कैश के लिए वस्तु भंडारण।
3. नियम/आवश्यकताएं/DAG, मैट्रिसेस और संगति दर्ज करें।
4. नीति द्वारा SAST/DAST/सीक्रेट/SBOM/लाइसेंस और MR-अनुमोदन कॉन्फ़िगर करें।
5. वातावरण/समीक्षा एप्लिकेशन, ऑटो-क्लोज और साफ यूआरएल का आयोजन करें।
6. GitOps शामिल करें: स्टैंडअलोन घोषणापत्र रेपो, MR-bump दिखता है/चार्ट।
7. गुप्त प्रबंधन (नकाबपोश/संरक्षित, तिजोरी/OIDC), संरक्षित शाखाएँ/टैग प्रदान करें।
8. Terraform/IaC और "कोड के रूप में मॉनिटर करें"।
9. FinOps अभ्यास दर्ज करें: धावक सीमा, कैश/प्रॉक्सी, कलाकृतियों की समाप्ति, ऑटो-ठहराव स्टैंड।
10. नियमित खेल-दिन: धावक ड्रॉप, कैश फिल, रजिस्ट्री अनुपलब्धता।
15) एंटीपैटर्न
अलगाव और कोटा के बिना एक "सार्वभौमिक" धावक।
'नियम' ('हमेशा' चलाएं) के बिना पाइपलाइनें, 'जरूरत' (धीरे-धीरे)।
विशेषाधिकार प्राप्त DinD असीमित उत्पादन धावकों में बनाता है।
भंडार/कार्य लॉग में रहस्यों का भंडारण।
सुरक्षा चरण और एमआर-अनुमोदन की कमी।
'ऑन _ स्टॉप' और 'एक्सपायर _ इन' के बिना अनंत समीक्षा एप्लिकेशन.
संरक्षित टैग के बिना प्रोड में मैनुअल रिलीज।
सारांश
GitLab CI/CD iGaming टीमों को तेज और पूर्वानुमानित रिलीज देता है: समान टेम्पलेट, ऑटो-स्केल धावक, उच्च गुणवत्ता वाले सुरक्षा द्वार, वातावरण और प्रगतिशील deploes, Gitops और Terraform एकीकरण। अवलोकन और FinOps जोड़ें - और आपके ऐप, ETL और ML सेवाएं नियमित रूप से, सुरक्षित और नियंत्रित लागत पर जारी की जाएंगी।