Змінні
Змінні задаються в налаштуваннях проекту на Gitlab. Отримати дані можна з паспорту проекту в JIRA
Для налаштування LFTP використовуємо такі змінні:
DOMAIN – домене ім’я проекту на stage без вказання протоколу (прикл. heylocate.dev.cheitgroup.com)
USER_NAME – ім’я користувача для підключення на stage сервер
PASSWORD – пароль для підключення на stage сервер
LOCAL_DIR – шлях до папки теми на gitlab з кореня проекту (прикл. wp-content/themes/heylocate)
REMOTE_DIR – повний шлях до папки теми на stage сервері з кореневого каталогу (прикл. /home/heylocate/web/heylocate.dev.cheitgroup.com/public_html/wp-content/themes/heylocate)
при підключення по FTP кореневим каталогом може бути коренева папка користувача
PROD_SERVER – доменне ім’я prod серверу без вказання протоколу
PROD_USERNAME – ім’я користувача для підключення на prod
PROD_PASSWORD – пароль для підключення prod
PROD_REMOTE_DIR – повний шлях до папки теми на prod сервері з кореневого каталогу
PROD_PRIVATE_KEY – містить значення ssh private key для підключення до серверу (задається лише у випадку підключення з ключем)
Налаштування автодеплою
Перш ніж робити налаштування – робимо копію теми на сервері!
Для налаштування автодеплою на проекті потрібно у відповідній гілці stage або production в корені, додати файл .gitlab-ci.yml
Додати цей файл у виключення в .gitignore !.gitlab-ci.yml
Конфігурація .gitlab-ci.yml
В залежності від того, яка це гілка stage або production в конфігурація ви будете використовувати відповідні змінні. Також, в залежності від налаштувань сервера, можливі різні сценарії підключення.
Варіанти конфігурації файлу для автодеплою на prod сервери різних налаштувань
Підключення по SSH з паролем
image: ubuntu:22.04
before_script:
- apt-get update -qy
- apt-cache policy lftp
- apt-get install -y lftp
- pwd
deploy_production:
stage: deploy
script:
- lftp -v
- lftp -e "set sftp:auto-confirm yes; open sftp://$PROD_SERVER; user $PROD_USERNAME $PROD_PASSWORD; mirror -X .* -X .*/ -X vendor/ --reverse --verbose --delete $LOCAL_DIR $PROD_REMOTE_DIR; bye"
sftp:// – протокол підключення
Підключення по SSH з ключем
deploy-production:
image: ubuntu:22.04
stage: deploy-stage-online
interruptible: true
environment: stage-oneline
before_script:
- 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$PROD_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
script:
- apt-get update -y && apt-get install lftp -y
- lftp -e "set sftp:auto-confirm yes; set sftp:connect-program 'ssh -a -x -p 3022'; mirror -X .* -X .*/ -X vendor/ --delete --reverse --verbose $LOCAL_DIR $PROD_REMOTE_DIR; bye" -u $PROD_USERNAME, sftp://$PROD_SERVER
3022 – порт, до якого встановлюється з’єднання
sftp:// – протокол підключення
Підключення по FTP
image: ubuntu:22.04
before_script:
- apt-get update -qy
- apt-cache policy lftp
- apt-get install -y lftp
- pwd
deploy_production:
stage: deploy
script:
- lftp -v
- lftp -e "set ftp:use-feat off; set ftp:passive-mode on; set ssl:verify-certificate no; mirror -X .* -X .*/ -X vendor/ --reverse --verbose --delete $LOCAL_DIR $PROD_REMOTE_DIR; bye" -u $PROD_USERNAME,$PROD_PASSWORD ftp://$PROD_SERVER
ftp:// – протокол підключення
Використання параметра –delete дозволяє повністю синхронізувати gitlab із сервером. Та це означає, що все, що є на сервері, але нема в gitlab буде видалено. Тому при налаштуванні автодеплою необхідно бути уважними при вказанні шляхів у змінних та звіряти вміст папки теми на сервері та gitlab.
Якщо необхідно додати щось у виключення, це можна зробити за допомогою атрибуту -X
В такому разі ваші дані видалено не буде прикл. -X vendor/
Перший деплой рекомендується робити без параметра --delete аби всі файли синхронізувались. Після того додаємо --delete та дивимось, чи було якісь файли з серверу видалено та не перезаписано.
Якщо це щось критично важливе – їх необхідно добавити в гілку з якої ви робите деплой аби вони знову потрапили на сервер.




Leave a Reply
You must be logged in to post a comment.