gitlab-ci docker 执行器 |如何设置 mysql 服务?
gitlab-ci docker executor | how to setup mysql service?
我正在尝试进行 gitlab-ci 构建,但我在 mysql 设置部分遇到了问题。当我提交时,mysql 脚本似乎 运行 OK,但是应用程序构建在连接到数据库时失败。我在这里错过了什么?
.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
首先确保仔细阅读文档中的 "What is service" 和 "How is service linked to the build" 部分:http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-service
在您的配置中,您将在这两行中启动 mysql 服务:
services:
- mysql
多亏了这个,在你的构建容器中你可以使用一个 mysql 服务,它可以通过主机 [=65= 在标准端口上使用].
这里:
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 图像 开始的容器中开始新构建 并在 本地 准备数据库状态! None 这些命令甚至触及您的 mysql 服务。
你应该 运行 容器内的 connect 作业而不是这个,该容器将有一个 mysql 客户端(也可以是这个mysql 一个),但是 运行 主机上的所有命令 mysql 而不是主机 localhost.
第二件事是你在一个阶段 运行ning 这两个工作 - connect 和 dev,所以他们将并行执行(但在 运行ner 的配置中设置了限制)。
您应该首先添加 - 作为顶级条目:
stages:
- prepare
- test
然后将这两个作业修改为:
connect:
stage: prepare
(...)
dev:
stage: test
(...)
第一阶段(准备)的作业将并行执行,然后是第二阶段(测试)的作业将并行执行等
似乎通过 apt-get 安装 mysql-client,并结合脚本有帮助。这是我现在的 .gitlab-ci.yml 。建立传递。
variables:
MYSQL_ROOT_PASSWORD: "password"
dev:
image: java:openjdk-8
services:
- mariadb
script:
- apt-get update && apt-get --assume-yes install mysql-client
- 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"
- ./gradlew assemble check --info
我正在尝试进行 gitlab-ci 构建,但我在 mysql 设置部分遇到了问题。当我提交时,mysql 脚本似乎 运行 OK,但是应用程序构建在连接到数据库时失败。我在这里错过了什么?
.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
首先确保仔细阅读文档中的 "What is service" 和 "How is service linked to the build" 部分:http://docs.gitlab.com/ce/ci/docker/using_docker_images.html#what-is-service
在您的配置中,您将在这两行中启动 mysql 服务:
services:
- mysql
多亏了这个,在你的构建容器中你可以使用一个 mysql 服务,它可以通过主机 [=65= 在标准端口上使用].
这里:
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 图像 开始的容器中开始新构建 并在 本地 准备数据库状态! None 这些命令甚至触及您的 mysql 服务。
你应该 运行 容器内的 connect 作业而不是这个,该容器将有一个 mysql 客户端(也可以是这个mysql 一个),但是 运行 主机上的所有命令 mysql 而不是主机 localhost.
第二件事是你在一个阶段 运行ning 这两个工作 - connect 和 dev,所以他们将并行执行(但在 运行ner 的配置中设置了限制)。
您应该首先添加 - 作为顶级条目:
stages:
- prepare
- test
然后将这两个作业修改为:
connect:
stage: prepare
(...)
dev:
stage: test
(...)
第一阶段(准备)的作业将并行执行,然后是第二阶段(测试)的作业将并行执行等
似乎通过 apt-get 安装 mysql-client,并结合脚本有帮助。这是我现在的 .gitlab-ci.yml 。建立传递。
variables:
MYSQL_ROOT_PASSWORD: "password"
dev:
image: java:openjdk-8
services:
- mariadb
script:
- apt-get update && apt-get --assume-yes install mysql-client
- 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"
- ./gradlew assemble check --info