WireMock — утилита, библиотека на java для создания заглушек над веб-сервисами. Он создает HTTP-сервер, к которому мы могли бы подключиться, как к реальному веб-сервису.
Fedora COPR — это бесплатный хостинг для размещения пользовательских репозиториев (аналог AUR в Arch Linux или PPA в Ubuntu). Из особенностей встроенная возможность собирать rpm пакеты указав имя PIP и RubyGems.
В этом посте напишу как собирать rpm из вашего репозитория по коммиту в Fedora COPR.
Для примера возьмем репозиторий wiremock-rpm, в котором я создал файлы spec и systemd unit. При создании вашего репозитория, вы можете взять wiremock-rpm за основу и поменять то что вам нужно. Написание файлов spec и systemd unit я опускаю. Думаю что вы знаете.
Создание проекта в Fedora COPR
Заходим в Fedora COPR.
Project Name: Указываем название пакета. Обычно совпадает с названием вашего git репозитория.
Description: Краткое описание проекта.
Instructions: Как установить ваш пакет. Указывайте следующее:
yum -y install yum-plugin-copr
yum copr enable ваша-учетка-в-fedora-copr/название-проекта
yum -y install название-пакета
systemctl start название-пакета
Homepage: Указываем домашнюю страницу той программы, которую вы хотите собрать или ваш репозиторий.
Build options: В Chroots указывем под какую оперционную систему вы хотите собрать пакет.
Получается как на скриншоте.
Other options: Если вам нужен интернет, то в Booleans поставьте галочку Enable internet access during builds
После создания проекта переходим в Packages.
Package name: Указываем имя пакета.
Clone url: Указываем git репозиторий.
Subdirectory: Этим пунктом лучше не пользоваться и держать исходники и spec файл в корне проекта. Если у вас будут исходники в какой-то директории, а spec файл в другой директории, возможны проблемы при сборке.
Spec File: Путь до spec файла.
Generic package setup: Обязательно поставьте галочку Auto-rebuild
После того как создали пакет идем в Settings, далее в Integrations. Ниже на странице копируем webhook той системы, где у вас расположен ваш git репозиторий.
Идем в Settings где у вас расположен ваш git репозиторий. Далее для github идем в webhook. Добавляем webhook. Вставляем Payload URL, выбираем Content type application/json
Теперь про WireMock.
Установим wiremock согласно инструкции. Рабочая директория wiremock в моем проекте — /usr/lib/wiremock
/. В этой директории лежит wiremock.jar и директория mappings. В директории mappings находятся json файлы с запросами, которые вы отправляете к wiremock и подготовленными ответами.
Пример из http://wiremock.org/docs/running-standalone/:
{
"request": {
"method": "GET",
"url": "/api/mytest"
},
"response": {
"status": 200,
"body": "More content\n"
}
}
Отправляем запрос к /api/mytest и получаем:
curl http://localhost:8080/api/mytest
More content
Пример из моих подготовленных json:
{
"request": {
"method": "GET",
"url": "/503"
},
"response": {
"status": 503,
"body": "503 Service Unavailable\n"
}
}
Сделаем запрос к /503
curl -i -v 172.26.9.123:8080/503
* About to connect() to 172.26.9.123 port 8080 (#0)
* Trying 172.26.9.123...
* Connected to 172.26.9.123 (172.26.9.123) port 8080 (#0)
> GET /503 HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 172.26.9.123:8080
> Accept: */*
>
< HTTP/1.1 503 Service Unavailable
HTTP/1.1 503 Service Unavailable
< Matched-Stub-Id: d8b419e1-7e33-4f04-889e-2428f849dc7d
Matched-Stub-Id: d8b419e1-7e33-4f04-889e-2428f849dc7d
< Transfer-Encoding: chunked
Transfer-Encoding: chunked
< Server: Jetty(9.2.z-SNAPSHOT)
Server: Jetty(9.2.z-SNAPSHOT)
<
503 Service Unavailable
В rpm wiremock добавил популярные http коды. Исходники тут.