我想在测试阶段使用
service
文件初始化我的 sql
。
test:
services:
- postgres:latest
variables:
POSTGRES_DB: test
stage: test
image: gliderlabs/herokuish:latest
script:
- setup_test_db
- cp -R . /tmp/app
- /bin/herokuish buildpack test
only:
- branches
except:
variables:
- $TEST_DISABLED
这是
auto devops
中的测试作业。docker-entrypoint
。docker-compose
中使用它的方式:
volumes:
- './src/sql:/docker-entrypoint-initdb.d'
这样,当
postres
图像启动时,我的架构就可以使用了。gitlab-ci.yml
?
目前 Gitlab CI 不支持
volumes
。
在测试过程中,您可以使用
docker-compose
来解决此问题,它具有 postgres
的服务来启动您的项目,您可以像平常一样安装它的卷
您可以将以下脚本添加到您的 gitlab ci 中以使其工作。
before_script:
- apt update && apt install -y postgresql
- export PGPASSWORD=$POSTGRES_PASSWORD
- psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -f ./src/sql
如果您只有一个简单的 SQL 固定装置(例如添加用户),您可以覆盖服务定义中的
command
,以将 SQL 注入服务容器的 /docker-entrypoint-initdb.d
test:
services:
- postgres:latest
command:
- /bin/sh
- -c
- >-
echo "$SOME_SQL" > /docker-entrypoint-initdb.d/init.sql &&
docker-entrypoint.sh # or whatever is called in that image
script:
- ...
如果您想知道,不...没有办法用存储库中的文件填充 $SOME_SQL 变量。因此,如果您可以摆脱此 YAML 中的内联变量、Gitlab UI 中的 CI 变量等,这只是一个可行的解决方法。