GH GambleHub

Gitlab CI/CD барои лоиҳаҳои IGaming

(Қисм: Технология ва инфрасохтор)

Хулосаи мухтасар

GIT Lab CI/CD як лӯлаи таҳвил барои барномаҳои IGaming, таҳлил ва хидматҳои ML мебошад. Он омезиш медиҳад: анбор, қубурҳо ҳамчун код, муҳити зист ва амният, феҳристи контейнер/бастаи худ, ҳамгироӣ бо Кубернетес ва Терраформ, инчунин осебпазирӣ ва сканкунии литсензия. Калиди муваффақият ҳамон қолабҳои қубурӣ, давандагони эфемералӣ бо автомати скал, модели ҳуқуқҳои қатъӣ ва асрори, равандҳои Gitops ва назорати хароҷот мебошанд.

1) Меъморӣ ва нақшҳо

Git-Lab (SAA ё Худидоракунанда): гурӯҳҳо/лоиҳаҳо, Филиалҳои ҳифзшаванда/барчаспҳо, Тасдиқи дархости Merge.
Давандагон: Иҷрокунандагони Docker/Kubernetes/Мошинҳои виртуалӣ. Оташдонҳои эфемерӣ дар K8s дрифти миёнаро кам мекунанд.
Регистрҳо: контейнер/бастаҳо/вобастагӣ Прокси - тасвирҳо ва вобастагии пойгоҳи кэш.
Мушоҳидаҳо: гузоришҳои корӣ, артефактҳои корӣ, фаҳмиши лӯлаҳо, ченакҳои содирот ба мониторинг.

Нақшҳо: таҳиягарон (MR), нигоҳдорандагон (тасдиқ/озод кардан), Sec

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" ]
Амалияҳо:
  • 'rules' барои филиалҳо/MR/барчаспҳо; 'needs' барои параллелизми DAG; 'artifacts: ҳисоботҳо' барои JU/nit/фарогирӣ; 'workflow' - ба тавре ки қубурҳои нолозимро истифода набаранд.

3) Давандагон ва миқёси худкор

Иҷрокунандаи Kubernetes (тавсия дода мешавад)

Пойгоҳҳои эфемералӣ, квотаҳои CPU/RAM, гиреҳи Selector/tains, ҷудокунии махфӣ.
Кэш/артефактҳо: нигоҳдории объект; прокси вобастагӣ dlya NPM/Maven/PyPI/Docker.

Иҷрокунандаи Docker

Оғози оддӣ; барои сохтани бидуни имтиёзҳо Din

Маслиҳатҳо:
  • Ҳавзҳои ҷудогонаи даванда аз рӯи намудҳои сарборӣ (Build/Test/Security/ML); маҳдудиятҳои мувофиқати як гурӯҳ/лоиҳа; барчаспҳои даванда ('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

Барои сарфаи трафик ва вақт, санҷишҳои тақсимшуда аз рӯи матритса, artifacts:expire_in гигиена аз прокси вобастагии ҷаҳонӣ истифода баред.

5) Бехатарӣ ва мувофиқат (Shift-Left)

Одатан "марҳилаи амният":
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" ]

Лӯлаи барориш/барчасп: нашри диаграмма/артефактҳои Helm, тавлиди қайдҳо, имзои тасвирҳо.

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

Лоиҳаи бисёрҷанба: Лоиҳаи "Релиз" CD-ро барои нишон додани репо (Git

9) Гитопс и Терраформ/И.А.С

Gitops тавассути MR барои нишон додани анбор

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

Terraform v CI

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) Асрҳо ва дастрасӣ

Тағирёбандаҳои CI: ниқоб/ҳифзшуда; аз рӯи муҳити зист/гурӯҳ ҷудо.
Шохаҳо/барчаспҳои муҳофизатшаванда: озод кардан дар prod - танҳо аз шохаҳои ҳифзшаванда ва бо тасдиқи дастӣ.
Асрори беруна: ҳамгироӣ бо Менеҷери Асрори/HashI Corp Vault (JWT/OIDC), ки ба давандагон танҳо дар тӯли кор меоянд.

