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

от автора

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

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


ссылка на оригинал статьи https://habr.com/ru/articles/846172/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *