drone的坑也有一些。
下面的脚本只能重启docker容器,无法启动
docker容器。但是将shell脚本移动到.sh文件中,就正常了😱。
修改前的脚本是这样的。
- name: restart application by docker-compose
image: docker/compose:1.23.1
volumes:
- name: dockersock
path: /var/run/
- name: workbench_dir
path: /root/workbench_dir
commands:
- |
server_existed=$(docker-compose -f /drone/src/docs/docker-web/docker-compose.yml ps | grep 'java')
if [ "$server_existed" == "" ]; then
echo api-web up -d
docker-compose -f /drone/src/docs/docker-web/docker-compose.yml up -d
else
echo api-web restart
docker-compose -f /drone/src/docs/docker-web/docker-compose.yml restart
fi
并且,上面的脚本中把 /drone/src/docs/docker-web/docker-compose.yml 定义成变量dc_file,然后在里面使用,无论是${dc_file} $dc_file "${dc_file}" $$dc_file \$$dc_file
都不正常获取到值。修改成下面这样,就完全正常了。
- name: restart application by docker-compose
image: docker/compose:1.23.1
volumes:
- name: dockersock
path: /var/run/
- name: workbench_dir
path: /root/workbench_dir
commands:
- sh /drone/src/docs/scripts-for-drone-ci/ci-restart-docker.sh
ci-restart-docker.sh的内容如下:
#!/bin/bash
# if place the code in .drone.yml : only restart docker, cannot start it up
# but if place in an sh file: it works all.
dc_file=/drone/src/docs/docker-web/docker-compose.yml
log_text=$(docker-compose -f ${dc_file} ps | grep 'java')
echo "log_text=[$log_text]"
if [ "$log_text" == "" ]; then
docker-compose -f ${dc_file} up -d
else
docker-compose -f ${dc_file} restart
fi
# end