簡體   English   中英

如何在gitlab ci的構建腳本中使用sudo?

[英]How to use sudo in build script for gitlab ci?

當我想做一些需要 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)
  • 它掛斷了,沒有響應(對我來說聽起來就像它以交互方式要求輸入密碼)

有幾種方法可以解決這個問題。

授予sudo權限

您可以向gitlab-runner用戶授予 sudo 權限,因為該用戶正在執行構建腳本。

$ sudo usermod -a -G sudo gitlab-runner

您現在必須為gitlab-runner用戶刪除sudo的密碼限制。

啟動 sudo 編輯器

$ sudo visudo

現在將以下內容添加到文件底部

gitlab-runner ALL=(ALL) NOPASSWD: ALL

不要對可以由不受信任的用戶執行的 gitlab 運行程序執行此操作。

SSH 運行程序

您可以將gitlab-ci-runner配置為使用 SSH 連接到遠程主機。 您將其配置為遠程使用具有 sudo 權限的用戶,並使用該用戶執行構建。 遠程主機可以是 gitlab runner 正在執行的同一台機器,也可以是另一台主機。

此構建用戶帳戶仍需要具有 sudo 和無密碼權限。 按照以下說明進行操作,但將gitlab-runner替換為構建用戶。

正如 Reactgular 所寫的那樣,它對我有用。
但有一點澄清。 您必須在前面包含一個%符號
gitlab-runner ALL = (ALL) NOPASSWD: ALL
很長一段時間我都無法理解為什么它對我沒有幫助。 然后我放了百分比圖標,它起作用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM