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.253localssh
- 192.168.3.160local46
- 62.149.23.46
При такому pipeline автоматизуються 3 процеса:
- При будь якому commit в dev оновлюється local
- При будь якому commit з текстом "doc:" білд документації
- Оновлення prod сервер germany вручну
Runner
- local - docker runner
- localssh - ssh runner
Корисні посилання
- Змінні Gitlab - https://docs.gitlab.com/ee/ci/variables/predefined_variables.html -
- Проєкти SOFTPRO - https://git.softpro.ua/project
Пайплайн на новий сервер
- Згенерувати пару ssh ключей
ssh-keygen -t ed25519
- Додати приватний ключ у змінні проєкту за форматом SSHPRIVATE_KEY$НАЗВА(назва - це оточення або ip серверу)
- Додати публічний ключ на сервері за шляхом /root/.ssh/authorized_keys. Створити файл, якщо його немає
Пайплайн на новий проєкт
Пайплайн складається із двох частей test та prod. Наразі це 160 та 170 локальні сервери.
- Зайти у git із проєктом за шляхом Settings->CI/CD->Variables
- Додати змінні PATH_TO_CODE_TEST та PATH_TO_CODE_PROD.
Значення - абсолютний шлях на сервері до репозиторія. Наприклад - /data/softpro/server/edesb
- Додати змінні PROCESS_NAME_TEST та PROCESS_NAME_PROD.
Значення - назва процессу pm2
- Створити файл .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