GitLab Runner: выполнение кода на сервере после переключения пользователя без оболочки - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь настроить автоматическое развертывание c для проекта GitLab. Как только изменение объединено с веткой разработки, бегун должен войти на сервер, переключиться на другого пользователя, go в веб-каталог и выполнить git pull, а затем выполнить несколько других задач.

Если вы не знакомы с бегунами GitLab, это, по сути, просто временный сервер (docker образ), который выполняет все, что вам нужно. Я просто использую его для ввода sh на клиентский сервер для выполнения команд, которые я до сих пор выполнял вручную для каждого развертывания, или, по крайней мере, таков план.

Клиент-сервер - это Ubuntu, я могу только войдите как пользователь , для которого у меня есть sudo pw, а speci c -user владеет сайтом.

До сих пор я был в состоянии подключитесь к указанному серверу через s sh и настройте его так, чтобы пользователь мог переключиться на конкретный c -пользователь без необходимости ввода пароля sudo вручную. Но на этом все и заканчивается - я не могу фактически выполнить какие-либо команды как конкретный c -пользователь .

Вот мой текущий код (.gitlab-ci.yml) после много проб и ошибок и еще больше прибегая к помощи:

deploy_development:
  type: deploy
  environment:
    name: development
    url: https://website.com
  script:
    - ssh -tt user@server
      "sudo su - specific-user -s /bin/bash &&
      whoami &&
      cd htdocs &&
      git pull origin development"
  only:
    - development

Вывод runnter GitLab выглядит следующим образом:

$ ssh -tt user@server "sudo su - special-user -s /bin/bash && whoami && cd htdocs && git pull origin development"
Warning: Permanently added 'server, ip' (ECDSA) to the list of known hosts.
special-user@server:~$ 
...

С анимированными тремя точками, предположительно показывая, что терминал ждет ввода.

Примечание: если я вместо "s sh -tt" введу "s sh" или "s sh -t", я все еще пользователь даже после использования sudo su и, следовательно, не в состоянии выполнить какой-либо код как special-user .

Что мне нужно сделать, чтобы фактически выполнить мой код от имени другого пользователя?

1 Ответ

0 голосов
/ 16 апреля 2020

Как всегда - как только вы отправите его в переполнение стека, вы найдете ответ ..

Вот как я это решил:

script:
    - ssh -tt user@server
      "sudo -u special-user -H sh -c
      'cd ~/htdocs &&
      git pull origin development'"
...