Образы БД для юнит-тестирования, опять

В прошлой статье был предложен вариант для создания 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 пункта:

  1. Создать файл changelog.xml в корне проекта;

  2. Добавить .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
  1. Настроить работу плагина для градла:

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

И не забываем:

d8825cc9ced5069d0ff4310bfb8a5c28.png

© Habrahabr.ru