Gitlab ci gitlab CI中的Gradle和Mysql
我有一个测试工作,需要gradle和mysql一起运行测试。 演示如何使用mysql。问题是链接中的图像标记会覆盖gradle的全局图像标记,因为找不到gradle。是否有一种方法可以在一个作业或任何其他作业中使用多个图像 这是.gitlab-ci.yml的缩写版本。是完整的一个: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
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
的容器中。