[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-sovremennaya-razrabotka-web-kak-ustroen-ci-cd-pipeline-dlya-java-prilozheniya":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":20,"progress":21,"seo":22},1198,"kak-ustroen-ci-cd-pipeline-dlya-java-prilozheniya",37,"sovremennaya-razrabotka-web","Современная разработка WEB","🌐","Как устроен CI\u002FCD pipeline для Java-приложения?","CI\u002FCD pipeline — это автоматизированная цепочка сборки, тестирования и деплоя, которая для Java-приложения типично включает этапы: test, build, push image, deploy.\n\n\u003Cdetails>\n\u003Csummary>GitHub Actions CI\u002FCD pipeline\u003C\u002Fsummary>\n\n```yaml\nname: CI\u002FCD Pipeline\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n    services:\n      postgres:\n        image: postgres:17-alpine\n        env:\n          POSTGRES_DB: testdb\n          POSTGRES_USER: test\n          POSTGRES_PASSWORD: test\n        ports:\n          - 5432:5432\n\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Set up JDK 21\n        uses: actions\u002Fsetup-java@v4\n        with:\n          java-version: '21'\n          distribution: 'temurin'\n          cache: 'gradle'\n      - name: Run tests\n        run: .\u002Fgradlew test\n      - name: Run checkstyle\n        run: .\u002Fgradlew checkstyleMain checkstyleTest\n\n  build-and-push:\n    needs: test\n    runs-on: ubuntu-latest\n    if: github.ref == 'refs\u002Fheads\u002Fmain'\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - name: Build JAR\n        run: .\u002Fgradlew bootJar\n      - name: Build and push Docker image\n        uses: docker\u002Fbuild-push-action@v6\n        with:\n          push: true\n          tags: ghcr.io\u002F${{ github.repository }}:${{ github.sha }}\n\n  deploy:\n    needs: build-and-push\n    runs-on: ubuntu-latest\n    environment: production\n    steps:\n      - name: Update Kubernetes manifest\n        run: |\n          cd k8s\u002Foverlays\u002Fproduction\n          kustomize edit set image order-service=ghcr.io\u002F${{ github.repository }}:${{ github.sha }}\n```\n\n\u003C\u002Fdetails>\n\n### Docker Compose для dev-окружения\n\n\u003Cdetails>\n\u003Csummary>docker-compose.yml\u003C\u002Fsummary>\n\n```yaml\nservices:\n  app:\n    build: .\n    ports:\n      - \"8080:8080\"\n    environment:\n      SPRING_PROFILES_ACTIVE: local\n      SPRING_DATASOURCE_URL: jdbc:postgresql:\u002F\u002Fpostgres:5432\u002Forderdb\n      SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092\n    depends_on:\n      postgres:\n        condition: service_healthy\n\n  postgres:\n    image: postgres:17-alpine\n    ports:\n      - \"5432:5432\"\n    environment:\n      POSTGRES_DB: orderdb\n      POSTGRES_USER: order\n      POSTGRES_PASSWORD: order\n    healthcheck:\n      test: [\"CMD-SHELL\", \"pg_isready -U order -d orderdb\"]\n\n  kafka:\n    image: confluentinc\u002Fcp-kafka:7.7.0\n    ports:\n      - \"9092:9092\"\n\n  redis:\n    image: redis:7-alpine\n    ports:\n      - \"6379:6379\"\n\n  prometheus:\n    image: prom\u002Fprometheus:v2.55.0\n    ports:\n      - \"9090:9090\"\n\n  grafana:\n    image: grafana\u002Fgrafana:11.3.0\n    ports:\n      - \"3000:3000\"\n```\n\n\u003C\u002Fdetails>\n\n### Ключевые принципы\n\n- CI pipeline должен быть быстрым (менее 10 минут): кэширование зависимостей, параллельные джобы\n- Тесты в CI детерминированные: только Testcontainers или service containers\n- Docker Compose для локальной разработки полностью воспроизводит production-зависимости\n- GitOps: изменение манифестов в git автоматически приводит к деплою\n\n### Частые ошибки\n\n- CI pipeline длиннее 15-20 минут: разработчики мёрджат без зелёного билда\n- Отсутствие кэширования зависимостей: каждый билд скачивает все jar-файлы\n- Ручной деплой: \"Вася знает, как деплоить\" — single point of failure\n- Секреты в CI-файлах вместо GitHub Secrets \u002F Vault\n\n> **На собеседовании:** опишите этапы pipeline: checkout, test, build JAR, build Docker image, push to registry, deploy to K8s. Упоминание GitOps (ArgoCD) и кэширования Gradle показывает production-опыт. Вопрос \"Как ускорить CI?\" — ответ: Gradle build cache, параллельные джобы, тонкие Docker-слои.","","middle",[15,16,17,18,19],"devops","spring-boot","github-actions","ci-cd","docker",[],null,{"title":23,"description":24,"ogTitle":25,"ogDescription":26,"keywords":27,"schemaAnswer":38,"featuredSnippetReady":39},"Как устроен CI\u002FCD pipeline для Java-приложения — Gymterview","CI\u002FCD pipeline для Java: GitHub Actions, этапы test-build-push-deploy, Docker Compose для dev, GitOps, кэширование Gradle. Пример полного pipeline с Kubernetes.","CI\u002FCD pipeline для Java-приложения: GitHub Actions и Kubernetes — Gymterview","CI\u002FCD: test, build JAR, Docker image, push to registry, deploy to K8s. GitHub Actions, Docker Compose для dev, GitOps.",[28,29,30,31,32,33,34,35,36,37],"CI\u002FCD Java","GitHub Actions","GitLab CI","Docker Compose","GitOps","ArgoCD","Gradle cache","pipeline","Kubernetes deploy","собеседование","CI\u002FCD pipeline включает этапы: checkout, test (JUnit + Testcontainers), build JAR (Gradle), build Docker image, push to registry, deploy to Kubernetes. Pipeline должен быть быстрым (\u003C10 минут): кэширование Gradle, параллельные джобы. Docker Compose для локальной разработки. GitOps: изменение манифестов в git автоматически приводит к деплою через ArgoCD.",true]