gpt4 book ai didi

mysql - gitlab-ci docker 执行器 |如何设置mysql服务?

转载 作者:行者123 更新时间:2023-11-29 01:20:30 25 4
gpt4 key购买 nike

我正在尝试进行 gitlab-ci 构建,但我在 mysql 设置部分遇到了问题。当我提交时,mysql 脚本似乎运行正常,但随后应用程序构建在连接到数据库时失败。我在这里缺少什么?

.gitlab-ci.yml

stages:
- prepare
- test

services:
- mariadb

variables:
MYSQL_ROOT_PASSWORD: "password"

connect:
stage: prepare
image: mysql
script:
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb < "data/db/scripts/create-db.sql"
- mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb < "data/db/scripts/init-db-tables.sql"

dev:
stage: test
image: java:opendjdk-8
script:
- ./gradlew assemble
- ./gradlew check

数据源配置

@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setUrl("jdbc:mysql://mariadb:3306/rvep");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");

return dataSource;
}

构建错误hibernate 配置没有命中 db 的结果

io.abnd.rvep.RVEPTests > contextLoads FAILED
java.lang.IllegalStateException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.BeanInstantiationException
Caused by: org.hibernate.HibernateException

io.abnd.rvep.security.rest.TestControllerTest > findAllRoleCategories FAILED
java.lang.IllegalStateException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.BeanInstantiationException
Caused by: org.hibernate.HibernateException

io.abnd.rvep.security.rest.TestControllerTest > findAllRoles FAILED
java.lang.IllegalStateException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.BeanInstantiationException
Caused by: org.hibernate.HibernateException

最佳答案

首先确保仔细阅读文档中的“什么是服务”和“服务如何链接到构建”部分:http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-service

在您的配置中,您将在这两行中启动 mysql 服务:

services:
- mysql

多亏了这一点,在您的构建容器中,您可以使用 mysql 服务,该服务可通过主机 mysql 在标准端口上使用。

这里:

connect:
image: mysql
script:
- service mysql start
- echo "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password');" | mysql -u root
- echo "SELECT 'OK';" | mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h mysql "$MYSQL_DATABASE"
- mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h localhost < "data/db/scripts/create-db.sql"
- mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -h localhost < "data/db/scripts/init-db-tables.sql"

您正在在从 mysql 镜像启动的容器中开始新构建,并准备本地数据库状态!这些命令甚至都不会触及您的 mysql 服务。

除此之外,您应该在一个容器内运行 connect 作业,该容器将有一个 mysql 客户端(它也可以是这个 mysql 客户端),但是运行主机 mysql 上的所有命令,而不是主机 localhost 上的所有命令。

第二件事是你在一个阶段运行这两个作业 - connectdev,所以它们将并行执行(但在运行者的配置)。

您应该首先添加 - 作为顶级条目:

stages:
- prepare
- test

然后将这两个作业修改为:

connect:
stage: prepare
(...)

dev:
stage: test
(...)

在第一阶段(准备)的作业将并行执行后,第二阶段(测试)的作业将并行执行,依此类推。

关于mysql - gitlab-ci docker 执行器 |如何设置mysql服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com