CI/CD — это набор практик автоматизации разработки программного обеспечения:
# Пример простого CI/CD пайплайна
stages:
- build
- test
- deploy
build_job:
stage: build
script: npm run build
test_job:
stage: test
script: npm run test
deploy_job:
stage: deploy
script: deploy-to-production.shCI/CD — это методология, которая позволяет командам разработчиков автоматизировать процессы интеграции, тестирования и доставки программного обеспечения. Это как конвейер, который превращает код в готовый продукт автоматически! 🏭
Непрерывная интеграция — это практика, при которой разработчики регулярно объединяют свои изменения кода в центральный репозиторий, после чего автоматически выполняются сборка и тесты.
# Пример CI конфигурации в GitHub Actions
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testЭто практика, при которой код автоматически подготавливается к выпуску в продакшн, но само развертывание требует ручного одобрения.
Расширение непрерывной доставки, при котором каждое изменение, прошедшее все тесты, автоматически развертывается в продакшн без ручного вмешательства.
# Пример CD конфигурации в GitLab CI
stages:
- build
- test
- staging
- production
build_job:
stage: build
script:
- docker build -t myapp:$CI_COMMIT_SHA .
test_job:
stage: test
script:
- docker run myapp:$CI_COMMIT_SHA npm test
deploy_staging:
stage: staging
script:
- deploy-to-staging.sh
environment:
name: staging
deploy_production:
stage: production
script:
- deploy-to-production.sh
environment:
name: production
when: manual # Для Continuous Delivery
# when: on_success # Для Continuous Deployment# GitHub Actions workflow
name: Web App CI/CD
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm ci
- name: Lint code
run: npm run lint
- name: Run tests
run: npm test
- name: Build
run: npm run build
- name: Deploy to staging
if: github.ref == 'refs/heads/develop'
run: |
echo "Deploying to staging..."
# deploy-to-staging.sh
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: |
echo "Deploying to production..."
# deploy-to-production.shCI/CD — это не просто набор инструментов, а философия разработки, которая помогает:
Внедрение CI/CD требует изменения культуры команды, но результаты стоят усилий — более быстрая, качественная и предсказуемая разработка программного обеспечения! 🎯