目前,我在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脚本的最佳方法。还请告知是否有更好的方法来实现这一目标。
答案 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"