Быстрый старт
В первую очередь необходимо понимать, что genesis только помогает управлять оркестраторами, поэтому для развертывания Вам необходимо иметь базовое представление о Docker/Docker-compose их мы и будем использовать для примера.
Описание процесса старта
1) Создаем новую группу с помощью интерфейса Gitlab, она послужит отдельным нэймспейсом для наших проектов.
2) После успешного создания группы создаем пустой проект.
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
в той же директории что и проект.
Пример 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
:
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) Финальная структура нашего репозитория.
9) Процесс CI/CD можно увидеть в Gitlab. CI/CD -> Pipelines
.
10) Результат и артефакты деплоя в виде присвоенного ip адреса и прочего, можно увидеть в джобе Deploy.
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 (устарело)