背景 :
我创建了一个名为myapp
with 的应用程序Spring-boot
。它由一个可自执行的 jar 组成,并且与 systemd 服务兼容。现在,我正尝试将其与 jenkins 集成。
我想要的是:
我希望詹金斯能够:
- 停止服务。
- 更换罐子。
- 重新启动服务。
问题:
到目前为止,只有 sudoers 可以启动/停止服务。我不希望 jenkins 成为 sudoer(这看起来很乱)。
当前结构:
我有一个用户,该myapp
用户有一个/home/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
我放置了一个 ssh 密钥,以便 jenkins 可以以 身份登录myapp@myserver
。
作为myapp
jar 的所有者,我认为可能有一个选项允许用户myapp
调用systemctl start/stop myapp
。实际上,我可以调用systemctl status myapp
但不能start/stop
(要求输入 root 密码)。
有什么建议么?
答案1
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