sta*_*tic 21 bash nginx gitlab
当我想要做一些需要sudo privelegies的东西时,构建过程会停滞不前,而且ps aux
对于那个命令来说,它会挂在列表中但什么都不做.
例如:
在buildscript中:
# stop nginx
echo "INFO: stopping nginx. pid [$(cat /opt/nginx/logs/nginx.pid)]"
sudo kill $(cat /opt/nginx/logs/nginx.pid)
Run Code Online (Sandbox Code Playgroud)
在gitlab ci输出控制台中:
INFO: stopping nginx. pid [2741]
kill $(cat /opt/nginx/logs/nginx.pid) # with a spinning wheel
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
所以:
sudo kill $(cat /opt/nginx/logs/nginx.pid)
要执行,而是sh -c sudo kill $(cat /opt/nginx/logs/nginx.pid)
Rea*_*lar 34
有几种方法可以解决这个问题.
您可以向gitlab-runner
用户授予sudo权限,因为这是执行构建脚本的人员.
$ sudo usermod -a -G sudo gitlab-runner
Run Code Online (Sandbox Code Playgroud)
现在,您可以删除密码,限制了sudo
该gitlab-runner
用户.
启动sudo编辑器
$ sudo visudo
Run Code Online (Sandbox Code Playgroud)
现在将以下内容添加到文件的底部
gitlab-runner ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)
不要为不受信任的用户执行的gitlab运行器执行此操作.
您可以配置gitlab-ci-runner
使用SSH连接到远程主机.您将其配置为远程使用具有sudo权限的用户,并使用该用户执行构建.远程主机可以是gitlab运行器正在执行的同一台机器,也可以是另一台主机.
此构建用户帐户仍需要具有sudo和无密码权限.按照以下说明进行操作,但gitlab-runner
使用构建用户进行替换.