20170912jenkins构建前执行远程shell脚本
jenkins已安装ssh插件为前提1、在系统管理,系统配置中,新建ssh site;2、在构建工程中配置ssh site以及执行的脚本;3、遇到的问题;1)root不开放远程连接,死活都不给,解决的办法使用kduser进行连接;2)kduser用户没办法直接执行tomcat-amp,因为tomcat-am
·
jenkins已安装ssh插件为前提
1、在系统管理,系统配置中,新建ssh site;
2、在构建工程中配置ssh site以及执行的脚本;
3、遇到的问题;
1)root不开放远程连接,死活都不给,解决的办法使用kduser进行连接;
2)kduser用户没办法直接执行tomcat-amp,因为tomcat-amp隶属于root;
tomcat-amp不能修改为kduser持有,因为tomcat-amp启动的进程只能是root;
tomcat-amp进程只能是root,是因为tomcat-amp进程会写东西到一个root持有的目录;
不能修改这个写入目录的路径,是为防止服务器磁盘爆掉。该写入目录是挂载路径,进程写入的东 西实际上是存储到了统一存储中;
不能修改该目录为其它用户持有,是因为挂载操作只能由root去mount,到此,该路已不通。好,请回头。
3)kduser用户是可以执行所属它的shell的;
4)该shell名为ampTomcatRestart.sh,在该脚本中执行tomcat-amp;
5)因tomcat-amp为root,所以ampTomcatRestart.sh中应以root权限执行tomcat-amp;
要root权限,有一个环节,那就是要密码。
第一时间想的方案是用交互式命令完成,如下:
spawn xxx
expect “xxx”
send “xxx”
遗憾告知expect not command。没事,yum install expect*,搞掂。
纠结从此时发生,spawn expect send已经写出花,没有效果。
不能证明是错,也不能证明是对。
时间啪啪啪,此路不通,请及时回头,请看6。
6)以root权限执行,一是直接用su root身份,二是sudo command。
5的交互式操作为的就是免密,好吧,是伪免;
但5已不通,于是考虑对sudo免密;对kduser用户配置sudo免密。该路顺畅到令人流泪,具体:
vi /etc/sudoers
增加一行 kduser ALL=(ALL:ALL) NOPASSWD ALL,强保存;
对kduser来说,免密无阻碍,完美。
7)ampTomcatRestart.sh已可以root权限执行tomcat-amp,好,兴冲冲在构建步骤中sh ampTomcatRestart.sh;
8)被告知,need sudo to try。
这就难理解了,ampTomcatRestart.sh是kduser的,我就是kduser,还让我sudo来run。好吧,强解释:脚本里面用了sudo的命令,你要,就给呗;
9)在构建步骤中sudo su ampTomcatRestart.sh;
10)又被告知,需在tty终端,才能使用sudo;
这个比较好解释,说sudo目前只能在tty端可使用,你配在jenkins端不好使。解决的办法如下:
vi /etc/sudoers
把Defaults requiretty注释掉;
11)万事具备,只欠重构一发;
12)哈,又被告知,root是不在sudoers file中的。
这个问题,出现的是最有含量的,以及最蹊跷的。按理说sudo的是kduser,但为什么又提示root不在sudoers file中呢,虽然root确实不在sudoers中。
那是因为构建工程的ssh site虽然配置的是kduser,但是这个kduser仅被用来决定是否有权限去access。真正sudo的,其实还是tomcat进程所属的root发出的。
13)解决的方法,把root也加到sudoers即可,参照6;
更多推荐
已为社区贡献1条内容
所有评论(0)