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

时间:2017-05-24 14:46:09

标签: bash batch-file docker docker-compose docker-machine

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

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

  1. 打开docker quickstart终端
  2. 设置3个相同的环境:docker-compose -p test1 up -d && docker-compose -p test2 up -d && docker-compose -p test3 up -d
  3. 再打开2个泊坞终端,然后在每个终端上运行以下某个终端:
    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. 当所有测试完成后,请拆除:docker-compose -p test1 down && docker-compose -p test2 down && docker-compose -p test3 down
  5. 我开始时几乎陷入困境。我可以打开一个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 ...”)?
    • 如何从root shell中打开多个独立(docker)shell并等待它们完成执行命令?

    我打算在Windows上编写git-bash的脚本,这是我的偏好,但也欢迎提出Windows批处理脚本的建议。

1 个答案:

答案 0 :(得分:0)

嗯,最后它并不是那么难。相当混乱,我确信它可以改进,但它做了我想要的(最终我运行2个docker环境而不是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}')"