Распространенный случай в пайплайнах, как ребята пишут в LF:

deploy:
  stage: deploy
  script:
    - ssh ${USER}@${HOST} "docker pull"
    - ssh ${USER}@${HOST} "docker down"
    - ssh ${USER}@${HOST} "docker up -d"
    - ssh ${USER}@${HOST} "....."

То есть на каждую команду, создается отдельная SSH-сессия. В большинстве случаев у тебя всё будет работать, но порой можно наступить на грабли.

На сервере могут быть установлены лимиты в ssh_configMaxSessions, а плюсом еще работает Fail2ban или нечто подобное.

И по итогу пайплайн будет вечно делать хуйню, внезапно падать и т.п.

Что делать?

Передать команды в рамках одной сессии.

Например, так:

script:
  - |
      ssh ${USER}@${HOST} << EOF
      docker pull ...
      docker down ...
      docker up -d ...
      ...
    EOF

Либо пропихать так:

script:
  - ssh ${USER}@${HOST} "docker pull ...; docker down ...; ..."
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Но предпочтительнее первый вариант, он консистентный и более читаемый.

Учись сразу делать нормально и учитывать такие моменты.

Ну и с праздником тебя и твоих ребятишек!