Gitlab ci gitlab CI中的Gradle和Mysql

Gitlab ci gitlab CI中的Gradle和Mysql,gitlab-ci,Gitlab Ci,我有一个测试工作,需要gradle和mysql一起运行测试。 演示如何使用mysql。问题是链接中的图像标记会覆盖gradle的全局图像标记,因为找不到gradle。是否有一种方法可以在一个作业或任何其他作业中使用多个图像 这是.gitlab-ci.yml的缩写版本。是完整的一个: image: gradle:jdk11 # Disable the Gradle daemon for Continuous Integration servers as correctness # is usua

我有一个测试工作,需要gradle和mysql一起运行测试。 演示如何使用mysql。问题是链接中的图像标记会覆盖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:我想到的一个解决办法是在脚本之前添加一个
,然后在其中下载gradle或mysql,但我想有更好的方法吗


编辑2:或者创建一个包含这三个元素的docker映像,并使用该映像?

这是GitLab CI的预期行为。您可以将
image:gradle:jdk11
设置为用于CI作业的默认映像,除非在作业配置中像使用
image:mysql
一样重写

正如您所说,如果您同时需要
gradle
mysql客户端
,那么这里有几个选项

  • 构建自己的Docker映像,其中包含
  • 删除
    image:mysql
    ,使用默认的
    image:gradle:jdk11
    并在
    script
    块的开头或使用
    before\u script
    安装
    mysql客户机
    gradle:jdk11
    基于Ubuntu,因此您可以运行:
    apt-get-update&&apt-get-install-y mysql客户端
  • 保留
    image:mysql
    并使用
    apt-get-update和&apt-get-install-y-gradle安装gradle
    (我不建议通过apt安装gradle安装大量软件包,这会不必要地降低CI作业的速度)
  • 保留
    image:mysql
    ,添加到您的存储库中,并直接从gitlab ci调用它。编辑:这不是很有用,因为它还需要下载JDK来构建项目。如果基础映像已经包含它,则效果最佳

我倾向于继续使用
gradle:jdk11
作为基本映像,只需为该特定作业安装
mysql客户机
包,因为您的其他作业只需要gradle。

gradle包装器已经在存储库中了。你认为每次安装mysql都值得吗?建立自己的码头工人形象似乎要好得多。这就是我困惑的原因。我知道这是Gitlab CI的预期行为如果您已经有了gradle包装器,那么您可以为作业保留
映像:mysql
映像,并调用
/gradlew cleanTest:MariaDBImpl:test
?这是否意味着我甚至不需要映像:gradle?我需要jdk 11来构建?哈,是的,很抱歉。如果您的项目是Java项目,则需要在基本映像上安装jdk,这使得
mysql
的使用不理想。然后我会将
mysql客户机安装到基于
gradle:jdk11
的容器中。