bash脚本在多个docker-compose环境中运行testing

需要一些帮助来编写一个脚本来自动执行一个相当简单的在Windows主机上的多个docker-compose环境下运行testing的过程。

这是我想要自动化的手动过程:

  1. 打开docker快速启动terminal
  2. 设置3个相同的环境: docker-compose -p test1 up -d && docker-compose -p test2 up -d && docker-compose -p test3 up -d
  3. 打开另外2个dockerterminal,然后在每个docker上运行下列其中一个:
    1. docker-compose-run -p test1 app ./node_modules/gulp/bin/gulp.js cuc-reports
    2. docker-compose-run -p test2 app ./node_modules/gulp/bin/gulp.js cuc-not-reports1
    3. docker-compose-run -p test3 app ./node_modules/gulp/bin/gulp.js cuc-not-reports2
  4. 当所有testing完成时,拆除: docker-compose -p test1 down && docker-compose -p test2 down && docker-compose -p test3 down

我一开始就卡住了。 我可以打开一个docker机器的shell,但无法得到它来改变目录,以执行第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”没有被执行,导致后续的命令失败。

为了推广我认为需要运行这个脚本的东西,我可以总结如下:

  • 一旦docker shell加载(如“cd …”),如何传递命令来执行?
  • 我怎么能从根shell打开多个独立的(docker)shell并等待它们完成执行它们的命令?

我打算在Windows上编写git-bash脚本,这是我的首选,但也欢迎windows批处理脚本的build议。

那么,最后并不难。 相当混乱,我敢肯定它可以改进,但它做我想要的(最终我运行2个docker环境不是3,因为它与4核心performance更好)。 如果任何人有兴趣在哪里我得到这个怪异的,只是问,我会站点一些来源。 记住这个答案是针对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}')"