Gitlab CI Web Deployment - PullRequest
       10

Gitlab CI Web Deployment

0 голосов
/ 03 января 2019

Таким образом, в настоящее время мы удаляемся от нашего текущего поставщика развертывания: Beanstalk, который великолепен, но мы находимся на верхнем уровне, и у нас не хватает места или мы ограничиваем наши хранилища.Итак, мы уходим, поэтому, пожалуйста, не предлагайте никаких других SaaS-провайдеров.

Я лично использую Gitlab для своих собственных проектов и проектов нескольких компаний, и это удивительно, что мы используем собственную версию на нашем локальном сервере в нашей компании.building.

Мы настроили CI и в настоящее время используем следующий код развертывания (я уменьшил биты только до развертывания для разработки) - для развертывания используется исполняющий модуль оболочки при развертывании на существующем сервере Linux.

variables:
  HOSTNAME: '<hostname>'
  USERNAME: '<username>'
  PASSWORD: '<password>'
  PATH_DEV: '/path/to/www'

# Define the stages (we can add as many as we want)
stages:
  # - build
  - deploy

# The code for development deployment
deploy_dev:
  stage: deploy
  script:
    - echo "Deploying to development environment..."
    - rm .gitlab-ci.yml
    - rsync -urltvz --filter=':- .gitignore' --exclude=".git" -e "sshpass -p"$PASSWORD" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" * $USERNAME@$HOSTNAME:$PATH_DEV
    - echo "Finished deploying."
  environment:
    name: Development
    url: http://dev.domain.com
  only:
    - envdev

Проблема:

Когда мы используем приведенный выше код для развертывания, он идеален и работает действительно хорошо, а также развертывает весь код после оптимизации и т. Д., Номы нашли здесь небольшую ошибку.

Когда вы удаляете файл, команда rsync не удаляет файл, теперь я провел поиск и нашел флаг --remove, который вы можете добавить, и это сработало - ноон также удалил весь загруженный пользователем контент.Теперь я добавил .gitignore в фильтрацию, чтобы он игнорировал некоторые файлы в их (которые обычно создаются пользователем) или конфигурационные файлы и / или библиотеки (npm и т. Д.).Это нормально, пока пользователь не начал загружать файлы с помощью менеджера мультимедиа в нашей инфраструктуре, который хранится в папке, которой нет в файле .gitignore, и не может этого сделать, поскольку он содержит другие файлы, так как мы также добавляем туда свои собственные файлы, так чтоони доступны для редактирования пользователем, так что теперь я не уверен, как с этим справиться.

Нам нужна настройка CI, которая будет загружать изменения файлов на сервер, поэтому она будет искать последниефиксирует и находит последние файлы, которые были изменены, а затем отправляет только эти файлы.Конечно, я хотел бы сделать это с помощью Gitlab CI, поэтому любые примеры идей или учебные пособия будут удивительными.

Заранее спасибо.

~ Дэнни

1 Ответ

0 голосов
/ 17 января 2019

Может помочь: https://github.com/banago/PHPloy Выглядит этот инструмент, предназначенный для проекта PHP, но я думаю, что он может использовать другие веб-развертывания.

как это работает: PHPloy хранит файл с именем .revision на вашем сервере. Этот файл содержит хэш коммита, который вы развернули на этом сервере. Когда вы запускаете phploy, он загружает этот файл и сравнивает в нем ссылку на коммит с коммитом, который вы пытаетесь развернуть, чтобы выяснить, какие файлы загрузить. PHPloy также сохраняет файл .revision для каждого подмодуля в вашем хранилище.

...