← Назад к вопросам

Что такое CI?

1.2 Junior🔥 191 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

CI (Continuous Integration) — Непрерывная интеграция

CI — это практика разработки, при которой разработчики регулярно (несколько раз в день) интегрируют свой код в общий репозиторий. Каждая интеграция автоматически проверяется через automated builds и tests. Это позволяет выявлять проблемы как можно раньше.

Основные цели CI

  1. Раннее обнаружение ошибок — баги находятся на этапе разработки, а не после relеаза
  2. Уменьшение risk интеграции — code merge происходит часто и в контролируемых условиях
  3. Улучшение качества кода — automated checks гарантируют standards
  4. Ускорение разработки — разработчики видят результаты своих действий мгновенно
  5. Лучшая командная коммуникация — все видят state репозитория в реальном времени

Как работает CI pipeline

1. Developer commits code к Git
2. CI Server detects commit (GitHub Actions, Jenkins, GitLab CI)
3. Checkout source code
4. Build project (compile, resolve dependencies)
5. Run unit tests (JUnit, Mockito)
6. Run integration tests
7. Code quality analysis (SonarQube, Checkstyle)
8. Security scan (SAST tools)
9. Build artifacts (JAR, WAR, Docker image)
10. Notify team (success/failure)

Примеры CI инструментов

GitHub Actions (интегрирован в GitHub)

name: Java CI
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 17
        uses: actions/setup-java@v2
        with:
          java-version: 17
      - name: Build with Maven
        run: mvn clean package
      - name: Run tests
        run: mvn test

GitLab CI (встроен в GitLab)

stages:
  - build
  - test
  - quality

build_job:
  stage: build
  image: maven:3.8-openjdk-17
  script:
    - mvn clean compile
  artifacts:
    paths:
      - target/

test_job:
  stage: test
  image: maven:3.8-openjdk-17
  script:
    - mvn test

Ключевые компоненты CI

1. Automated Build

mvn clean package
gradlew build

2. Automated Tests

@Test
public void shouldCalculateDiscount() {
    assertEquals(10, calculator.discount(100, 10));
}

@SpringBootTest
public class UserServiceIT {
    @Test
    public void shouldSaveUserToDatabase() {
        User user = userService.create("John");
        assertThat(userRepository.findById(user.getId())).isPresent();
    }
}

3. Code Quality Checks

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.9.1.2184</version>
</plugin>

4. Code Coverage Analysis

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.8</version>
</plugin>

Best Practices для CI

  • Быстрые тесты (менее 1 минуты для unit tests)
  • Независимые тесты (не зависят от порядка выполнения)
  • Deterministic тесты (всегда одинаковый результат)
  • Частые коммиты (несколько в день)
  • Автоматические notifications при ошибках
  • Быстрое исправление broken builds (приоритет)

Реальный пример: e-commerce приложение

CI Pipeline для заказов:

1. Developer commits feature
2. GitHub Actions запускается:
   - Compile Java code (20 сек)
   - Run 500+ unit tests (2 мин)
   - Run integration tests (3 мин)
   - SonarQube анализ (1 мин)
   - Security check (1 мин)
   - Build Docker image (2 мин)
3. При успехе - merge в main
4. При ошибке - notification разработчику

CI vs CD vs DevOps

  • CI — Continuous Integration (code → test)
  • CD — Continuous Deployment (test → production)
  • DevOps — культура (automation everywhere)

CI — это основа, на которой строится CD и весь DevOps процесс. Без CI невозможно быстро и надежно доставлять features в production. В стартапах CI часто первое, что внедряют в процесс разработки, так как это гарантирует качество кода и уменьшает время разработки.