LFTP deploying processing

Змінні

Змінні задаються в налаштуваннях проекту на Gitlab. Отримати дані можна з паспорту проекту в JIRA

image-20240710-083055.png

image-20240710-083538.png

Для налаштування 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 та дивимось, чи було якісь файли з серверу видалено та не перезаписано.

image-20240802-082800.png

image-20240802-082354.png

Якщо це щось критично важливе – їх необхідно добавити в гілку з якої ви робите деплой аби вони знову потрапили на сервер.

Comments

Leave a Reply