bash脚本在多个docker-compose环境中运行测试
问题描述:
需要一些帮助来编写脚本来自动完成在Windows主机上的多个docker-compose环境中运行测试的相当简单的过程。bash脚本在多个docker-compose环境中运行测试
这是手动过程,我想自动化:
- 打开搬运工快速启动终端
- 设置3个相同的环境中:
docker-compose -p test1 up -d && docker-compose -p test2 up -d && docker-compose -p test3 up -d
- 打开2个搬运工终端,然后运行的一个在以下各个:
docker-compose-run -p test1 app ./node_modules/gulp/bin/gulp.js cuc-reports
docker-compose-run -p test2 app ./node_modules/gulp/bin/gulp.js cuc-not-reports1
docker-compose-run -p test3 app ./node_modules/gulp/bin/gulp.js cuc-not-reports2
- 当所有测试完成后,推倒:
docker-compose -p test1 down && docker-compose -p test2 down && docker-compose -p test3 down
我被堵在开始的时候漂亮多了。我可以打开泊坞窗机外壳,但不能让它改变目录,以执行步骤2.我试过如下:
#!/bin/bash
src=$PWD/../../
cd "C:\Program Files\Docker Toolbox"
"C:\Program Files\Git\bin\bash.exe" --login -i "C:\Program Files\Docker Toolbox\start.sh" cd $src && docker-compose -p test1 up -d && docker-compose -p test2 up -d && docker-compose -p test3 up -d
然而,“CD $ SRC”不执行这将导致后续命令失败。
试图概括我想我需要为了运行此脚本,我会总结如下的事情:我怎样才能传递命令进行一次泊坞窗壳载荷执行(如
- “CD ...“)?
- 如何从根shell打开多个独立(docker)shell并等待它们完成执行其命令?
我打算在Windows上编写git-bash的脚本,这是我的首选项,但也欢迎windows批处理脚本的建议。
答
嗯,最后并没有那么难。相当混乱,我相信它可以改进,但它做我想要的(最终,我运行2个码头环境不是3,因为它使用4个核心性能更好)。如果有人对我所有这些奇怪的东西感兴趣,只要问一下,我会找到一些资源。请记住,此答案适用于Windows:
#!/bin/bash
cd `dirname $0`/../../
start bash -c 'docker-compose -p test1 up -d; sleep 3s; docker exec -i $(docker-compose -p test1 ps ros | grep -m 1 ros | cut -d " " -f1) ./node_modules/gulp/bin/gulp.js cucumber1; docker-compose -p test1 down; bash'
start bash -c 'docker-compose -p test2 up -d; sleep 3s; docker exec -i $(docker-compose -p test2 ps ros | grep -m 1 ros | cut -d " " -f1) ./node_modules/gulp/bin/gulp.js cucumber2; docker-compose -p test2 down; bash'
sleep 5s
start bash -c "docker stats $(docker ps | awk '{if(NR>1) print $NF}')"