Требования
Для работы необходим PostgreSQL-server 9.5 и, более-менее "свежий", Docker
Настройка сервера баз данных
Т.к. app-server и worker работают в docker-контейнерах, то следует прописать его (докера) сеть в pg_hba.conf
host all all 172.17.0.0/24 password
Схема и хранимые процедуры распространяются в виде расширения, для установки необходимо склонировать и установить его:
git clone https://github.com/postgres-ci/core.git && cd core && make install
клонируем и ставим (make install скопирует файл "postgres_ci.control" и sql-файлы в директорию расширений постгреса)
Необходимо создать базу данных и установить в нее расширения:
create extension pg_trgm ;
create extension pgcrypto ;
create extension postgres_ci ;
создаем пользователя системы:
select * from users.add('login', 'password', 'User Name', '[email protected]', true);
Запуск сервера приложений (web-ui)
docker run -d \
--name postgres-ci-app-server \
-e DB_HOST=172.16.9.131 \
-e DB_USERNAME=postgres_ci \
-e DB_PASSWORD=iAmAdiscoDancer \
postgresci/app-server
где DB_HOST - хост сервера баз данных, DB_USERNAME - пользоваетель и т.д. по умолчанию используется название базы данных postgres_ci, его можно изменить следующей переменной окружения - DB_DATABASE (например: -e DB_DATABASE=mydb)
Получение ip-адреса сервера
docker inspect --format '{{ .NetworkSettings.IPAddress }}' postgres-ci-app-server
Запуск воркера
docker run -d \
--name postgres-ci-worker \
-e DB_HOST=172.16.9.131 \
-e DB_USERNAME=postgres_ci \
-e DB_PASSWORD=iAmAdiscoDancer \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /tmp/postgres-ci/builds/:/tmp/postgres-ci/builds/ \
postgresci/worker
все как у сервера приложений + "прокидываем" в контейнер сокет докера (воркер управляет запуском контейнеров через api), директорию в которую воркер будет "клонировать" репозитории по умолчанию /tmp/postgres-ci/builds/ (можо изменить переменной окружения WORKING_DIR)
Важно для запуска тестов на машине с воркером необходимо иметь скрипт запуска/установки и фреймворк для тестов, путь выставляется в переменной окружения воркера ASSETS (по умолчанию /opt/postgres-ci/assets). Воркер при старте контейнера запускает скрипт расположенный по адресу /opt/postgres-ci/assets/setup.sh (${ASSETS}/setup.sh )
Установка "ассетов" https://github.com/postgres-ci/worker/blob/master/scripts/setup.sh
Важно 2
Если воркер будет работать с локальными репозиториями (например /home/user/repos) в этом случае их необходимо "подключить" к контейнеру с воркером ключём -v /home/user/repos:/home/user/repos
Git-hooks
Доставка сообщений о "коммите"/"пуше" - это веб-хуки с GitHub он сам отсылает, в настройках необходимо указать адрес-сервера-приложений/webhooks/github/, для работы с собственными репозиториями необходимо собрать хуки
git clone https://github.com/postgres-ci/hooks && cd hooks && make all
в директории hooks будут собраны исполняемые файлы для локального репозитория и удаленного, а так же примеры post-commit/post-recive хуков
Установка:
Копируем hooks/bin в .git/hooks локального или удаленного репозитория. Копируем post-commit/post-recive хук-файлы в .git/hooks и указываем в них HOST - адрес app-сервера, TOKEN - токен проекта для идентификации при получении сообщения (commit/push)
пример
cat .git/hooks/post-commit (выполняется после локального "коммита")
#!/bin/bash
export SCHEME=http
export HOST=172.16.9.131:8888
export TOKEN=764a340a-7230-4d5e-950e-de0727316e7c
$(pwd)/.git/hooks/bin/post-commit
cat .git/hooks/post-receive (выполняется на удаленном сервере после "пуша")
#!/bin/bash
export SCHEME=http
export HOST=172.16.9.131:8888
export TOKEN=764a340a-7230-4d5e-950e-de0727316e7c
./hooks/bin/post-receive