我下面有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管道时,它就变成了 Realm ,因为我认为gitlab无法与docker-compose运行的服务一起使用。
该错误表明mysql拒绝连接。
我需要这种连接,因为由代码接收编写的测试将测试我的模型和api操作。
我希望每当有人 push 分支机构时都对其进行测试,如果通过则只是将其部署到测试服务器中,而将其部署在生产服务器上。
在gitlab ci / cd中运行测试然后将其部署到服务器中的最佳方法是什么?
最佳答案
您应该使用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
我不知道您的应用程序,因此您可能需要进行一些调整。
有关更多信息:
关于docker - 如何使用gitlab ci测试和部署我的php应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669615/