GitLab (CI/CD)

GitLab — это комплексная платформа с открытым исходным кодом, объединяющая управление исходным кодом, CI/CD и безопасность в одном интерфейсе.

Шаг 1. Откройте GitLab и нажмите «Создать репозиторий»

gitlab: карточка сервиса с кнопкой «Создать Репо»
Чтобы создать репозиторий, нажмите Создать репозиторий на карточке сервиса.

Шаг 2. Введите название репозитория

gitlab: название
Для завершения введите название репозитория

Что выдает Alem Plus:

  • Ссылка
  • Логин
  • Пароль

Далее Вы можете настроить автоматическую сборку Docker-контейнера и деплой в кластер Kubernetes AlemPlus.

Инструкции по настройке

  • Перейдите по выданной ссылке
  • Зайдите в Settings -> CI/CD -> Variables своего проекта
  • С помощью кнопки Add Variable создайте 2 переменные окружения:
  • Key CONTAINER_REGISTRY_USER со значением - ваш логин для входа в Gitlab
  • Key CONTAINER_REGISTRY_PASSWORD со значением - ваш пароль для входа в Gitlab Затем скопируйте следующий файл .gitlab-ci.yml.example в своем проекте в .gitlab-ci.yml
image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_REGISTRY: $CONTAINER_REGISTRY
  DOCKER_IMAGE: $CI_REGISTRY_IMAGE
stages:
  - build
  - deploy

build_image:
  stage: build
  only:
    - master
  script:
    # Build образа и сохранение в Registry
    - docker login -u $CONTAINER_REGISTRY_USER -p $CONTAINER_REGISTRY_PASSWORD $CONTAINER_REGISTRY
    - docker build -t $DOCKER_IMAGE:$CI_COMMIT_SHORT_SHA .
    - docker push $DOCKER_IMAGE:$CI_COMMIT_SHORT_SHA

deploy:
  image: alpine
  stage: deploy
  only:
    - master
  needs: ["build_image"]
  script:
    - apk add --no-cache curl
    - |
      echo "Тригерим внешний пайплайн root/deploy..."

      curl -X POST \
        --fail \
        -F "token=$ROOT_DEPLOY_TRIGGER_TOKEN" \
        -F "ref=master" \
        -F "variables[DEPLOYMENT_TAG]=$CI_COMMIT_SHORT_SHA" \
        -F "variables[DEPLOYMENT_NAME]=$CI_PROJECT_PATH" \
        -F "variables[DEPLOYMENT_LOGS_USER]=$CONTAINER_REGISTRY_USER" \
        -F "variables[DEPLOYMENT_LOGS_PASSWORD]=$CONTAINER_REGISTRY_PASSWORD" \
        https://$CI_SERVER_HOST/api/v4/projects/$ROOT_DEPLOY_TRIGGER_PROJECT/trigger/pipeline
  variables:
    # Тэг контейнера для деплоймента
    DEPLOYMENT_TAG: $CI_COMMIT_SHORT_SHA
    # Название деплоймента (этот проект)
    DEPLOYMENT_NAME: $CI_PROJECT_PATH
    # Логин и пароль для HTTP авторизации для просмотра логов
    DEPLOYMENT_LOGS_USER: $CONTAINER_REGISTRY_USER
    DEPLOYMENT_LOGS_PASSWORD: $CONTAINER_REGISTRY_PASSWORD


  • Теперь при любом изменении кода в ветке master будет автоматически собираться контейнер и деплоиться в кластер Kubernetes AlemPlus.
  • Прогресс сборки и логи можно смотреть в Build -> Pipelines вашего проекта.

Развертывание

  • Развертывание происходит автоматически в кластере Kubernetes.
  • HTTP-порт образа должен находится на 80 порту.
  • Автоматически настраивается **https://<ВАШ ЛОГИН="">-<ВАШЕ НАЗВАНИЕ="" ПРОЕКТА="">.gitlabapp.alem.ai**. Например, если ваш репозиторий находится по адресу Gitlab foo/bar, то домен будет **https://foo-bar.gitlabapp.alem.ai**.

Просмотр логов

  • Во время деплоймента к вашему контейнеру автоматически создается sidecar контейнер, доступный по адресу **https://<ВАШ ЛОГИН="">-<ВАШЕ НАЗВАНИЕ="" ПРОЕКТА="">.gitlabapp.alem.ai/logs**.
  • Для того, чтобы просмотр логов был доступен, ваш контейнер должен писать логи в файл /applogs/app.logs, а не в stdout.
  • Веб страница с логами защищена HTTP-авторизацией.
  • Для установки логина и пароля необходимо передать в триггер переменные DEPLOYMENT_LOGS_USER и DEPLOYMENT_LOGS_PASSWORD.
  • См. .gitlab-ci.yml.example{: .yellow}, в котором передаются ваши CONTAINER_REGISTRY_USER{: .yellow} и CONTAINER_REGISTRY_PASSWORD{: .yellow}.

Лимиты

  • Ваш контейнер по умолчанию лимитирован по использованию ресурсов: 2 CPU, 4 GB RAM. Если вам нужно больше ресурсов, обратитесь в поддержку.