11) Риояи қубур ва SLO

Қубури DORA/KPI: вақти сурб, басомади густариш, суръати тағирот, MTTR.
Воситаҳо: бозсозӣ/танаффус, 'иҷозат додан _ нокомӣ' барои вазифаҳои бастан, гузориши фарогирии код.
Нишондиҳандаҳои содирот: давомнокии марҳилаҳо, навбати даванда, таносуби муваффақият; ҳушдорҳо дар Chatops.

12) Финҳо: арзиш ва нишондиҳандаҳо

Вобастагии Proxy + Docker ва кэши қабати.
Ҳавзҳои тақсимкунандаи даванда (prod/security/ML) бо маҳдудиятҳои мувофиқат.
Барномаҳои баррасии худкори таваққуф ва муҳити ғайрифаъол; 'artifacts: ба охир расидани _ дар'.
Анҷумани калон - дар ҳавзҳои маҳал/префабрикӣ; пеш аз гарм кардани тасвирҳои асосӣ.

13) Қолибҳо барои парвандаҳои IGaming

Хидмати Backend/API

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' } ]

модели ETL/DBT

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 }

ML/LLM артефакт

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. Муайян кардани қубур ва намунаҳои муштарак барои фармонҳо (lint/test/build/security/deploy).
2. Ҷойгир кардани давандагони эфемералӣ, имкон додани прокси вобастагӣ, нигаҳдории ашё барои артефактҳо/кэш.
3. Қоидаҳо/эҳтиёҷот/DAG, матритсаҳо ва мувофиқатро ворид кунед.
4. Танзими SAST/DAST/Secret/SBOM/License ва MR-тасдиқҳо аз рӯи сиёсат.
5. Барномаҳои муҳит/бознигарӣ, URL-ҳои худкор ва тозаро ташкил кунед.
6. Дохил кардани Gitops: репо манифести мустақил, намуди зоҳирӣ/диаграммаҳои MR-bump.
7. Таъмини идоракунии махфӣ (ниқоб/ҳифзшуда, Vault/OIDC), филиалҳо/барчаспҳои ҳифзшуда.

8. Terraform/Ia

9. Амалияҳои FIN-ро ворид кунед: маҳдудиятҳои даванда, кэш/прокси, мӯҳлати артефактҳо, стендҳои худкори таваққуф.
10. Рӯзҳои муқаррарии бозӣ: тарки даванда, пур кардани кэш, дастрас набудани сабти ном.

15) Антипаттернҳо

Як давандаи "универсалӣ" бидуни ҷудо ва квота.
Қубурҳои бидуни 'қоидаҳо' (давидан 'ҳамеша'), бидуни 'ниёз' (оҳиста).
DIN-и имтиёзнок дар давандагони номаҳдуди истеҳсолот бунёд мекунад.
Нигоҳ доштани асрори анбор/дафтарҳои корӣ.
Набудани марҳилаи амниятӣ ва тасдиқи MR.
Барномаҳои баррасии беохир бидуни 'on _ stop' ва 'endire _ in'.
Нашри дастӣ дар prod бе барчаспҳои ҳифзшаванда.

Хулоса

Git ​ ​ Lab CI/CD ба дастаҳои IGaming релизҳои зуд ва пешгӯишавандаро медиҳад: қолабҳои ягона, давандагони худкор, дарвозаҳои баландсифати амниятӣ, муҳитҳо ва деплоҳои прогрессивӣ, ҳамгироии Gitops ва Terraform. Илова кардани мушоҳидаҳо ва FIN - ва барномаҳои шумо, ETL ва ML мунтазам, боэътимод ва бо нархи назоратшаванда бароварда мешаванд.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.