35

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

バッシュで:

> 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-runnerSSH を使用してリモート ホストに接続するように を設定できます。これを構成して、sudo 権限を持つユーザーをリモートで使用し、そのユーザーを使用してビルドを実行します。リモート ホストは、gitlab ランナーが実行されているマシンと同じマシンにすることも、別のホストにすることもできます。

このビルド ユーザー アカウントには、引き続き sudo およびパスワードなしのアクセス許可が必要です。gitlab-runnerbuild ユーザーに置き換える以外は、以下の手順に従います。

于 2016-06-14T00:05:39.003 に答える