gitlab-ci docker executor |如何设置mysql服务?

时间:2016-05-24 01:45:36

标签: mysql spring continuous-integration gitlab gitlab-ci

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

.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

2 个答案:

答案 0 :(得分:4)

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

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

services:
  - mysql

多亏了你的构建容器,你可以使用 mysql 服务,该服务可以通过hostame 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 上的所有命令。

第二件事是您在一个阶段中运行这两个作业 - connect dev ,因此它们将并行执行(但是在跑步者的配置)。

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

stages:
  - prepare
  - test

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

connect:
  stage: prepare
  (...)

dev:
  stage: test
  (...)

在第一阶段(准备)的作业将并行执行后,第二阶段的作业( test )将并行执行。< / p>

答案 1 :(得分:1)

似乎通过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