背景:
Spring-boot
を使用してmyapp
というアプリを作成しました。自己実行可能なjarファイルで構成され、systemdサービスと互換性があります。今、私はそれをジェンキンスと統合しようとしています。
欲しいもの:
ジェンキンスができるようにしたい:
問題:
これまでは、sudoerのみがサービスを開始/停止できます。私はジェンキンスがsudoerであることを望まない(それは乱雑に見える)。
現在の構造:
/home/myapp
フォルダを持つユーザーmyapp
を持っています。生成されたjarはmyapp
と呼ばれ、/home/myapp
に配置されます。ユーザーmyapp
は、生成されたjarの所有者です。
myapp@myserver:~/backend$ ll
total 53900
drwxrwxr-x 2 myapp myapp 4096 Apr 25 17:09 ./
drwxr-xr-x 6 myapp myapp 4096 Apr 25 17:08 ../
-rw-rw-r-- 1 myapp myapp 511 Apr 20 16:13 application.properties
-rwxr--r-- 1 myapp myapp 55175294 Apr 20 19:06 backend-1.0-SNAPSHOT.jar*
lrwxrwxrwx 1 myapp myapp 24 Apr 20 19:20 myapp -> backend-1.0-SNAPSHOT.jar*
-rw-r--r-- 1 myapp myapp 179 Apr 20 19:26 myapp.service
Jenkinsがmyapp@myserver
としてログを記録できるように、sshキーを配置しました。
myapp
はjarの所有者なので、ユーザーmyapp
がsystemctl start/stop myapp
を呼び出すことができるオプションがあると思います。実際、systemctl status myapp
を呼び出すことはできますが、start/stop
を呼び出すことはできません(rootパスワードが要求されます)。
助言がありますか?
Sudo
は進むべき道です。新しいグループ(appadmin
など)を作成し、jenkins
ユーザーをそのグループに入れ、visudo
を使用して、コマンドの限定リストを含む新しいエントリを追加します。次に例を示します。
Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) MYAPP_CMNDS
appadmin
グループが最初にパスワードを入力せずにサービスを操作できるようにしたい場合(たとえば、ユーザーがSSHキーでのみ認証される場合に便利です)、
Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS