Статьи

Непрерывная интеграция для проектов Node.js с TeamCity

Существуют различные службы непрерывной интеграции , которые вы можете использовать для своих проектов Node.js, от Travis CI до drone.io и многих других. Если вы любите приключения или вам всегда нравится решение «сделай сам» (по каким-либо причинам), очевидно, довольно легко быстро настроить собственную систему CI с помощью Docker и TeamCity .

logo_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. Через минуту или две он должен быть готов к использованию.

teamcity_starting

Вы можете начать создавать свой проект CI, подробности см. В превосходной документации TeamCity . Для самого процесса сборки довольно часто дважды вызывать npm, сначала для установки зависимостей, а затем для запуска тестов. Это показано на следующем скриншоте.

teamcity_project

В то время как для запуска достаточно использовать 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.

teamcity_agent

Разумеется, этот агент можно запустить на том же хосте, что и сервер, особенно если у вас мощная машина. В этом случае вам нужно использовать IP-адрес Docker:

export TEAMCITY_HOST=$(sudo docker inspect --format \
  '{{ .NetworkSettings.IPAddress }}' teamcity_server)

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

teamcity_buildlog

Благодаря Docker все можно сделать за 10 минут или меньше. Удачи со всеми тестами!