Я настроил 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
я проверил, установлен ли докер, или нет:
#!/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
без выполнения других перечисленных ниже задач с sudo docker version
до конца.
В чем причина?