Существуют различные службы непрерывной интеграции , которые вы можете использовать для своих проектов Node.js, от Travis CI до drone.io и многих других. Если вы любите приключения или вам всегда нравится решение «сделай сам» (по каким-либо причинам), очевидно, довольно легко быстро настроить собственную систему CI с помощью Docker и TeamCity .
Как простая в использовании система непрерывной интеграции, TeamCity предлагает вам два бесплатных решения: лицензия Professional Server на 20 конфигураций сборки или лицензия Open Source для ваших проектов с открытым исходным кодом. Обычно этого достаточно, чтобы вы начали. Также, в соответствии с обычной архитектурой агента сервера, мы будем запускать сервер и агент TeamCity в двух отдельных контейнерах. Это очень похоже на мой предыдущий пост в блоге об установке TeamCity с использованием Docker с небольшим изменением.
Во-первых, вам нужен компьютер для сервера. Это может быть физическая машина, виртуальная машина или даже VPS. Для беспроблемной установки зарегистрируйтесь в Vultr или Digital Ocean (примечание: мои партнерские ссылки). Убедитесь, что вы оценили системные требования для запуска сервера (например, 2 ядра и 2 ГБ ОЗУ будут идеальными).
На этом компьютере Docker должен быть установлен правильно. Полезный быстрый тест:
sudo docker run -it ariya/centos7-oracle-jre7 cat /etc/redhat-release
должен показать что-то вроде:
CentOS Linux release 7.0.1406 (Core)
Как только появится Docker, запустить сервер TeamCity так же просто, как:
sudo docker run -dt --name teamcity_server -p 8111:8111 \ ariya/centos7-teamcity-server
Это использует подготовленный мной контейнер, который называется ariya / centos7-teamcity-server . Обратите внимание, что контейнер поддерживает сопоставление томов /data/teamcity
. Вам определенно нужно сделать это, если вы хотите сохранить свои проекты TeamCity и другие настройки. Вот более изящный способ вызвать сервер, на котором данные хранятся в хост-системе, /var/data/teamcity
и с автоматическим перезапуском в случае смерти сервера.
sudo docker run -dt --name teamcity_server --restart=always -p 8111:8111 -v /var/data/teamcity:/data/teamcity ariya/centos7-teamcity-server
Кроме того, если вы используете брандмауэр, убедитесь, что вы принимаете соединения через порт 8111. С iptables:
sudo iptables -A INPUT -p tcp --dport 8111 -j ACCEPT sudo service iptables save
После запуска сервера зайдите на сайт (через порт 8111) с помощью веб-браузера. Это позволяет вам инициализировать и настроить сервер TeamCity. Через минуту или две он должен быть готов к использованию.
Вы можете начать создавать свой проект CI, подробности см. В превосходной документации TeamCity . Для самого процесса сборки довольно часто дважды вызывать npm, сначала для установки зависимостей, а затем для запуска тестов. Это показано на следующем скриншоте.
В то время как для запуска достаточно использовать npm test
средство запуска командной строки, например , если вы хотите быть немного более изощренным, вы можете использовать настроенный модуль запуска , такой как TeamCity.Node .
Конечно, проект не может быть выполнен прямо сейчас, потому что на сервере еще нет подключенных агентов сборки. Запуск агента также очень прост, поскольку я уже подготовил для этого еще один контейнер, ariya / centos7-teamcity-agent-nodejs . Этот контейнер уже оснащен Node.js 0.10 и npm 1.3.
sudo docker run -e TEAMCITY_SERVER=http://$TEAMCITY_HOST:8111 -dt -p 9090:9090 \ ariya/centos7-teamcity-agent-nodejs
В приведенном выше примере вам необходимо предоставить IP-адрес вашего сервера с переменной среды TEAMCITY_HOST. Опять же, брандмауэр должен принимать соединения через порт 9090.
Разумеется, этот агент можно запустить на том же хосте, что и сервер, особенно если у вас мощная машина. В этом случае вам нужно использовать IP-адрес Docker:
export TEAMCITY_HOST=$(sudo docker inspect --format \
'{{ .NetworkSettings.IPAddress }}' teamcity_server)
Агенту требуется некоторое время, чтобы зарегистрироваться на сервере. Однако это не значит, что агент доступен сразу. Во-первых, вам нужно авторизовать его, чтобы сервер доверял агенту и начинал отправку задач сборки указанному агенту. После этого вы можете запустить свой проект.
Благодаря Docker все можно сделать за 10 минут или меньше. Удачи со всеми тестами!