GH GambleHub

CI/CD конвейерлері: GitHub Actions, GitLab CI

CI/CD конвейерлері: GitHub Actions, GitLab CI

1) CI/CD міндеті және платформадағы орын

CI/CD - бұл үздіксіз жинау, тестілеу және репозиторийден жұмыс ортасына өзгерістер жеткізу. Мақсаттары:
  • Релиздердің жылдамдығы мен болжамдылығы (қысқа lead time).
  • Сапасы (автотесттер, статикалық/динамикалық талдау).
  • Жеткізу тізбегінің қауіпсіздігі (артефактілердің қолы, қолжетімділікті бақылау).
  • Сенімділік (канареялық деплойлар, тез қайту).
  • Бақылау (әрбір кезеңдегі трассалау және метрика).

Түйінді қағидаттар: «pipeline as code», иммутабельді артефактілер, «build once - run many», «shift-left security», «least privilege», детерминирленген құрастырмалар.

2) Конвейерлердің сәулеттік паттерндері

Stage-gate: build → test → security → package → deploy → post-deploy checks.
Fan-out/Fan-in: нәтижелерді біріктіре отырып, параллельді матрицалық құрастырулар (тілдер/платформалар).
Promotion: бір ғана артефакт қоршау арқылы жылжиды (dev → stage → prod), қайта жинақталмайды.
Trunk-based + қысқа тармақтар: дрейфті азайту, PR/MR автоматтандырылған тексерулер.
Reusable: қайта пайдаланылатын workflow/үлгілер (Actions: reusable workflows; GitLab: includes/child-pipelines).
GitOps (қосымша): «құрастыру» және «жеткізу» (Argo CD/Flux айналаның декларативті репосын бақылайды).

3) Жеткізу тізбегінің қауіпсіздігі (supply chain)

Сәйкестендіру: OIDC-федерациясы runner 'a-дан бұлтқа (ұзақ өмір сүретін кілтсіз).
Құпиялар: орталықтандырылған сақтау орны, контексті шектеу, логиге шығаруға тыйым салу.
Артефактілердің/контейнерлердің қолтаңбасы (cosign/Sigstore), admission-бақылаудағы қолтаңбаны тексеру.
SBOM (CycloneDX/SPDX) және SCA, SAST/DAST/Container Scan - «міндетті қақпалар».
Саясат: IaC/манифесттер үшін OPA/Conftest, «no latest», артықшылықты контейнерлерге тыйым салу.
Runner 'дерді оқшаулау: жеке желідегі prod-раннерлер, шығатын қолжетімділікті көпшілік интернеттен бөліп алу.

4) GitHub Actions - құрылымы және практикасы

4. 1 workflows құрылымы

`.github/workflows/.yml` — триггеры (`on: push, pull_request, schedule, workflow_call`).
Стандарттауға арналған Reusable workflows (линтер, SCA, контейнерлік құрастыру, деплой).

4. 2 Мысал: OIDC және сурет қолтаңбасы бар көп сатылы пайплайн

yaml name: ci-cd

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

permissions:
id-token: write  # для OIDC contents: read packages: write

jobs:
build_test_matrix:
runs-on: ubuntu-latest strategy:
matrix:
node: [18, 20]
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4 with: { node-version: ${{ matrix. node }} }
- name: Cache npm uses: actions/cache@v4 with:
path: ~/.npm key: npm-${{ runner. os }}-${{ matrix. node }}-${{ hashFiles('/package-lock. json') }}
- run: npm ci
- run: npm run lint && npm test -- --ci

docker_build_sign:
runs-on: ubuntu-latest needs: build_test_matrix steps:
- uses: actions/checkout@v4
- name: Login to GHCR uses: docker/login-action@v3 with:
registry: ghcr. io username: ${{ github. actor }}
password: ${{ secrets. GITHUB_TOKEN }}
- name: Build image run:
docker build --pull --no-cache -t ghcr. io/org/app:${{ github. sha }}.
docker push ghcr. io/org/app:${{ github. sha }}
- name: Generate SBOM uses: anchore/syft-action@v0 with:
image: ghcr. io/org/app:${{ github. sha }}
format: cyclonedx-json output-file: sbom. json
- name: Cosign sign (OIDC)
uses: sigstore/cosign-installer@v3
- name: Sign image run:
cosign sign ghcr. io/org/app:${{ github. sha }} \
--yes \
--identity-token $ACTIONS_ID_TOKEN_REQUEST_TOKEN \
--rekor-url https://rekor. sigstore. dev

deploy_stage:
runs-on: ubuntu-latest needs: docker_build_sign environment:
name: stage url: https://stage. example. com steps:
- uses: actions/checkout@v4
- name: Assume cloud role via OIDC uses: aws-actions/configure-aws-credentials@v4 with:
role-to-assume: arn:aws:iam::123456789012:role/github-deployer aws-region: eu-central-1
- name: Helm deploy (canary 10%)
run:
helm upgrade --install app charts/app \
--set image. tag=${{ github. sha }} \
--set canary. enabled=true --set canary. traffic=10
- name: Smoke checks run:./scripts/smoke. sh

