Пытаясь понять это CI вещь, поэтому я скачал Дженкинс в моем производственном сервере …
1. Установлен ли Jenkins (или любая другая система CI) на производственном сервере, или у меня должен быть отдельный сервер для сборок Jenkins?
Если Дженкинс находится на другом сервере, как я могу интегрировать сборки в свой рабочий код? Или эта вещь CI не имеет ничего общего с развертыванием?
Затем я создал ключ SSH в /var/lib/jenkins/.ssh, добавленный в мой Bitbucket (Гит) хранилище в качестве ключа развертывания …
2. Это правильный подход?
…И установите URL хранилища [email protected]:...
с jenkins
учетные данные пользователя в плагине Git в настройках проекта.
Пока все хорошо, моя сборка извлекает проект из рабочей области Jenkins, затем я заметил, что каждая сборка, которую он запускает, является проверкой и для каждой проверки, как Композитор активный проект, мой vendors/
каталога там нет, поэтому у меня нет autoload.php
файл, который phpunit.xml
используется в качестве начальной загрузки для загрузки классов и запуска тестов. Так что кроме phpunit
как одна из команд сборки оболочки, которую я добавил composer init
,
3. Это правильно? Должен ли я бежать composer init
на каждом билде?
Главный вопрос, возможно, таков: мои сборки построены из космоса с нуля? Должен ли я оформить заказ и запустить composer install
и какие сценарии мой проект должен выполнять каждый раз (каждая сборка)?
Спасибо!
- Установлен ли Jenkins (или любая другая система CI) на рабочем сервере или у меня должен быть отдельный сервер для сборок Jenkins? Если Дженкинс находится на другом сервере, как я могу интегрировать сборки в свой рабочий код? Или эта вещь CI не имеет ничего общего с развертыванием?
Затем я создал ключ SSH в /var/lib/jenkins/.ssh, добавленный в мой репозиторий Bitbucket> (Git) в качестве ключа развертывания …
- Это правильный подход?
Правильно. У меня есть несколько серверов, настроенных таким образом. В ближайшее время хочу выяснить, можно ли будет использовать Плагин SSH Credentials хранить мои учетные данные там, чтобы мне не пришлось заботиться о разрешениях файловой системы для этого ключа.
- Это правильно? Должен ли я запускать composer init при каждой сборке?
Главный вопрос, возможно, таков: мои сборки построены из космоса с нуля? Должен ли я оформить заказ и запустить установку composer и какие сценарии должен выполнять мой проект, чтобы он работал каждый раз (при каждой сборке)?
Это зависит от ваших требований. У вас может быть несколько сборок или параметризация, которую вы строите, для поддержки различного поведения. Например, у меня есть сборки Laravel, которые в зависимости от параметра среды могут выполнять дополнительное тестирование с помощью Selenium или просто запускать phpunit.
У меня обычно есть два проекта в Jenkins для каждого приложения PHP. Тот, который извлекает код из git, очищает любые остатки других сборок в рабочей области и вызывает Laravel Envoy для сборки проекта. То, что он в основном делает, это вызов composer install
с некоторыми дополнительными параметрами, и вызовите подпрограммы миграции и заполнения базы данных, чтобы подготовить приложение к тестированию.
Другая работа запускается, когда я продвигаю (с плагином Jenkins Promoted Builds) сборку, и она копирует (с Плагин копирования артефактов) рабочее пространство, созданное во время сборки и уже протестированное, и развертывание его с помощью scp в папке на сервере QA. Затем он обновляет некоторые символические ссылки и, наконец, готов к тестированию.
Со временем и дополнительными требованиями от разработчиков и других команд вы познакомитесь со многими другими плагинами, такими как Email-ext Plug-in, отправлять пользовательские уведомления и включать дополнительную информацию о сборке.
В соответствии с передовыми методами для виртуальной машины Jenkins будет выделена отдельная виртуальная машина, просто чтобы отделить ее от других сред, в которых она может развернуться.
Дженкинс может отключать другие службы с помощью сценариев, поэтому удаление того же кота с запущенным Дженкинсом, для которого вы развертываете проект, было бы … неудобно.
Я падаю в лагерь, который одобряет множество рабочих мест Дженкинса, которые связаны друг с другом. Одна работа строит. Еще тесты. и третий развертывает. Таким образом, вы точно знаете, какая работа проблематична. Вы также можете посмотреть на время выполнения задания и получить более четкое представление о том, что занимает так много времени (это развертывание? Это модульные тесты?), И устранить проблемы с более высоким POV.
У меня есть презентация Jenkins Best Practices, которую я дал в Boise Code Camp 2015, которая доступна здесь:
http://lanyrd.com/2015/boise-code-camp/sdkggb/