gpt4 book ai didi

bash - 如何在 gitlab ci 的构建脚本中使用 sudo?

转载 作者:行者123 更新时间:2023-11-29 08:44:40 24 4
gpt4 key购买 nike

当我想做一些需要 sudo 权限的事情时,构建过程卡住了,当 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/日志/nginx.pid)
  • 它正在挂断,没有任何反应(对我来说听起来像是交互式地询问密码)

最佳答案

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

授予sudo权限

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

$ sudo usermod -a -G sudo gitlab-runner

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

启动 sudo 编辑器

$ sudo visudo

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

gitlab-runner ALL=(ALL) NOPASSWD: ALL

Do not do this for gitlab runners that can be executed by untrusted users.

SSH runner

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

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

关于bash - 如何在 gitlab ci 的构建脚本中使用 sudo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19383887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com