promote_prod:
runs-on: ubuntu-latest needs: deploy_stage environment:
name: production url: https://app. example. com concurrency: prod-release steps:
- name: Manual approval gate run: echo "Requires environment approvers in repo settings"
- name: Promote canary → 100% (blue-green)
run:
helm upgrade --install app charts/app \
--set image. tag=${{ github. sha }} \
--set canary. enabled=false
- name: Post-deploy checks & rollback on SLO breach run:./scripts/verify_or_rollback. sh
Кілттер:
  • 'permissions' ең төменге келтірілген, 'id-token: write' OIDC үшін қосылған.
  • Environments approvers және URL, 'concurrency' жарыстардан қорғайды.
  • Трафикті канареялық қосу және SLO бойынша автоматты қайтару.

4. 3 Reusable workflow (шақыру мысалы)

yaml jobs:
security_suite:
uses: org/.github/.github/workflows/security. yml@v1 with:
severity_threshold: high

5) GitLab CI - құрылымы және практикасы

5. 1 Базалық құрылым

`.gitlab-ci. yml 'түбірімен; негізгі мәні: 'stages', 'jobs', 'rules', 'needs', 'artifacts', 'environments', 'manual'.
Reuse: 'include:' (жергілікті/remote үлгілері), күрделі монорепо үшін child/parent pipelines.

5. 2 Мысал: матрица, кэш, қолтаңба, қоршаған орта және approvals

yaml stages: [lint, test, build, security, deploy]

variables:
DOCKER_TLS_CERTDIR: "" # docker: dind acceleration
IMAGE_TAG: $CI_COMMIT_SHA

lint:
stage: lint image: node:20 script:
- npm ci
- npm run lint cache:
key: "npm-${CI_COMMIT_REF_SLUG}"
paths: [node_modules/]
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"

test:
stage: test image: node:20 parallel:
matrix:
- NODE_VERSION: ["18", "20"]
script:
- nvm install $NODE_VERSION          true
- npm ci
- npm test -- --ci artifacts:
when: always reports:
junit: report. xml

build_image:
stage: build image: docker:26. 1 services: [ "docker:26. 1-dind" ]
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$IMAGE_TAG.
- docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG artifacts:
expire_in: 1 week paths: [ "sbom. json" ]
after_script:
- syft $CI_REGISTRY_IMAGE:$IMAGE_TAG -o cyclonedx-json > sbom. json

security_scans:
stage: security image: alpine:3. 20 script:
- trivy image --exit-code 0 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$IMAGE_TAG rules:
- if: '$CI_COMMIT_BRANCH == "main"'

deploy_stage:
stage: deploy image: bitnami/kubectl:1. 30 environment:
name: stage url: https://stage. example. com on_stop: stop_stage script:
- kubectl set image deploy/app app=$CI_REGISTRY_IMAGE:$IMAGE_TAG -n stage
-./scripts/smoke. sh needs: [build_image, security_scans]
when: manual allow_failure: false

stop_stage:
stage: deploy image: bitnami/kubectl:1. 30 environment:
name: stage action: stop script:
- kubectl rollout undo deploy/app -n stage

deploy_prod:
stage: deploy image: alpine/k8s:1. 30. 2 environment:
name: production url: https://app. example. com rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: manual allow_failure: false script:
-./scripts/canary_traffic. sh 10
-./scripts/verify_or_rollback. sh
Кілттер:
  • `parallel. matrix 'матрицалық жинақтарды имитациялайды.
  • 'artifacts' + тест есептері.
  • Environments с 'on _ stop', қол 'when: manual' approvals үшін.
  • Кескінді жинау үшін DIND (жақсы - Kaniko/BuildKit k8s-раннердегі).

5. 3 Child pipelines және монорепо үшін include

yaml include:
- local:.gitlab/ci/includes/security. yml
- project: org/platform/pipelines file: /k8s/deploy. yml ref: v1

stages: [prepare, component_a, component_b, deploy]

component_a:
stage: component_a trigger:
include:.gitlab/ci/component_a. yml strategy: depend

component_b:
stage: component_b trigger:
include:.gitlab/ci/component_b. yml strategy: depend

6) Монорепозиториялар және көп сервистік

Directory-based ownership: CODEOWNERS және scoped-тесттер.
Incremental builds: қозғалған пакеттерді/чарттарды анықтаймыз; жол кілттері мен lock файлдары бойынша кэш.
Dynamic pipelines: child-pipelines/' workflow _ call 'тек өзгертілген компоненттер үшін іске қосылады.
Нұсқалау: әрбір модуль бойынша semver, release-кезеңдегі changelog.

7) Кэштеу және жылдамдату

hashFiles/lockfile.
Тәуелділіктер мен артефактілерге арналған бөлек кэш.
Pre-warm runner images (toolchains, SDK).
Пакеттердің жергілікті айналары (npm/pip/maven) және контейнерлік registry-кэш.

8) Релиздік стратегиялар және кері қайтару

