jenkins已安装ssh插件为前提


1、在系统管理,系统配置中,新建ssh site;




jenkins shell配置执行 dockerfile jenkins执行shell脚本过程_shell




jenkins shell配置执行 dockerfile jenkins执行shell脚本过程_远程连接_02




jenkins shell配置执行 dockerfile jenkins执行shell脚本过程_tomcat_03


2、在构建工程中配置ssh site以及执行的脚本;





jenkins shell配置执行 dockerfile jenkins执行shell脚本过程_shell_04




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;