我在 CentOS 上运行最新版本的 Jenkins。在我的 Jenkins 作业中,我可以运行构建后步骤,并包含此命令,
sudo /bin/rm /usr/java/jboss/server/default/deploy/myclient-1.0.war
因错误而死亡
sudo: sorry, you must have a tty to run sudo
有没有办法重写上面的代码,通过 tty shell 运行命令?在我们的 /etc/sudoers 文件中,有以下行
Defaults requiretty
但是我们的系统管理员禁止我们将其注释掉。
答案1
如果/usr/java/jboss/server/default/deploy/myclient-1.0.war
必须由 root 删除,那么你可能做错了。我想不出该文件需要由 root 拥有的充分理由。
另一个选择是看看你的系统管理员对禁用该命令的 requiretty 有何看法。
Cmnd_Alias NOTTYCMD = /bin/rm /usr/java/jboss/server/default/deploy/myclient-1.0.war
Defaults!NOTTYCMD !requiretty
答案2
但是我们的系统管理员禁止我们将其注释掉。
他只能为用户禁用jenkins
:
Defaults:jenkins !requiretty
deploy 目录中的文件归具有
jboss
755 权限的用户所有,并且 Jenkins 在用户 下运行jenkins
。
或者使deploy
文件夹组可写并设置 SGID 位:
chmod -R g+w /usr/java/jboss/server/default/deploy/
chmod g+s /usr/java/jboss/server/default/deploy/
并将jenkins
用户添加到jboss
组:
usermod -a -G jboss jenkins
那么您可以删除/usr/java/jboss/server/default/deploy/myclient-1.0.war
而不使用sudo
。
答案3
当我尝试以 jboss 用户身份启动 jboss 时,我也遇到了这个问题。通过按以下方式更改文件 /etc/init.d/jboss 中的一行,解决了该问题:
之前: su - $JBOSS_USER -c "LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG" 2>&1 > $JBOSS_CONSOLE_LOG &
之后:su - $JBOSS_USER -c“LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG 2>&1 > $JBOSS_CONSOLE_LOG &”