Образы БД для юнит-тестирования, опять
В прошлой статье был предложен вариант для создания docker образов БД для последующего использования в разработке и тестирования приложений в пайплайнах гитлаба.
Из-за перехода на новую инфрастуктуру k8s 1.30 (restricted psp) и новый гитлаб 17.3 все это ломается. Поэтому придется исправлять ситуацию!
Почему от buildah придется отказаться
Собирать надо от пользователя build, но по каким-то причинам в новом gitlab-runner все будет заканчиваться ошибкой remount / failed. Исправить это оказалось нереально, выдавать привилегированные права нельзя. Учитывая, что создаваемый образ для БД простой — не нужно выполнять никаких сложных операций, то проще выкинуть зависимость и искать другое решение.
Jib-core
Скорее всего в вашей команде уже используют для контейнеризации java приложений плагин для maven или gradle под названием jib. Данный плагин настолько преисполнился в познании вселенной, что предоставляет свое апи для написания собственных плагинов.
Для генерации нужно только создать простую таску для gradle:
getLogger().info("Generating image {} from {}", getTargetImageName().get(), getBaseImage().get());
var image = Jib.from(getBaseImage().get())
.addLayer(getSqlFiles().get(), AbsoluteUnixPath.get("/docker-entrypoint-initdb.d/"))
.containerize(Containerizer.to(RegistryImage.named(getTargetImageName().get())
.addCredential(getRegistryUsername().get(), getRegistryPassword().get())))
.getTargetImage();
if (Boolean.TRUE.equals(getTargetImageIsLatest().get())) {
Jib.from(image)
.containerize(Containerizer.to(RegistryImage.named(replaceWithLatestVersion(getTargetImageName().get()))
.addCredential(getRegistryUsername().get(), getRegistryPassword().get())));
}
А так как в проекте mireapay используется liquibase, то весь функционал по конфигурированию был выведен в плагин для gradle.
Теперь, что бы использовать все необходимое нужно только выполнить 3 пункта:
Создать файл changelog.xml в корне проекта;
Добавить .gitlab-ci.yml:
include:
- project: 'mireapay/devops/pipeline'
ref: 'v1.1'
file:
- 'gradle/liquibase/validate/default.yaml'
- 'gradle/liquibase/image/default.yaml'
- 'gradle/liquibase/release/default.yaml'
- 'gradle/liquibase/deploy/local-dev/clearing.yaml'
stages:
- validate
- release
- image
- deploy
Настроить работу плагина для градла:
plugins {
id 'com.lastrix.mps.database.liquibase' version "0.0.9"
}
group 'com.lastrix.mps.clearing.core'
databaseLiquibase {
defaultSchema = System.getProperty('db.schema') ?: "clearing_core"
}
Пример использования тут.
Пайплайны можно найти тут. Рекомендую собрать агента для начала, для вашего проекта нужно будет заменить gitlab.local в файлах на ваш хост.
Для работодателей
Работодатель, поспеши завести себе Java-кота в команду! Мышей не ловит, но зато пишет Java-код, а еще проектирует немножко.
https://hh.ru/resume/b33504daff020c31070039ed1f77794a774336
И не забываем: