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 (кошумча): бөлүү "чогултуу" жана "жеткирүү" (Арго CD/Flux жарыя репо айлана-чөйрөнү көзөмөлдөйт).

3) Коопсуздук жеткирүү чынжыр (supply chain)

Идентификация: OIDC-Киргизия runner 'a булут (узак ачкычтары жок).
Сырлар: борборлоштурулган сактоо, контекстти чектөө, логиге кирүүгө тыюу салуу.
Артефакттарга/контейнерлерге кол коюу (cosign/Sigstore), кол тамганы admission-контролдоодо текшерүү.
SBOM (CycloneDX/SPDX) жана SCA, SAST/DAST/Контейнер Scan - "милдеттүү дарбазалар".
Саясат: IaC/манифесттер үчүн OPA/Conftest, "no latest", артыкчылыктуу контейнерлерге тыюу салуу.
Обочолонуу Runner's: Prod-жеке тармактагы Runner, коомдук интернет чыгуучу жетүү бөлүп.

4) GitHub Actions - түзүлүшү жана практикасы

4. 1 workflows түзүмү

`.github/workflows/.yml` — триггеры (`on: push, pull_request, schedule, workflow_call`).
стандартташтыруу үчүн Reusable workflows (Линтер, SCA, контейнер чогултуу, деплой).

4. 2 Мисал: OIDC жана Image кол менен көп баскычтуу Paypline

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 үчүн киргизилген.
  • approvers жана URL менен Environments, 'concurrency' жарыштан коргойт.
  • жол жана SLO боюнча Automatic артка Канарейка.

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 Image чогултуу үчүн (жакшы - 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) Monorepozitory жана көп кызмат

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

7) Кэш жана тездетүү

Контент дарек кэштери (hashFiles/lockfile).
көз карандылык жана экспонаттар үчүн өзүнчө кэш.
Pre-warm runner images (toolchains, SDK).
Жергиликтүү күзгү пакеттери (npm/pip/maven) жана контейнер каттоо кэш.

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

Canary: трафиктин пайызын акырындык менен көбөйтүү; SLO деградацияда авто-токтоо.
Blue-Green: параллелдүү көз айнек, заматта которуу.
Көлөкө: кардарга таасир этпестен суроо-талаптарды кайталоо.
Feature flags: желек деъгээлинде rollout эмес, чыгаруу.
Rollback: так скрипттер "бир баскычы", артефактынын версиясы релиздин метадерелеринде сакталат.

9) Инфраструктура жана GitOps

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

10) CI/CD байкоо

DORA-Metrics: деплой жыштыгы, өндүрүштүн коммиттен убакыт, ийгиликсиздик пайызы, MTTR.
Telemetry: job 'ov кезек убактысы, этап узактыгы, hit-rate кэш, flaky-тесттер жыштыгы.
Коопсуздук Логи: ким бошотууну демилгелеген, кандай дарбаза өткөн, кандай өзгөчөлүктөр берилген.

11) Access башкаруу жана approvals

Branch коргоо жана милдеттүү текшерүү.
Environment-approvals: stage/prod боюнча approvers өзүнчө тизмелери.
JIT жетүү үчүн кол менен кадамдар, сессияларды каттоо.
Милдеттерди бөлүштүрүү: "кодду жазат", "жактырат", "чыгарат" үчүн ар кандай ролдор.

12) көп каталар (анти-үлгүлөрү)

OIDC ролдорунун ордуна репо сырларында узак мөөнөттүү булут ачкычтары.
Стаж жана прод үчүн ар кандай экспонаттарды чогултуу ("build once" бузуу).
'latest' теги жана mutable-сүрөттөр.
Кадамдардын логунда сырларды жарыялоо (өчүрүлбөгөн masking).
Бир жалпы public-runner үчүн прод-деплой.
коопсуздук "дарбаза" жок (SAST/SCA/саясат) жана пост-deploy текшерүүлөр.

13) Чек-тизме киргизүү (0-60 күн)

0-15 күн

trunk-based орнотуу, PR/MR эрежелери, милдеттүү статикалык текшерүү.
булут OIDC Киргизия киргизүү; минималдуу 'permissions'.
Run runner's: коомдук - CI үчүн, жеке - CD үчүн.

16-30 күн

SBOM кошуу, сүрөт кол коюу; кластерде - кол тамганы текшерүү.
canary/көк-жашыл киргизүү; SLO боюнча авто-rollback.
көз карандылыкты жана артефакттарды кэш, алдын ала эскиз сүрөттөр.

31-60 күн

Бөлүшүү чогултуу жана жеткирүү (GitOps), policy-as-code дарбазасы.
DORA-метриктер жана пайплайндардын деградациясы боюнча алерталарды түзүү.
Бардык кызматтар үчүн пайплайндарды (reusable/child) шаблондоо.

14) Ишенимдүүлүк боюнча практикалык кеңештер

Кичинекей, тез пайплайндарды (PR боюнча сигналга чейин 10-12 мин) сактаңыз.
Flaky-тесттер өлтүрүп: quarantine-белгилер + параллелдүү fix.
CI-экспонаттарды жана релиздик экспонаттарды аралаштырбаңыз; мета маалыматтарды (commit, убакыт, 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 милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.