Связаться по Skype: vkarabedyants
Позвонить Написать
+7 (499) 404-28-83

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Как подружить хостинг-панель VESTA и Bitbucket

Разработка с применением систем контроля версий становится сегодня все более популярной, и сисадмину приходится иногда решать нестандартные задачи. Разберемся, как подружить хостинг-панель VESTA и Bitbucket.

Подключаемся к Bitbucket

Самый, наверное, простой способ использования Git, позволяет разработчику сразу после коммита отправлять файл на сервер, например

Если не добавим изменения в общий репозиторий, то мы можем в будущем получить нерабочий сайт. Ведь
при последующем слиянии Git добавит в файлы служебную информацию, которая нарушит синтаксис.
В итоге пришли к схеме, когда между сервером и разработчиком будет находиться посредник, в данном случае это веб-сервис для хостинга проектов Bitbucket.

Git позволяет выполнять push и pull через SSH или HTTPS. В зависимости от задач подойдут оба способа. HTTPS очень прост в настройке и рекомендуется при нечастом использовании. Выглядит это так. Инициализируем локальный репозиторий, подключаем удаленный и забираем изменения.

Но при коммите на Bitbucket необходимо вводить пароль. Поэтому с точки зрения удобства желательно использовать именно SSH.

Для подключения через Git/SSH нужно сгенерировать пару ключей и загрузить публичный ключ на Bitbucket.

В качестве имени файла можно указать bitbucket, чтобы впоследствии не путаться. Запрос на ввод пароля игнорируем, нажимаем Enter. Меняем права доступа, иначе скрипт будет выдавать ошибку.

Проверяем, работает ли ssh-agent, и добавляем ключ:

Добавляем ключ:

Можно проверить, чтобы в ~/.ssh/config была информация для идентификации хоста Bitbucket:

Переходим в настройки учетной записи «Безопасность → SSH-ключи» на сайте Bitbucket и добавляем публичный ключ bitbucket.pub, скопировав его содержимое в буфер обмена.

После этого можно попробовать подключиться к серверу без пароля:

Наполняем сайт

Если сайт пустой, а репозиторий содержит все нужные данные, то просто выполняем стандартное клонирование

Проблем в этом случае минимум, т.к. ставим с нуля, и не будет конфликтов между локальными файлами и теми, что уже есть в репозитории. Только следует (если нужно) поправить права доступа, чтобы веб-сервер мог читать файлы.

подключение к bitbacket

Если подключаемся к уже работающему веб-ресурсу, алгоритм чуть другой. Нужно как-то инициализировать репозиторий. Дело в том, что git не хочет делать репозиторий в каталоге, в котором уже есть какие-то файлы. И после ввода git init просто выдает ошибку. Чтобы выйти из ситуации, нужно инициализировать репозиторий в отдельном каталоге, а затем просто скопировать в рабочий и проверить работу командой git pull. Но файлы в Git и локальные не должны различаться, иначе придется запускать git checkout, и мы можем получить нерабочий сайт. Причем нет необходимости переносить все файлы сайта, достаточно перенести только каталог .git. Не забываем о правах доступа. Так как имя начинается с точки, то шаблон * не сработает, нужно явно указать.

Подключаем удаленный репозиторий:

И пробуем работу:

Стоит подумать, какие файлы добавить в .gitignore. Обычно разработчику не нужен весь сайт.

Используем хуки

Разработчик может выкладывать код в Bitbucket, а мы забирать вручную на сайт. Но этот процесс легко автоматизировать за счет использования хуков. Хук в Git – это скрипт на любом поддерживаемом языке, выполняющийся в зависимости от наступления определенного события. В Bitbucket также доступны хуки. Реализовано фактически сразу два варианта: вебхук (Webhooks) и Службы. В журналах веб-сервера они выглядят так:

Проект поддерживает несколько хуков, поэтому можно указать действия буквально для каждого события. Настроить хуки можно через API или веб-интерфейс (меню «Настройка»). Для вебхука следует указать URL и событие (всего 21 событие). Далее при срабатывании на указанный в установках URL отправляется POST-запрос с данными в JSON-формате, при необходимости можно запрос обработать и действовать в зависимости от параметров. В интерфейсе есть возможность просмотра отправленного запроса View requests, что упрощает написание скриптов. В случае Службы можно выбрать несколько вариантов: POST-запрос, сообщение Twitter и обращение к различным сервисам из списка.

Добавляем вебхук к Bitbucket с помощью вебинтерфейса

Также для управления репозиторием предусмотрено API двух версий – 1 и 2 . В принципе основные функции одинаковы, но, наверное, лучше использовать вторую. В Linux для отправления запроса удобнее применять curl. Создадим приватный репозиторий (параметров можно указать много, все они есть в документации).

В ответ должны получить длинный список параметров с информацией о новом репозитории, там есть и URL для хука (он отличается от основного).

Создаем вебхук на помещение данных в репозиторий (repo:push в веб-интерфейсе Repository push). В качестве URL указываем http://example.org/bitbucket.php.

В самом простом случае один веб-сайт, один проект и т.п., то есть не требуется обработка запроса. Достаточно, чтобы Bitbucket просто обратился по указанному URL. В самом файле поместим команду, которая получит на сайт данные коммита из репозитория. Скрипт, в общем, простой:

Можно на период отладки добавить echo $command. Это поможет сразу увидеть в браузере ошибку.

Теперь Bitbucket пошлет запрос, и команда будет выполнена. Сам Bitbucket использует IP 131.103.20.160/27, 165.254.145.0/26, 104.192.143.0/24, если не нужно запускать скрипт вручную, можно ограничить обращение к скрипту этим диапазоном. В зависимости от настроек сервера для выполнения может не хватить прав доступа. В этом случае выполняем команду через sudo.

Далее набираем команду visudo и в /etc/sudoers записываем:

Теперь должно работать.

Создание вебхука через API

Модернизация вебпанели VESTA

Схема показалась удобной, и было решено сделать сразу хостинг, в котором разработчики могли пробовать свои проекты. Идея такая. При создании домена сразу инициализировался локальный и удаленный репозиторий с именем домена, и устанавливалось соединение, и прописывался вебхук. Веб-хостинг предлагал в качестве веб-панели VESTA, она показалась удобной, так как состоит из отдельных скриптов, выполняющих свои задачи. Хотя наверняка подобное можно реализовать и с помощью других веб-панелей. Предварительные операции те же.

За создание веб-домена отвечает скрипт v-add-webdomain (находится в /usr/local/vesta/bin).

Все нужные переменные $user, $domain берутся из настроек самого скрипта. Единственное, чтобы репозиторий не назывался по полному доменному имени, вроде test. example.org, а просто test, вырежем имя домена и сохраним в переменную repo. В Bitbucket можно создавать темы, если для разработки используется такая тема, то она указывается в URL. Так как инициализировать репозиторий нужно в пустом каталоге, то добавляем в файле после Creating domain logs такие строки:

Теперь осталось скопировать в каталог /usr/local/vesta/ data/templates/web/skel/public_html файл bitbucket.php и, если нужно, .gitignore, и все будет работать.
Схема очень простая, при необходимости ее можно развивать. В сети и на Git в частности есть готовые решения для хуков Bitbucket, но некоторые из них требуют доработки, т.к. API несколько изменился в последнее время.

Если Вам необходимо настроить GIT или Bitbucket или другие продукты, а также услуги DevOps администратора обращайтесь [email protected]

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.