运行 "sudo su" 在 gitlab 管道中

Running "sudo su" within a gitlab pipeline

我已经在我的 gitlab 运行ner SSH 连接到的服务器上安装了一些软件,其中一个命令在执行 sudo su 之后需要 运行。如果我 运行 作为普通用户使用它,但在它前面加上 sudo - 它不起作用。我必须首先完全切换到 sudo 用户。

当我通过 SSH 连接到服务器并手动执行命令时,这工作正常。但是当我从管道中尝试时(下面的粗略代码):

my_script:
  stage: stage
  script:
    - ssh -o -i id_rsa -tt user@1.1.1.1 << EOF
    - sudo su
    - run_special_command <blah blah>
    - exit
    # above exits from the SSH. below should stop the pipeline
    - exit 0
    - EOF

我得到非常奇怪的输出,如下所示:

$ sudo su
[user@1.1.1.1 user]$ sudo su
echo $'\x1b[32;1m$ run_special_command <blah blah>\x1b[0;m'
run_special_command <blah blah>
echo $'\x1b[32;1m$ exit\x1b[0;m'
exit
echo $'\x1b[32;1m$ exit 0\x1b[0;m'
exit 0
echo $'\x1b[32;1m$ EOF\x1b[0;m'

我看到的是它甚至 运行 根本没有命令 - 我不明白为什么。

在这种情况下,您需要将脚本作为多行字符串放入 YAML 中。或者,将 shell 脚本提交到 repo 并执行它。

and one of the commands needs to be run after doing sudo su. If I run it as a regular user, but with sudo in front of it - it doesn't work.

作为旁注,您可以在命令前使用 sudo -E 而不是 sudo su。但是你所拥有的也应该适用于多行脚本。

MyJob:
  script: |
    ssh -o -i id_rsa -tt user@host << EOF
    sudo -E my_command
    EOF
    exit 0

或者,将您的脚本写入 shell 提交到存储库的脚本(设置了可执行权限),然后 运行 从您的作业中获取它:

MyJob:
  script: “my_script.sh”