我已经设置了gitlab ci-cd,可以在其中调用脚本来在服务器上执行某些任务。
production:
stage: production
# when: manual
script:
- "which ssh-agent || ( apk update && apk add openssh-client )"
- ssh ubuntu@$DEPLOY_SERVER 'bash -s' < ./myscript.sh
only:
- master
现在在myscript.sh
内部,我检查是否已安装docker:
#!/bin/sh
set -e
which docker || ( sudo apt update -y && sudo apt install apt-transport-https ca-certificates curl software-properties-common -y && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" -y && sudo apt update -y && sudo apt-cache policy docker-ce && sudo apt install docker-ce )
sudo docker version
... continue performing the tasks
问题是,如果安装了docker,则会执行从sudo docker version
到脚本末尾的任务。
但是,如果未安装docker,即which docker
失败,则安装了必需的软件包,但是以下所有任务均无法执行,并且gitlab-cicd显示Job succeeded
而不执行{ {1}}结束。
原因是什么?