Simple continuous Integration system
Точно работает на Ubuntu, на windows точно есть проблемы (и с запуском, и с работой) из-за ее cmd.
git clone https://github.com/vaiil/shri-ci.git vail-shri-ci
cd vail-shri-ci
npm --prefix ./server i
Агент устанавливать не нужно, так как он устанавливается в докер-контейнере.
npm --prefix ./server start
- Порт (--port или env.PORT), по умолчанию 3000
- Репозиторий (--repo или env.REPO), по умолчанию текущий (https://github.com/vaiil/shri-ci.git)
npm --prefix ./agent run build-docker-image
npm --prefix ./agent start -- --port 3001
- Порт (--port или env.PORT), по умолчанию 3000
- Host агента (--host или env.HOST), по умолчанию 'localhost'
- URL сервера (--server или env.SERVER_URL), по умолчанию текущий (http://localhost:3000)
Агент запускается в докере (сервер нет), используя сеть хост-машины для общения с сервером.
При запуске сервер создает следущие сущности:
- Список агентов
- Список билдов
- Очередь отложенных задач (те которые, не могут быть сейчас запущены, так как нет свободных агентов)
- Хеш таблицу запущенных задач
При запуске агент обращается на ручку сервера, тем самым регистрируясь в списке. При ошибке подключения к серверу, агент завершает свою работу с выводом данных об ошибке в консоль.
При добавлении задачи, сервер проверяет наличие свободных агентов и если их нет помещает задачу в отложенные. В ином случае, отправляет задачу агенту и заносит задачу в хеш-таблицу запущенных задач. В случае ошибки подключения к агенту, сервер возвращает задачу в отложенные, а агента помечает как проблемного. Для возврата к состоянию "готов к работе" агент должен заново отправить серверу данные о себе.
Также сервер проверяет агента на котором запущенна задача на его доступность (пингует). Агент должен отдать id последней запущенной задачи. В ином случае агент считается что в работе произошла ошибка, задача возвращается в очередь, агент помечается как проблемный.
После завершения задачи, агент сообщает об успехе серверу, передавая информацию по билду. В этот момент сервер возвращает агенту статус готов к работе, ищет задачу запустившую билд, сохраняет ее в билд, удаляет задачу из запущенных и добавляет билд в список билдов.
Очередь задач разбирается новыми и вновь освободившимися агентами.