我在docker-compose.yml
以下
version: "2"
services:
api:
build:
context: .
dockerfile: ./build/dev/Dockerfile
container_name: "project-api"
volumes:
# 1. mount your workdir path
- .:/app
depends_on:
- mongodb
links:
- mongodb
- mysql
nginx:
image: nginx:1.10.3
container_name: "project-nginx"
ports:
- 80:80
restart: always
volumes:
- ./build/dev/nginx.conf:/etc/nginx/conf.d/default.conf
- .:/app
links:
- api
depends_on:
- api
mongodb:
container_name: "project-mongodb"
image: mongo:latest
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/dev/null
ports:
- "27018:27017"
command: mongod --smallfiles --logpath=/dev/null # --quiet
mysql:
container_name: "gamestore-mysql"
image: mysql:5.7.23
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: project_test
MYSQL_USER: user
MYSQL_PASSWORD: user
MYSQL_ROOT_PASSWORD: root
在.gitlab-ci.yml
之下
test:
stage: test
image: docker:latest
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
before_script:
- apk add --no-cache py-pip
- pip install docker-compose
script:
- docker-compose up -d
- docker-compose exec -T api ls -la
- docker-compose exec -T api composer install
- docker-compose exec -T api php core/init --env=Development --overwrite=y
- docker-compose exec -T api vendor/bin/codecept -c core/common run
- docker-compose exec -T api vendor/bin/codecept -c core/rest run
当我运行gitlab管道时,它已成为领域,因为我认为gitlab无法使用由docker-compose运行的服务。
错误表明mysql拒绝了连接。
我需要此连接,因为我通过代码接收编写的测试将测试我的模型和api操作。
每当有人按下分支时,我都希望对其进行测试;如果仅在开发部署中将其通过,则部署到测试服务器中,而在生产服务器中的主部署中则通过。
在gitlab ci / cd中运行测试然后将其部署到服务器中的最佳方法是什么?
答案 0 :(得分:1)
您应该使用GitLab CI services而不是docker-compose。
您必须选择一个映像作为主映像,在其中运行命令,而其他容器则作为服务。
遗憾的是,CI服务无法在gitlab中挂载文件,您必须能够使用env变量对其进行配置,或者您需要在其中包含文件的情况下创建自己的映像(可以执行CI阶段)
我建议您不要使用nginx,而应使用built-in php server进行测试。这是不可能的(您有spicifix nginx配置),您将需要构建自己的nginx映像,并在其中复制文件。
对于PHP(我假设docker-compose.yaml中的api服务),您还需要构建映像ahed或将命令从dockerfile复制到script
。
因此结果应类似于:
test:
stage: test
image: custom-php-image #build from ./build/dev/Dockerfile
services:
- name: mysql:5.7.23
alias: gamestore-mysql
- name: mongo:latest
alias: project-mongodb
command: mongod --smallfiles --logpath=/dev/null
variables:
MYSQL_DATABASE: project_test
MYSQL_USER: user
MYSQL_PASSWORD: user
MYSQL_ROOT_PASSWORD: root
MONGO_DATA_DIR: /data/db
MONGO_LOG_DIR: /dev/null
script:
- api ls -la
- composer install
- php core/init --env=Development --overwrite=y
- php -S localhost:8000 # You need to configure your built-in php server probably here
- vendor/bin/codecept -c core/common run
- vendor/bin/codecept -c core/rest run
我不了解您的应用,因此您可能需要进行一些调整。
更多信息