Ответ
В CI/CD этот этап называется Build Stage (Этап сборки). Его цель — преобразование исходного кода, конфигураций и зависимостей в готовый к развертыванию артефакт.
Типичный пайплайн сборки включает:
- Получение кода (Git checkout).
- Восстановление зависимостей (
npm install,go mod download). - Компиляция/транспиляция кода.
- Запуск модульных тестов.
- Создание артефакта (Docker image, JAR/WAR файл, бинарник).
- Публикация артефакта в реестр (Docker Registry, Nexus, S3).
Пример конфигурации этапа сборки в GitLab CI:
build_job:
stage: build
image: maven:3.8-openjdk-11
script:
- mvn clean compile # Компиляция
- mvn test # Модульные тесты
- mvn package # Создание JAR-артефакта
artifacts:
paths:
- target/*.jar # Сохранение артефакта для следующих этапов
Ключевые принципы: воспроизводимость (использование фиксированных версий инструментов), идемпотентность и создание immutable-артефактов.
Ответ 18+ 🔞
Э, слушай, вот эта вся движуха с CI/CD — это ж просто ёперный театр, если честно. Ну ладно, не буду тебя грузить, сейчас на пальцах объясню про самый первый и важный этап — Build Stage, или, по-нашему, Этап сборки. Его задача — взять твой сырой код, все эти конфиги и библиотеки, и слепить из них что-то вменяемое, что уже можно будет запихнуть на сервер. Без этого — нихуя не полетит.
Что там обычно происходит, по шагам:
- Забираем код из гита. Без этого вообще никуда, чувак.
- Тянем все зависимости. Это когда
npm installилиgo mod downloadначинает хапать из интернета овердохуища пакетов. Главное тут — чтобы не сломалось, а то волнение ебать. - Превращаем код во что-то работающее. Компилируем, транспилируем — короче, делаем из человекочитаемого машинопонятное.
- Гоняем модульные тесты. Это чтобы сразу понять, не сломал ли ты чего фундаментального. Если тесты падают — дальше можно даже не смотреть, терпения ноль ебать.
- Пакуем готовую хрень в артефакт. Docker-образ, JAR-файл, бинарник — что там у тебя по проекту.
- Запихиваем этот артефакт куда надо. В Docker Registry, Nexus или ещё в какую сраку, чтобы на следующих этапах его можно было взять.
Вот, смотри, как это выглядит в конфиге GitLab CI, чтоб ты понимал масштаб:
build_job:
stage: build
image: maven:3.8-openjdk-11
script:
- mvn clean compile # Компиляция
- mvn test # Модульные тесты
- mvn package # Создание JAR-артефакта
artifacts:
paths:
- target/*.jar # Сохранение артефакта для следующих этапов
А теперь, бля, самое важное — ключевые принципы, без них ты просто распиздяй:
- Воспроизводимость: Используй фиксированные версии всего! Чтоб сегодня собралось и через год собралось, а не «ой, а у меня новая версия npm, всё сломалось». Иначе будет тебе хиросима, я тебе обещаю.
- Идемпотентность: Сколько раз ни запускай сборку — результат должен быть одинаковый. Чистота, порядок.
- Immutable-артефакты: То, что собралось — свято. Его не пересобирают и не меняют. Собрал версию 1.0 — она и есть 1.0 навеки. Если надо что-то поменять — собирай 1.1. Доверия к изменяемым артефактам — ебать ноль. Вот так вот, чувак.