35

当我想做一些需要 sudo privelegies 的事情时,构建过程会卡住,而ps aux对于该命令,它会挂在列表中但什么也不做。

例如:

在构建脚本中:

# stop nginx
echo "INFO: stopping nginx. pid [$(cat /opt/nginx/logs/nginx.pid)]"
sudo kill $(cat /opt/nginx/logs/nginx.pid)

在 gitlab ci 输出控制台中:

INFO: stopping nginx. pid [2741]

kill $(cat /opt/nginx/logs/nginx.pid) # with a spinning wheel

在 bash 中:

> ps aux | grep nginx

root      6698  0.0  0.1  37628  1264 ?        Ss   19:25   0:00 nginx: master process /opt/nginx/sbin/nginx
nobody    6700  0.3  0.3  41776  3832 ?        S    19:25   0:00 nginx: worker process
kai   7015  0.0  0.0   4176   580 pts/0    S+   19:27   0:00 sh -c sudo kill $(cat /opt/nginx/logs/nginx.pid)
kai   7039  0.0  0.0   7828   844 pts/2    S+   19:27   0:00 grep nginx

所以:

  • 不是sudo kill $(cat /opt/nginx/logs/nginx.pid)要执行,而是sh -c sudo kill $(cat /opt/nginx/logs/nginx.pid)
  • 它挂断了,没有响应(对我来说听起来像是交互式地要求输入密码)
4

2 回答 2

69

有几种方法可以解决这个问题。

授予 sudo 权限

您可以向gitlab-runner用户授予 sudo 权限,因为这是执行构建脚本的人。

$ sudo usermod -a -G sudo gitlab-runner

您现在必须删除用户的密码sudo限制gitlab-runner

启动 sudo 编辑器

$ sudo visudo

现在将以下内容添加到文件底部

gitlab-runner ALL=(ALL) NOPASSWD: ALL

不要为不受信任的用户执行的 gitlab 运行器执行此操作。

SSH 亚军

您可以将其配置为gitlab-ci-runner使用 SSH 连接到远程主机。您将其配置为远程使用具有 sudo 权限的用户,并使用该用户执行构建。远程主机可以是执行 gitlab 运行程序的同一台机器,也可以是另一台主机。

此构建用户帐户仍需要具有 sudo 和无密码权限。请按照以下说明进行操作,但替换gitlab-runner为构建用户。

于 2016-06-14T00:05:39.003 回答
2

正如 Reactgular 所写的那样,它对我有用。
但有一点澄清。您必须%在前面加上一个标志
gitlab-runner ALL = (ALL) NOPASSWD: ALL
很长一段时间我都无法理解为什么它对我没有帮助。然后我放了百分比图标,它就起作用了。

于 2021-07-08T09:37:42.063 回答