GitLab
Платформа для Git-репозиториев со встроенным CI/CD, registry и возможностью развернуть всё на своём сервере.
Что такое GitLab
GitLab (гитлаб) — платформа для хостинга Git-репозиториев с полным циклом разработки в одном продукте: репозитории, merge request'ы, CI/CD, Docker Registry, задачи, вики, мониторинг безопасности.
Главное отличие от GitHub — бесплатная self-hosted-версия Community Edition. GitLab ставится на свой сервер и работает полностью внутри контура: код, образы и пайплайны не покидают вашу инфраструктуру. Для компаний с требованиями к хранению данных это часто решающий аргумент.
GitLab CI и .gitlab-ci.yml
CI встроен в платформу: достаточно положить .gitlab-ci.yml в корень репозитория, и пайплайн запустится на следующий push.
stages: [test, build, deploy]
variables:
IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
test:
stage: test
image: python:3.12
cache:
key: $CI_COMMIT_REF_SLUG
paths: [.cache/pip]
script:
- pip install -r requirements.txt
- pytest -q
build:
stage: build
image: docker:27
services: [docker:27-dind]
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE .
- docker push $IMAGE
rules:
- if: $CI_COMMIT_BRANCH == "main"
deploy:
stage: deploy
script:
- kubectl set image deploy/api api=$IMAGE
environment: production
when: manual
Переменные CI_REGISTRY, CI_COMMIT_SHORT_SHA, CI_PIPELINE_ID GitLab подставляет сам — встроенный registry не требует настройки учётных данных.
Что такое GitLab Runner
GitLab Runner (gitlab-runner) — отдельный агент, который и выполняет задачи пайплайна. Сам GitLab только раздаёт задания; вся работа идёт на runner'ах. Их можно поставить где угодно: на VPS, в Kubernetes, на GPU-машине.
Установка и регистрация:
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install gitlab-runner
sudo gitlab-runner register \
--url https://gitlab.example.com/ \
--token <RUNNER_TOKEN> \
--executor docker \
--docker-image alpine:latest \
--tag-list "docker,linux"
sudo gitlab-runner status
sudo gitlab-runner list
Executor'ы
| Executor | Как выполняет job | Когда выбирать |
|---|---|---|
shell |
Прямо в шелле хоста | Просто, но грязнит машину |
docker |
Каждая job в свежем контейнере | Стандартный выбор |
docker+machine |
Поднимает VM под нагрузку | Автомасштабирование сборок |
kubernetes |
Job как под в кластере | Когда кластер уже есть |
Runner с GPU
Для сборки CUDA-образов и тестов инференса регистрируют runner на машине с картой и NVIDIA Container Toolkit:
sudo gitlab-runner register --executor docker \
--docker-image nvidia/cuda:12.4.0-base-ubuntu22.04 \
--docker-gpus all --tag-list "gpu"
bench:
tags: [gpu] # job уедет только на runner с этим тегом
script: [nvidia-smi, python bench.py]
Merge request
Аналог pull request'а в GitHub, но интегрированный с пайплайном: MR показывает статус сборки, покрытие тестами, найденные уязвимости и позволяет включить merge-when-pipeline-succeeds. Правило «нельзя влить красный пайплайн» настраивается в защите ветки и, по сути, реализует CI как обязательный процесс, а не как рекомендацию.
Развёртывание своего GitLab
Omnibus-пакет ставит всё сразу — веб, PostgreSQL, Redis, Nginx. Требования ощутимые: под небольшую команду закладывают 4 CPU и 8 ГБ RAM, диск — под репозитории и слои образов в registry. Не забудьте про резервное копирование: весь код компании оказывается в одном месте.
Связанные термины
- Git — система контроля версий в основе GitLab
- GitHub — главный конкурент
- CI/CD — практика, встроенная в GitLab «из коробки»
- CI/CD pipeline — что описывает .gitlab-ci.yml
- Docker Registry — встроенное хранилище образов
- Bitbucket — ещё одна альтернатива
Готовы запустить GPU-задачу?
Запустить GPU-сервер