Canary: трафик пайызын біртіндеп өсіру; SLO деградациясы кезінде авто-тоқта.
Blue-Green: параллель ағындар, жылдам ауыстырып қосу.
Shadow: клиентке әсер етпей сұрауларды қайталау.
Feature flags: шығару емес, жалауша деңгейінде rollout.
Rollback: «бір батырмамен» анық скрипттер, артефактінің нұсқасы шығарылымның метадеректерінде сақталады.

9) Инфрақұрылым және GitOps

IaC: Terraform/Ansible/Helm жеке репода басқарылады; policy-as-code қақпа ретінде.
GitOps-контур: Argo CD/Flux қоршаған ортаның манифестімен репоны бақылайды; конвейер тек артефактіні жасайды және Git нұсқаларын жаңартады.
Артықшылықтары: қоршаған ортаның өзгеруінің айқын тарихы, теңсіздік, Git арқылы стандартты кері қайту.

10) CI/CD бақылануы

DORA-метриктер: деплоялардың жиілігі, коммиттен продакшнға дейінгі уақыт, істен шығу пайызы, MTTR.
Telemetry: job 'ov кезектерінің уақыты, кезеңдердің ұзақтығы, hit-rate кэш, flaky-тесттердің жиілігі.
Қауіпсіздік логтары: шығарылымға кім бастама жасады, қандай қақпа өтті, қандай ерекшеліктер берілді.

11) Қолжетімділікті басқару және approvals

Branch protection және міндетті тексерулер.
Environment-approvals: stage/prod.
JIT қол қадамдары үшін қол жетімділік, сессияларды журналдау.
Міндеттерді бөлу: «код жазады», «мақұлдайды», «шығарады» үшін әртүрлі рөлдер.

12) Жиі қателер (анти-паттерндер)

OIDC рөлдерінің орнына репо құпияларында ұзақ өмір сүретін бұлт кілттері.
stage және prod үшін әртүрлі артефактілерді құрастыру («build once» бұзылуы).
'latest' тегтері мен mutable-бейнелері.
Қадамдар логында құпияларды жариялау (ажыратылмаған masking).
Прод-деплойлар үшін бір жалпы public-runner.
Қауіпсіздік «қақпаларының» (SAST/SCA/Policy) және post-deploy тексерулерінің болмауы.

13) Енгізу чек-парағы (0-60 күн)

0-15 күн

trunk-based, PR/MR ережелерін, міндетті статикалық тексерулерді баптау.
Бұлтқа OIDC-федерациясын қосу; Ең аз 'permissions'.
Runner 'дерді тарату: көпшілік - CI үшін, жеке - CD үшін.

16-30 күн

SBOM қосу, сурет қолтаңбасы; кластерде - қолтаңбаны тексеру.
canary/blue-green енгізу; SLO бойынша авто-rollback.
Тәуелділіктер мен артефактілердің кэші, кескіндердің pre-warm.

31-60 күн

Жинауды және жеткізуді (GitOps), policy-as-code қақпаларын бөлу.
Пайплайндардың тозуы бойынша DORA-метриктер мен алаңдарды ретке келтіру.
Барлық серверлер үшін пайплайндарды (reusable/child) шаблондау.

14) Сенімділік бойынша практикалық кеңестер

Кішкентай, жылдам пайплайндарды ұстаңыз (PR сигналына дейін 10-12 минут).
flaky-тесттерді өлтіріңіз: quarantine-таңбалар + параллель фиксс.
CI-артефакттар мен release-артефакттарды араластырмаңыз; метадеректерді сақтаңыз (commit, time, SBOM, қолтаңбалар).
Құрастырушыларға конвейер қадамдарына (dev-prod parity) ұқсас жергілікті скрипттерді беріңіз.

15) Қайта пайдалануға арналған үлгілер

15. 1 GitHub Actions - security reusable workflow (оңайлатылған)

yaml name: security-suite on:
workflow_call:
inputs:
severity_threshold:
type: string required: false default: high jobs:
sast_sca:
runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- run:./sec/sast. sh --threshold ${{ inputs. severity_threshold }}
- run:./sec/sca. sh --format cyclonedx-json --out sbom. json artifacts: # if using actions/upload-artifact
- sbom. json

15. 2 GitLab - қосылатын deploy үлгісі (жеңілдетілген)

yaml
.deployment_template:
image: alpine/k8s:1. 30 script:
- helm upgrade --install $APP charts/$APP --set image. tag=$IMAGE_TAG rules:
- if: '$CI_COMMIT_BRANCH == "main"'

16) Қорытынды

GitHub Actions және GitLab CI тез және қауіпсіз «код → прод» циклі үшін жетілген механизмдерді ұсынады. Табыстың кілті - стандарттау және қауіпсіздік: кілттердің орнына OIDC, қолтаңба және SBOM, сапа қақпасы, промоушенмен бірыңғай артефакт, GitOps-жеткізу және DORA арқылы бақылау. Пайплайндарды өнім ретінде жасаңыз: өлшеңіз, жеңілдетіңіз, жылдамдатыңыз - және релиздер оқиғаға емес, күнделікті жағдайға айналады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.