Непрерывная интеграция с использованием композитора - программирование
Подтвердить что ты не робот

Непрерывная интеграция с использованием композитора

У меня есть проект PHP, в котором я загружаю пакеты через Composer. Я также запускаю Continuous Integration с использованием Jenkins на специализированном сервере CI. Каждый час Jenkins запрашивает мой репозиторий для изменений и, если он присутствует, выполняет тестовый прогон.

Первый шаг testrun делает новую проверку репозитория и выполняет сборку приложения с использованием Phing. Один из шагов сборки выполняет

composer install

Поскольку Jenkins всегда работает со свежей проверкой, композитор всегда будет получать все пакеты на каждом тестовом прогоне, даже если ни один из пакетов не был изменен со времени предыдущего запуска. Это имеет несколько недостатков:

  • Для завершения тестового прогона требуется релятивно долгое время (композитор должен получить, например, Zend Framework, который довольно большой
  • Он накладывает ненужную нагрузку на сервер packagist, если новые пакеты выбираются каждый час
  • Если по какой-то причине установка композитора завершается с ошибкой, значит, мой тестовый прогон.

Я думал о возможности хранения пакетов, которые композитор извлекает на центральном месте на сервере CI, поэтому Дженкинс сможет получить доступ к пакетам в этом месте для каждого тестового прогона. Конечно, теперь мне нужно переписать часть моего приложения, чтобы обработать тот факт, что папка поставщика находится в другом месте на сервере CI. Во-вторых, я должен сказать Дженкинсу отслеживать изменения в файле composer.lock, чтобы посмотреть, нужно ли ему вообще запускать композитор. Я боюсь, что ни одна из этих двух вещей не является тривиальной.

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

4b9b3361

Ответ 1

Одна вещь, которую вы можете сделать, - это хранить поставщиков в месте вне рабочей области проекта в jenkins, чтобы она оставалась между сборками. Вам не обязательно менять приложение. Просто обновите конструкцию script, чтобы создать символическую ссылку на расположение поставщиков.

Я использую capifony для развертывания и он использует этот подход, чтобы поддерживать поставщиков между выпусками.

Ответ 2

Один из способов ускорить это - использовать composer install --prefer-dist, который загружает только ZIP файлы даже для пакетов dev. Это предпочтительнее для уникальных сборок, так как пропускает всю историю проекта.

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

Ответ 3

Следует отметить, что Composer кэширует пакеты, которые он загружает. Поэтому, как только они будут загружены в первый раз, они должны работать, даже если Packagist не работает (не на 100% уверен), а пропускная способность сети (100%).

Во-вторых, почему вы запускаете тесты, выполняя новую проверку репозитория? Полностью можно сохранить копию своего кода в рабочей области в Jenkins, и просто убедитесь, что вы протираете при каждом тестировании кеши, журналы и другие артефакты. Это ускорит не только установку композитора, но и тяги git, особенно для больших репозиториев!

Примечание: для нашей собственной платформы Jenkins, где рабочие пространства не очищаются между тестами, основным недостатком, который мы нашли с композитором, является простое количество дискового пространства, взятое из полного каталога поставщика в каждой рабочей области. Я попытался обойти это с помощью символических ссылок и совместного использования вендоров (названных на основе хэшей из composer.lock), но затем у автозагрузчика композитора возникли проблемы с поиском, где загружать классы из...

Ответ 4

Шаги по установке проекта zf2 на Jenkins  mkdir/путь/в/ваш/проект 1. Установите композитор

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Примечание. Если из-за разрешений вышло вышеописанное, запустите mv-строку снова с помощью sudo. Быстрая версия для копирования-вставки, включая sudo:

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
  1. создать файл composer.json в корневом каталоге проекта добавьте все необходимые вам pacakages

    {    "name": "amarjitsingh",    "описание": "amarjitsingh",    "лицензия": "BSD-3-пункт",    "ключевые слова": [        "фреймворк",        "ZF2"   ],    "homepage": " http://domain.com/",    "require": {        "php": " >= 5.5",        "zendframework/zendframework": "~ 2.5",        "phpoffice/phpword": "dev-master",        "doctrine/doctrine-orm-module": "0.7.0",        "представьте/представьте": "0.5. *",        "zf-commons/zfc-user": "dev-master"   },    "autoload": {        "psr.0": "/module"   }

    }

  2. запустите 'composer install', чтобы установить эти пакеты.

  3. настройте git на вашем компьютере если вы используете ubuntu, вы можете настроить git с помощью следующих команд

    Обновление sudo apt-get sudo apt-get install git

Настройка git

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

проверить список конфигурации

git config --list

после установки git, затем c

cd /path/to/your/project

. после того, как у вас установлены пакеты, создайте файл '.gitignore в файле dcument root и добавьте 'vendor' внутри него.

git init
git remote add origin https://[email protected]/username/zf2ci.git

примените команду ниже для ADD, COMMIT и PUSH файлов

git add .
git commit -m 'Initial commit with contributors'
git push -u origin master
git pull

с помощью облака вы можете использовать AWS. Я использую цифровой океан

1 создайте droplet 2.name это, как вы пожелаете, в моем случае это zf2ci 3. выберите пакет 4. выберите ОС my cas eis Ubuntu 14.04 5. На вкладке Applications выберите LAMP 6 как только вы закончите с этим, вы получите IP-адрес, имя пользователя root и пароль. 7. Войдите в систему ip с помощью шпатлевки 8. пользователь root 9. пароль pass 10. Как только вы войдете в него, вам будет предложено изменить пароль 11. goto web root, например /var/www/html 12. установите GIT 13. apt-get install git 14. клонировать репо 15. git clone https://[email protected]/username/zf2ci.git 16. Установите композитор на этом компьютере.

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

Примечание. Если из-за разрешений вышло вышеописанное, запустите mv-строку снова с помощью sudo. Быстрая версия для копирования-вставки, включая sudo:

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
  1. перейти к приложению /var/ww/html/zf2ci
  2. run 'composer install --no-dev' мы устанавливаем его без опции dev becuasae, мы устанавливаем только проверенный код на сервере приложений.

Шаг 3

Создайте сервер Jenkins 1. создать еще одну каплю для Дженкинса 2. изображение ubuntu 3. Установка лампы установить Jenkns

Установка Дженкинса Прежде чем мы сможем установить Jenkins, мы должны добавить ключ и исходный список в apt. Это делается в 2 этапа, сначала мы добавим ключ.

1.1

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add -

Во-вторых, мы создадим список источников для Jenkins.

1.2

echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list

1,3 Теперь нам нужно обновить apt-кеш, прежде чем мы сможем установить Jenkins.

apt-get update

1,4 По мере обновления кеша мы можем продолжить установку Jenkins. Обратите внимание, что у Jenkins есть большой набор зависимостей, поэтому для их установки может потребоваться несколько минут.

apt-get install jenkins

1.5 откройте ip с портом 8080 например, http://127.0.0.1:8080

1.6 установить git на сервер jenkins

sudo apt-get update
sudo apt-get install git

1.7 установить композитор

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

1.8 включить аутентификацию пользователя

1,9 enable bitbucket plugin для Дженкинса 1.9.1   Manage Jenkins->Manage Plugins->Bitbucket Plugin->download и установите 1.9.2 создать вакансию   создание /   название проекта (например, zf2ci) →   управление исходным кодом (git) обеспечивает ssh url ([email protected]:username/zf2ci.git) →   ветки на построенные (*/master), это ветка, где каждый раз, когда любой пользователь совершает и объединяет код с ветвью мастера - Jenkins вызывается

1.9.3  Построить триггеры   выберите вариант (создайте, когда chnage будет нажат), это произойдет, когда мы сделаем POST-крючок на бит-ведре

1.9.4  Build- > Execute shell

 composer install
 ./vendor/bin/phpunit ./tests

наши тесты сидят intests dir

1.9.5 установите a ssh key pair

Войти в jenkins Serevr через шпаклевку

su jenkins
    cd
    ls -la( check what is in the jenkins home directory)
    ssh-kegen -t rsa (dsa by default but choose rsa key ,it is faster)
    press enter(on path)
    press enter(leave the pass phrase empty , the whole point here is to avoid passwords in the automated jobs)
    pres enter



 cd .ssh

ls -la (вы найдете там id_rsa.pub) файл

cat id_rsa.pub

(выберите все и скопируйте содержимое файла)

1.9.6   goto bitbucket   перейти на repo zf2ci   перейдите в настройки   нажмите клавиши развертывания → добавить ключ   добавить ярлык (jenkins)   key * (вставьте содержимое файла id_rsa.pub) здесь   сохранить ключ

summary
`zf2ci->settings->deployment keys->add key->type` label and paste id_rsa.pub key->save

1.9.7  зарегистрировать POST-крючок для репо

Settings->
Integrations->
Hooks->
POST(search for POST Hook)->
Add the url /IP of the Jenkins Server) (`172.62.235.100:8080/bitbucket-hook/`)
(the body of the post contanis information about the repository, branch, list of recent commits, user)

1.9.8   Войти на сервер Jenkins

su jenkinks
    cd
    cd .ssh
    git ls-remote -h ssh://[email protected]:username/zf2ci.git HEAD

1.9.9   save проект на Дженкинсе 1.9.10   добавьте следующую команду в   Выполнить команду Shell- >   [rsync -y -vrzhe "ssh -o StrictMostKeyChecking=no" --exclude vendor/ . [email protected]:/var/www/html/zf2ci (сервера приложений)]

ssh [email protected]<<EOF
    cd /var/www/html/zf2ci
    composer install --no-dev
    EOF