[英]How to set an (environment) variable in the build script in Gitlab CI?
[英]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)
有幾種方法可以解決這個問題。
您可以向gitlab-runner
用戶授予 sudo 權限,因為該用戶正在執行構建腳本。
$ sudo usermod -a -G sudo gitlab-runner
您現在必須為gitlab-runner
用戶刪除sudo
的密碼限制。
啟動 sudo 編輯器
$ sudo visudo
現在將以下內容添加到文件底部
gitlab-runner ALL=(ALL) NOPASSWD: ALL
不要對可以由不受信任的用戶執行的 gitlab 運行程序執行此操作。
您可以將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.