154 слов | 1 минута
Конфигурация .gitlab-ci.yml
Файл .gitlab-ci.yml описывает шаги CI/CD pipeline в GitLab. Ниже — готовые шаблоны деплоя через FTP (LFTP) и SSH (RSYNC).
Деплой через RSYNC
rsync копирует только изменившиеся файлы, что ускоряет деплой на больших проектах:
stages:
- deploy
deploy-job:
stage: deploy
script:
- echo "Deploying application..."
- rsync -av --no-perms --no-owner --no-group --exclude ".git*" $CI_PROJECT_DIR/ /var/www/project
- echo "Application successfully deployed."
Деплой через LFTP (FTP)
Переменные $PROD_FTP_USER, $PROD_FTP_PASSWORD, $PROD_FTP_SERVER задаются в настройках группы или проекта GitLab.
before_script:
- 'which lftp || ( apt-get update -y && apt-get install lftp -y )'
deploy_master:
only:
- master
stage: deploy
script:
- lftp ftp://$PROD_FTP_USER:$PROD_FTP_PASSWORD@$PROD_FTP_SERVER -e \
"set ftp:ssl-allow no; mirror --continue --reverse --delete --verbose --exclude=^\.git/$ . /; quit"
Пояснение параметров:
set ftp:ssl-allow no— отключает проверку SSL-сертификата на FTP-сервере--reverse— копирует локальные файлы на удалённый сервер--delete— удаляет на сервере файлы, отсутствующие в репозитории--verbose— подробный вывод процесса (отключите на больших проектах)
Примечание: LFTP перезаливает проект целиком при каждом деплое. Подходит для небольших сайтов; для крупных проектов используйте RSYNC.
Исключение файлов логов при деплое
script:
- lftp ftp://$PROD_FTP_USER:$PROD_FTP_PASSWORD@$PROD_FTP_SERVER -e \
"set ftp:ssl-allow no; mirror --continue --reverse --delete --exclude=^logs\/.*\.log$ --exclude=^\.git/$ . /; quit"
Деплой через RSYNC по SSH
Для деплоя на сервер по SSH с аутентификацией по паролю:
image: ubuntu:20.04
deploy:
before_script:
- apt-get update -y
- apt-get install -y rsync sshpass
- export SSHPASS=$SSH_ANGERRO_PSWD
script:
- rsync --recursive --links --owner --group --times --verbose \
--no-perms --chmod=D0700,F0700 \
--rsh="sshpass -e ssh -o StrictHostKeyChecking=no" \
--exclude '.git' --exclude '.gitlab-ci.yml' \
./ $SSH_ANGERRO_USER@$SSH_ANGERRO_SERVER:tickets/public_html/
only:
- master
Переменные окружения:
$SSH_ANGERRO_PSWD— пароль к серверу$SSH_ANGERRO_USER— логин к серверу$SSH_ANGERRO_SERVER— адрес сервера
Пояснение:
sshpass— выполняет SSH-команды без интерактивного ввода пароляrsyncсинхронизирует только изменившиеся файлы- Файлы, переименованные или удалённые в Git, на сервере автоматически не удаляются — требуется ручная очистка
Подробная документация: rsync man page