Gradle и Mysql в Гитлаб CI - PullRequest
       3

Gradle и Mysql в Гитлаб CI

0 голосов
/ 29 февраля 2020

У меня есть тестовое задание, которое требует gradle для запуска теста, а также mysql. В этом примере показано, как использовать mysql. Проблема в том, что тег image в ссылке перекрывает мой глобальный тег image gradle, из-за которого gradle не найден. Есть ли способ использовать несколько изображений в одном задании или любом другом обходном приеме.

Это сокращенная версия .gitlab-ci.yml. Это полное:

image: gradle:jdk11

# Disable the Gradle daemon for Continuous Integration servers as correctness
# is usually a priority over speed in CI environments. Using a fresh
# runtime for each build is more reliable since the runtime is completely
# isolated from any previous builds.

variables:
  # Configure mysql service (https://hub.docker.com/_/mysql/)
  MYSQL_ROOT_PASSWORD: mysql
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"

## build configs....
test_MariaDBImpl:
  needs:
    - build_MariaDBImpl
  stage: test
  services:
    - mysql
  image: mysql
  script:
      - echo "create user if not exists 'test'@'localhost'; grant all privileges on *.* to 'test'@'localhost'; flush privileges;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql
      - gradle cleanTest :MariaDBImpl:test

Редактировать 1: Одна из работ, о которой я подумал, это добавить before_script и загрузить либо gradle, либо mysql, но я думаю, что есть лучший способ?

Редактировать 2: Или, может быть, создать docker изображение со всеми тремя и использовать его вместо этого?

1 Ответ

1 голос
/ 04 марта 2020

Это ожидаемое поведение с GitLab-CI. Вы устанавливаете image: gradle:jdk11 в качестве изображения по умолчанию, которое будет использоваться для задания CI, если оно не переопределено в конфигурации задания, как вы сделали с image: mysql.

. Как вы сказали, у вас есть несколько вариантов здесь, если вам нужны и gradle, и mysql-client.

  • Создайте собственное Docker изображение, которое содержит
  • Удалите image: mysql, используйте значение по умолчанию image: gradle:jdk11 и установите mysql-client в начале вашего script блок или before_script. gradle:jdk11 основан на Ubuntu, поэтому вы можете запустить: apt-get update && apt-get install -y mysql-client
  • Сохранить image: mysql и установить gradle с помощью apt-get update && apt-get install -y gradle (я не рекомендую устанавливать gradle через APT, устанавливать много пакетов и замедлит работу вашего CI без необходимости)
  • Keep image: mysql, добавьте упаковщик gradle в ваш репозиторий и напрямую вызывайте его из gitlab-ci. Edit : Это не очень полезно, так как для сборки проекта потребуется также загрузить JDK. Лучше всего, если базовый образ уже содержит его.

Я бы предпочел продолжать использовать gradle:jdk11 в качестве базового образа и просто установить пакет mysql-client для этой спецификации c работа, так как ваша другая работа нужна только Gradle.

...