Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
CI (Continuous Integration) — Непрерывная интеграция
CI — это практика разработки, при которой разработчики регулярно (несколько раз в день) интегрируют свой код в общий репозиторий. Каждая интеграция автоматически проверяется через automated builds и tests. Это позволяет выявлять проблемы как можно раньше.
Основные цели CI
- Раннее обнаружение ошибок — баги находятся на этапе разработки, а не после relеаза
- Уменьшение risk интеграции — code merge происходит часто и в контролируемых условиях
- Улучшение качества кода — automated checks гарантируют standards
- Ускорение разработки — разработчики видят результаты своих действий мгновенно
- Лучшая командная коммуникация — все видят 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 часто первое, что внедряют в процесс разработки, так как это гарантирует качество кода и уменьшает время разработки.