Что такое CI/CD
GitHub Actions
▸Базовый пайплайн
1name: CI23on:4 push:5 branches: [main]6 pull_request:7 branches: [main]89jobs:10 build:11 runs-on: ubuntu-latest1213 steps:14 - uses: actions/checkout@v41516 - name: Setup Node.js17 uses: actions/setup-node@v418 with:19 node-version: '18'20 cache: 'npm'2122 - name: Install dependencies23 run: npm ci2425 - name: Lint26 run: npm run lint2728 - name: Test29 run: npm test3031 - name: Build32 run: npm run build
▸Деплой на Vercel
1name: Deploy23on:4 push:5 branches: [main]67jobs:8 deploy:9 runs-on: ubuntu-latest10 steps:11 - uses: actions/checkout@v41213 - name: Deploy to Vercel14 uses: amondnet/vercel-action@v2515 with:16 vercel-token: ${{ secrets.VERCEL_TOKEN }}17 vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}18 vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}19 vercel-args: '--prod'
▸Секреты
1- name: Use secrets2 env:3 API_KEY: ${{ secrets.API_KEY }}4 run: echo "Using secret"
GitLab CI
▸.gitlab-ci.yml
1stages:2 - test3 - build4 - deploy56variables:7 npm_config_cache: "$CI_PROJECT_DIR/.npm"89cache:10 key: ${CI_COMMIT_REF_SLUG}11 paths:12 - .npm/13 - node_modules/1415test:16 stage: test17 image: node:1818 script:19 - npm ci20 - npm run lint21 - npm test22 coverage: '/Lines\s*:\s*(\d+\.?\d*)%/'2324build:25 stage: build26 image: node:1827 script:28 - npm ci29 - npm run build30 artifacts:31 paths:32 - dist/33 expire_in: 1 hour3435deploy_staging:36 stage: deploy37 script:38 - npm install -g vercel39 - vercel --token $VERCEL_TOKEN --prod40 environment:41 name: staging42 url: https://staging.example.com43 only:44 - main4546deploy_production:47 stage: deploy48 script:49 - npm install -g vercel50 - vercel --token $VERCEL_TOKEN --prod51 environment:52 name: production53 url: https://example.com54 when: manual55 only:56 - main
▸Секреты в GitLab
Перейдите в Settings → CI/CD → Variables и добавьте:
VERCEL_TOKEN — маркер VercelDATABASE_URL — строка подключения к БДМатричные сборки
▸GitHub Actions
1jobs:2 test:3 runs-on: ubuntu-latest4 strategy:5 matrix:6 node-version: [16, 18, 20]78 steps:9 - uses: actions/checkout@v410 - name: Test on Node ${{ matrix.node-version }}11 uses: actions/setup-node@v412 with:13 node-version: ${{ matrix.node-version }}14 - run: npm ci15 - run: npm test
Кэширование
▸GitHub Actions
1- name: Cache node_modules2 uses: actions/cache@v33 with:4 path: ~/.npm5 key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}6 restore-keys: |7 ${{ runner.os }}-node-
Заключение
CI/CD автоматизирует сборку, тестирование и деплой приложений. GitHub Actions предоставляет простой YAML-синтаксис, GitLab CI — полную интеграцию с GitLab. Оба инструмента позволяют настроить надёжные пайплайны для продакшн-приложений.