Skip to main content

Gitlab CI SETUP

CI Local 192.168.3.160

# .gitlab-ci.yml
stages:
- deploy
- doc

deploy-local:
stage: deploy
tags:
- localssh
variables:
GIT_STRATEGY: none
script: cd /data/softpro/server/$CI_PROJECT_NAME && git pull
only:
- dev

deploy-doc:
stage: doc
tags:
- localssh
variables:
GIT_STRATEGY: none
script: cd /data/softpro/server/$CI_PROJECT_NAME/docs && mkdocs build
only:
variables:
- $CI_COMMIT_MESSAGE =~ /^doc:/

deploy-germany:
stage: deploy
tags:
- germany
variables:
GIT_STRATEGY: none
script:
- cd /data/softpro/server/$CI_PROJECT_NAME && git pull origin dev
- cd /data/softpro/server/$CI_PROJECT_NAME/docs && mkdocs build
- p2o /data/softpro/server/$CI_PROJECT_NAME/docs/postman.json > /data/softpro/cdn/documentation/apidocs/$CI_PROJECT_NAME.yml
- cd /data/softpro/cdn/documentation/apidocs && redoc-cli build $CI_PROJECT_NAME.yml
- mv redoc-static.html $CI_PROJECT_NAME.html
#- pm2 restart 3031_crm_help
when: manual

Сервер tags

  • germany - 94.130.163.253
  • localssh - 192.168.3.160
  • local46 - 62.149.23.46

При такому pipeline автоматизуються 3 процеса:

  1. При будь якому commit в dev оновлюється local
  2. При будь якому commit з текстом "doc:" білд документації
  3. Оновлення prod сервер germany вручну

Runner

  • local - docker runner
  • localssh - ssh runner

Корисні посилання

Пайплайн на новий сервер

  1. Згенерувати пару ssh ключей
  ssh-keygen -t ed25519
  1. Додати приватний ключ у змінні проєкту за форматом SSHPRIVATE_KEY$НАЗВА(назва - це оточення або ip серверу)
  2. Додати публічний ключ на сервері за шляхом /root/.ssh/authorized_keys. Створити файл, якщо його немає

Пайплайн на новий проєкт

Пайплайн складається із двох частей test та prod. Наразі це 160 та 170 локальні сервери.

  1. Зайти у git із проєктом за шляхом Settings->CI/CD->Variables
  2. Додати змінні PATH_TO_CODE_TEST та PATH_TO_CODE_PROD. Значення - абсолютний шлях на сервері до репозиторія. Наприклад - /data/softpro/server/edesb Screenshot
  3. Додати змінні PROCESS_NAME_TEST та PROCESS_NAME_PROD. Screenshot Значення - назва процессу pm2
  4. Створити файл .gitlab-ci.yml у проєкті із наповненням
stages:
- deploy

deploy-test:
stage: deploy
image: alpine:latest
tags:
- local
before_script:
- apk update
- apk add openssh
- eval $(ssh-agent -s)
- cat "$SSH_PRIVATE_KEY_TEST" | tr -d '\r' | ssh-add -
- mkdir -p /root/.ssh
- chmod 700 ~/.ssh
script:
- ssh-keyscan -H $SERVER_TEST > /root/.ssh/known_hosts
- ssh $SSH_USER@$SERVER_TEST "cd $PATH_TO_CODE_TEST && git fetch && git reset --hard origin/$CI_COMMIT_BRANCH && git checkout $CI_COMMIT_SHA && npm i && pm2 reload $PROCESS_NAME_TEST"
only:
- dev

deploy-prod:
stage: deploy
image: alpine:latest
tags:
- local
before_script:
- apk update
- apk add openssh
- eval $(ssh-agent -s)
- cat "$SSH_PRIVATE_KEY_PROD" | tr -d '\r' | ssh-add -
- mkdir -p /root/.ssh
- chmod 700 ~/.ssh
script:
- ssh-keyscan -H $SERVER_PROD > /root/.ssh/known_hosts
- ssh $SSH_USER@$SERVER_PROD "cd $PATH_TO_CODE_PROD && git fetch && git reset --hard origin/$CI_COMMIT_BRANCH && git checkout $CI_COMMIT_SHA && npm i && pm2 reload $PROCESS_NAME_PROD"
only:
- main