Назад к вопросам
Junior
65
questionbank

Какие инструменты для непрерывной интеграции и доставки (CI/CD) вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Jenkins, GitLab CI, GitHub Actions, CircleCI, TeamCity, Azure DevOps Pipelines, Bamboo, Travis CI.

Основные категории инструментов CI/CD:

  • Платформы полного цикла: Предоставляют комплексные решения, включающие управление репозиториями, CI, CD, мониторинг и другие функции.
    • GitLab (GitLab CI)
    • GitHub (GitHub Actions)
    • Azure DevOps
  • Инструменты CI/CD общего назначения: Гибкие системы, которые можно интегрировать с различными инструментами для сборки, тестирования, развертывания.
    • Jenkins
    • CircleCI
    • Bamboo
    • TeamCity
    • Travis CI
  • Сборочные системы: Сосредоточены на автоматизации процесса компиляции, тестирования и упаковки кода.
    • Maven
    • Gradle
    • Ant
  • Инструменты развертывания: Специализируются на автоматизации доставки приложений в различные среды.
    • Ansible
    • Chef
    • Puppet
    • Spinnaker
    • Argo CD

Пример конфигурации Jenkinsfile для простого CI пайплайна:

// Dockerfile
FROM openjdk:11-jre-slim
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
// Jenkinsfile
pipeline {
    agent any 
    
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package' // Сборка приложения с помощью Maven
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test' // Запуск тестов
            }
        }
        stage('Build Docker Image') {
            steps {
                script { // Создание Docker образа
                    docker.build("my-app:${env.BUILD_ID}") 
                }
            }
        }
        stage('Deploy') {
            steps {
                // Шаги для развертывания, например, на Kubernetes
                echo "Развертывание образа my-app:${env.BUILD_ID}..."
            }
        }
    }
}

Пример конфигурации GitLab CI для аналогичного пайплайна:

# .gitlab-ci.yml
image: maven:latest # Использование образа Maven

stages:
 - build
 - test
 - docker_build
 - deploy

build:
  stage: build
  script:
    - mvn clean package -B # Сборка приложения с помощью Maven в пакетный режим

test:
  stage: test
  script:
    - mvn test -B # Запуск тестов в пакетный режим

docker_build:
  stage: docker_build
  image: docker:latest # Использование образа Docker
  services:
    - docker:dind # Запуск Docker в Docker сервисе
  variables:
    DOCKER_HOST: tcp://docker:2375 # Переменная окружения для доступа к Docker сервису
    DOCKER_TLS_CERTDIR: "" # Отключение TLS
  script:
    - docker build -t my-app:$CI_COMMIT_SHORT_SHA . # Сборка Docker образа
    - docker push my-app:$CI_COMMIT_SHORT_SHA # Пуш образа в репозиторий

deploy:
  stage: deploy
  script:
    - echo "Развертывание образа my-app:$CI_COMMIT_SHORT_SHA..."
  only:
    - main # Выполнять только при пуше в ветку main