#git #jenkins #capistrano #build-server
#git #дженкинс #capistrano #сборка-сервер
Вопрос:
В настоящее время я настраиваю сервер сборки в нашем офисе, и мне было интересно, что лучше всего подходит для этого. Я знаю, что каждая ситуация требует другого подхода, и есть миллион способов достичь одной и той же цели, но поскольку я новичок в Jenkins и концепции построения серверов в целом, мне было интересно, правильно ли я это делаю.
Наша компания специализируется на создании веб-сайтов для различных клиентов на различных платформах, таких как WordPress или Magento. Теперь у меня есть следующая настройка:
Мы переносим наши изменения в главную или промежуточную ветку в Git. Дженкинс опрашивает эти ветви и при обнаружении изменений выполняет следующие действия:
- Извлеките репозиторий из Git (
master
в этом примере) - Извлеките ветку с именем
build-master
- Сбрасывает эту ветку на
origin/master
- Выполняет a
npm install
, если apackage.json
найдено. - Выполняет a
grunt build
, если aGruntfile.js
найдено. - (здесь есть место для других вещей, таких как тесты phpunit или CasperJS)
- Фиксирует изменения и возвращает их обратно
origin/build-master
. - Выполняет a
cap build-master deploy
, чтобы позволить Capistrano обрабатывать развертывание на удаленном сервере.
Теперь мне было интересно, является ли это «правильным» способом использования сервера сборки. Я столкнулся с некоторыми логическими проблемами. Нравится:
Например, программное обеспечение поставщика. Например, когда у меня есть различные библиотеки JS с помощью Bower (которые находятся в js/vendor
папке, игнорируемой git), я могу объединить и преобразовать их в уменьшенный JS-файл, чтобы они были переданы в build-master
репозиторий (для Capistrano). Но когда у меня есть PHP-библиотеки (например, с Composer) Я не уверен, как с этим справиться. Они расположены в php/vendor
папке, игнорируемой git, но их необходимо включить в build-master
ветку, чтобы они были развернуты на live-сервере. В настоящее время я делаю это, добавляя a .gitignore.build
в свой репозиторий, который включает в php/vendor
себя -folder , и перезаписываю существующий .gitignore
с помощью этого перед фиксацией и нажатием origin/build-master
.
И / или:
Скомпилированные файлы. Когда я не хочу включать некоторые файлы (например, CSS-файлы, созданные из SASS, например), я помещаю их в .gitignore
. Но опять же, когда Capistrano собирается его развернуть, я хочу, чтобы скомпилированный, объединенный и уменьшенный CSS-файл находился в моем репозитории, иначе он не будет размещен на моем рабочем сервере.
Может кто-нибудь сказать мне, создаю ли я и развертываю так, как это «должно» быть? Или я слишком усложняю это для себя? Мне действительно интересно, как люди с большим опытом в этом используют Jenkins, Grunt, Bower, Composer, Capistrano и т. Д. В процессе сборки.
Комментарии:
1. Одна вещь, о которой я задумался, — это фиксация двоичных файлов. Поскольку вы это делаете, интересно, работаете ли вы над тем, чтобы проверка разработчика оставалась тонкой, без двоичных файлов?
Ответ №1:
Я ищу точно такой же ответ. Я нахожусь в такой же ситуации, и мне интересно, как это можно сделать с наилучшей начальной конфигурацией.
Поскольку вам интересно узнать об использовании grunt для развертывания, есть этот учебник, который может быть полезен для вас, я надеюсь, это даст начальные идеи: https://weluse.de/blog/continuous-deployment-with-yeoman-and-jenkins.html
Кроме того, мне интересно, есть ли у вас какие-либо отзывы о вашем текущем проекте.