Skip to content

Instantly share code, notes, and snippets.

@kshvakov
Created May 30, 2016 18:59
Show Gist options
  • Save kshvakov/6d9a39dcb8b9e8953bf0c425b5c03303 to your computer and use it in GitHub Desktop.
Save kshvakov/6d9a39dcb8b9e8953bf0c425b5c03303 to your computer and use it in GitHub Desktop.
Установка Postgres-CI

Требования

Для работы необходим 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment