Быстрый старт

В первую очередь необходимо понимать, что genesis только помогает управлять оркестраторами, поэтому для развертывания Вам необходимо иметь базовое представление о Docker/Docker-compose их мы и будем использовать для примера.

Описание процесса старта

1) Создаем новую группу с помощью интерфейса Gitlab, она послужит отдельным нэймспейсом для наших проектов.

new project

new project

new project

2) После успешного создания группы создаем пустой проект.

new project

new project

new project

3) Добавляем код приложения в созданный проект. Важно, код должен находиться в сабдиректории. Для примера приложения я использовал проект на angular https://github.com/wkrzywiec/aston-villa-app

git clone git@gl.sbdagroup.com:test-group/some-project.git # клонируем наш пустой проект
cd some-project                                                                                      #
mkdir myapp                                                # создаем сабдирректорию для приложения
cd myapp                                                   #
git clone git@github.com:wkrzywiec/aston-villa-app.git     # тут я только копирую код проекта 
cp -a ./aston-villa-app/. ./                               # в папку сабдиректории myapp
rm -rf aston-villa-app                                     # в нашем примере это клонирование типового проекта из github
git add -A                                                 # 
git commit -m "init project"                               #
git push -u origin main                                    # пушим

4) Создаем Dockerfile и  nginx.conf в той же директории что и проект.

new project

Пример Dockerfile, описание файла можно прочитать в статье на medium:

 ### STAGE 1: Build ###

FROM node:12.7-alpine AS build
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build

### STAGE 2: Run ###

FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/aston-villa-app /usr/share/nginx/html

nginx.conf:

events{}

http {
    include /etc/nginx/mime.types;
    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html;
        index index.html;
        location / {
            try_files $uri $uri/ /index.html;
        }
    }
}

5) Далее необходимо в корне репозитория создать файл docker-compose.yml:

Пример docker-compose.yml:

version: '3.3'
services:
  myapp:                                   # заменить myapp на название 
    container_name: myapp                  # на название папки
    image: ${REGISTRY_URL}/myapp:${TAG}    # вашего приложения
    restart: always
    ports:
      - "80:80"                                      # [порт компьютера]:[порт контейнера]

6) Определяем следующие обязательные переменные в Gitlab. Settings -> CI/CD -> Variables:

new project

GITLAB_TOKEN - токен от Gitlab, инструкция по получению персонального токена

HOSTING_TOKEN - токен от хостинг провайдера. Можно использовать либо личный от аккаунта если вы собираетесь сами оплачивать хостинг (инструкция на его генерацию в DO), либо корпоративный если сервера оплачивает компания (нужно запросить у руководителя)

DOCKER_HUB_LOGIN - docker-hub credentials (инструкция по регистрации)

DOCKER_HUB_PASSWORD - docker-hub credentials (инструкция по регистрации)

7) Для начала использования genesis необходимо создать в корне репозитория файл .gitlab-ci.yml (пример ниже), который подключает genesis за счет конструкции include.

Пример .gitlab-ci.yml файла:

include:
  - project: 'framework/genesis'
    file: '/genesis.gitlab-ci.yml'

variables:
  VERSION: *.*.*   # Genesis version, вместо *.*.* необходимо подставить последнюю доступную версию/tag,
                   # список тэгов - https://gl.sbdagroup.com/framework/genesis/-/tags
                   # ex: VERSION: 0.0.1
  GITLAB_TOKEN: $GITLAB_TOKEN
  HOSTING_PROVIDER: DO
  HOSTING_TOKEN: $HOSTING_TOKEN
  SIZE: C1M1
  CONTAINER_MANAGER: docker
  DOCKER_HUB_LOGIN: $DOCKER_HUB_LOGIN
  DOCKER_HUB_PASSWORD: $DOCKER_HUB_PASSWORD
    PROJECT_TAGS: '{"budget_line": "product", "org_structure": "software_development_kit", "project_owner": "username@rubbles.ru"}'

8) Финальная структура нашего репозитория.

new project

9) Процесс CI/CD можно увидеть в Gitlab. CI/CD -> Pipelines.

new project

10) Результат и артефакты деплоя в виде присвоенного ip адреса и прочего, можно увидеть в джобе Deploy.

new project

new project

11) На текущем этапе мы получили готовый проект с автоматическим деплоем на сервер. Мы использовали базовую конфигурацию с Docker-compose. Поддержку Kubernetes, домена, ssl и тд вы найдете в документации.

В качестве примера конфигурации, а так же структуры можно обратиться к текущему тестовому проекту https://gl.sbdagroup.com/test-group/some-project
Требования
  • В yml файле для указания пути к папке с Dockerfile использовать "_" вместо "/" . Пример: для проекта genesis webui находящегося по пути genesis/webui/backend -> genesis_webui_backend.
  • Код проекта (в том числе Dockerfile) должен находиться в сабдериктории.

Следующие переменные среды доступны для использования в docker-compose.yml/манифесте k8s:

  • REGISTRY_URL - домен вашего реестра контейнеров gitlab-instance.
  • TAG - ветка git
Ссылки

Хороший гайд по Docker/Docker-compose

Серия статей про Docker на хабре https://habr.com/ru/company/ruvds/blog/438796/

Обзорное видео работы генезиса https://www.youtube.com/watch?v=Dawrksvf0js (устарело)