GitLab工作停滞

时间:2019-07-03 01:48:19

标签: mysql shell gitlab-ci

目前,我在GitLab管道中有一份工作,其主要目的是在继续进行管道的下一阶段之前先验证MySQL语句(开发人员更改)。

为此,我使用了经过一些修改的MySQL官方docker镜像(不再需要root密码)。正在验证的脚本将在MySQL Shell上执行。这样做时,如果脚本中有错误,则作业将暂停,而不会继续进行并最终超时。

这是我的工作:

Validate branch MySQL DB image:
  stage: validate_branch_db_image
  image: registry.gitlab.com/some-path/mysql-validator

  script:
    - echo "Validating MySQL image for branch ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME}"

    - service mysql start
    - mysql < schema/create-database-schema.sql

    - echo "Validation of MySQL image for branch ${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} is successful"
    - service mysql stop

  only:
    refs:
     - merge_requests

注意:我必须手动启动MySQL服务,因为该图像被用作作业的执行上下文。

mysql < schema/create-database-schema.sql行由于语法错误而失败时,作业将停顿。是什么原因造成的?

我不确定这是否是验证SQL脚本的最佳方法。还请告知是否有更好的方法来实现这一目标。

1 个答案:

答案 0 :(得分:0)

我建议尝试使用官方的GitLab CI服务方法来运行MySQL服务器。
您无需自己启动\停止\管理MySQL。

查看文档:

示例:

services:
- mysql

variables:
  # Configure mysql service (https://hub.docker.com/_/mysql/)
  MYSQL_DATABASE: hello_world_test
  MYSQL_ROOT_PASSWORD: mysql

connect:
  image: mysql
  script:
  - echo "SELECT 'OK';" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"