我对Docker和Docker编写新手。
我想使用docker compose来测试我的项目,如果测试没问题就发布它。如果测试失败,则根本不应发布应用程序。
这是我的docker-compose.yml
version: '3'
services:
mongodb:
image: mongo
test:
build:
context: .
dockerfile: Dockerfile.tests
links:
- mongodb
publish:
build:
context: .
dockerfile: Dockerfile.publish
?? # I want to say here that publish step is dependent to test.
之后,在我的testAndPublish.sh
文件中,我想说:
docker-compose up
if [ $? = 0 ]; then # If all the services succeed
....
else
....
fi
因此,如果测试或发布步骤失败,我不会推动它。
如何在docker-compose中构建类似于进程的步骤? 感谢。
答案 0 :(得分:0)
我认为你正试图用docker-compose
做一切,这是错误的方法。
当谈到CI(f.e.Travis或CircleCI)时,我的工作流程总是如下:
web
节点和database
节点travis.yml
或circle.yml
install
步骤,我总是把事情放在f.e. docker-compose run web npm install
和其他人test
步骤中,我会将docker-compose run web npm test
或类似docker-compose run web my-test-script.sh
的内容放入其中,这样您就会知道测试将在声明的docker环境中运行,如果它们失败此步骤失败,CI中的整个测试步骤失败,这是理想的deploy
步骤中,我将运行一些deploy.sh
脚本,该脚本将从Dockerfile(web
使用的那个)构建映像,并将其推送到Docker Hub。这样你的CI测试程序仍然依赖于特定的Docker环境,但是部署推送(它不需要Docker)与应用程序分开保存,这使得它更方便imho。