iGaming 프로젝트를위한 GitLab CI/CD
(섹션: 기술 및 인프라)
간략한 요약
GitLab CI/CD는 iGaming 응용 프로그램, 분석 및 ML 서비스를위한 전달 파이프 라인입니다. 저장소, 코드, 환경 및 보안 관리, 자체 컨테이너/패키지 레지스트리, Kubernetes 및 Terraform과의 통합, 취약성 및 라이센스 스캔이 결합되어 있습니다. 성공의 핵심은 동일한 파이프 라인 템플릿, 자동 스칼레가있는 임시 러너, 엄격한 권리 및 비밀 모델, GitOps 프로세스 및 비용 관리입니다.
1) 건축 및 역할
GitLab (SaaS 또는 Self-Managed): 그룹/프로젝트, 보호 지점/태그, 병합 요청 승인.
주자: Docker/Kubernetes/Virtual Machine 집행자. K8의 천체 난로는 중간 드리프트를 최소화합니다.
레지스터: 컨테이너/패키지/의존성 프록시-기본 이미지 및 종속성 캐시.
관찰 가능성: 작업 기록, 작업 아티팩트, 파이프 라인 통찰력, 모니터링으로의 내보내기 메트릭.
역할: 개발자 (MR), 관리자 (승인/릴리스), SecOps (스캔 정책), Platform/DevOps (러너, 템플릿, GitOps).
2) Fundamentals의 .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" ]
연습:
- 지점/MR/태그에 대한 '규칙'; DAG 병렬 처리에 대한 '필요'; JUnit/적용 범위에 대한 '아티팩트: 보고서'; 불필요한 파이프 라인을 실행하지 않도록 '워크 플로'.
3) 러너 및 자동 스케일
Kubernetes 집행자 (권장)
에페랄 포드, CPU/RAM 할당량, nodeSelector/tains, 비밀 격리.
캐시/아티팩트: 객체 저장; 종속성 프록시는 NPM/Maven/PyPI/Docker입니다.
도커 집행자
간단한 시작; DinD 또는 Kaniko/BuildKit을 사용하여 권한없이 빌드하십시오.
팁:- 로드 유형별 별도의 러너 풀 (빌드/테스트/보안/ML); 그룹/프로젝트 당 동시성 제한; 러너 태그 ('k8', '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" ]
릴리스/태그 파이프 라인: 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를 트리거하여 repo (GitOps) 를 나타냅니다.
9) GitOps! Terraform/IaC
저장소를 나타내는 MR을 통한 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
Terraform) 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로 릴리스하십시오.
외부 비밀: Secrets Manager/HashiCorp Vault (JWT/OIDC) 와의 통합, 작업 기간 동안 만 러너에 장착.
11) 파이프 라인 및 SLO 관찰 가능성
파이프 라인 DORA/KPI: 리드 타임, 배포 빈도, 변경 실패율, MTTR.
도구: 배상/타임 아웃, 비 차단 작업에 대한 '허용 _ 실패', 코드 적용 범위 보고서.
내보내기 지표: 단계 기간, 러너 대기열, 성공률; ChatOps의 경고.
12) FinOps: 비용과 성능
의존성 프록시 + 도커 종속성 및 계층 캐시.
동시성 제한이있는 분할 러너 풀 (prod/security/ML).
자동 일시 정지 검토 앱 및 비활성 환경; '아티팩트: 만료 _ in'.
큰 어셈블리 - 현장/조립식 수영장; 기본 이미지의 예열.
13) iGaming 사례 템플릿
백엔드/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. 배관을 정의하고 명령에 대한 패턴을 포함합니다 (린트/테스트/빌드/보안/배포).
2. 임시 K8의 러너를 배포하고, 종속성 프록시를 활성화하고, 아티팩트/캐시를위한 객체 저장을 가능하게합니다.
3. 규칙/요구/DAG, 행렬 및 동시성을 입력하십시오.
4. 정책별로 SAST/DAST/Secret/SBOM/라이센스 및 MR 승인 설정.
5. 환경/검토 앱, 자동 닫기 및 깔끔한 탭 구성.
6. GitOps 포함: 독립형 선언문 리포, MR- 범프 룩/차트.
7. 비밀 관리 (마스크/보호, Vault/OIDC), 보호 된 지점/태그를 제공합니다.
8. Terraform/IaC를 연결하고 "코드로 모니터링" 하십시오.
9. FinOps 관행 입력: 러너 제한, 캐시/프록시, 아티팩트 만료, 자동 일시 정지 스탠드.
10. 정규 게임 일: 러너 드롭, 캐시 채우기, 레지스트리 사용할 수 없음.
15) 안티 패턴
격리와 할당량이없는 "범용" 러너.
'규칙' 이없는 파이프 라인 ('항상' 실행), '필요' 없이 (천천히).
특권 DinD는 무제한 생산 러너를 기반으로합니다.
저장소/작업 로그에 비밀을 저장합니다.
보안 단계 및 MR 승인 부족.
(PHP 3 = 3.0.6, PHP 4)
보호 태그없이 prod로 수동 릴리스.
요약
GitLab CI/CD는 iGaming 팀에게 균일 한 템플릿, 자동 스케일 러너, 고품질 보안 게이트, 환경 및 점진적 배치, GitOps 및 Terraform 통합 등 빠르고 예측 가능한 릴리스를 제공합니다. 관찰 성과 FinOps를 추가하면 귀하의 앱, ETL 및 ML 서비스가 정기적으로, 안전하고 통제 된 비용으로 출시됩니다.