jenkins控制库连接-问题集
接上面两篇文章,记录下遇到的一些问题和解决方法
1、添加jenkins凭证
经常用到这个函数去获取远程机器的登录账号和密码
def GetRemoteServer(ip){ def remote = [:] remote.name = ip remote.host = ip remote.port = 自建数据库服务器的ssh端口 remote.allowAnyHosts = true //通过withCredentials,调用Jenkins证书管理中已保存的凭据,credentialsId需要填写,其他保持默认即可 withCredentials([usernamePassword(credentialsId: '事先配置在jenkins 的自建数据库服务器的账号密码凭据', passwordVariable: 'password', usernameVariable: 'userName')]) { remote.user = "${userName}" remote.password = "${password}" } return remote }
上面有个“事先配置在jenkins 的自建数据库服务器的账号密码凭据”,需要配置jenkins的证书管理,填完会返回一个ID,也就是 credentialsId
【系统管理】 ——》 【安全】 ——》 【Manage Credentials】——》全局凭据——》添加凭据
2、JAVA_HOME 找不到
话说,这个是历史遗留问题了,一直没去解决,体现在jenkins新建“构建自由风格的软件项目”上,war包拷贝到远程机器上,开启tomcat报错。这种情况不是每次都会出现,但一出现我就会加 export JAVA_HOME
这种方法有时能解决有时不行,比较头疼,试过在拷贝到的远程机器账号上,普通用户(.bashrc),全局配置文件(/etc/profile)加JAVA_HOME环境变量,也确认过jenkins机器上环境变量JAVA_HOME都是有配置的,但有时还是会抽风,今天顺带解决了,原来是jenkins ui 界面的全局属性里没有配环境变量,之前是空的。
解决效果图:
3、pipeline 报错:Host key verification failed
pipeline拷贝jar包到远程文件报错,其实我比较摒弃这种直接sshpss 接密码的方式传输,很不安全,下图这个也仅仅是验证猜想。
这个报错有几种方法解决。
方法一:
首先要搞清楚,这个复制的动作是运行jenkins的用户做的,网上说报错需要jenkins用户有”/bin/bash" 权限(/etc/passwd文件里),也就是下图红框部分改成”/bin/bash"
然后vim ~/.bash_profile 加一串东西,最后加载。如果sshpass不想明文传输密码,就要在jenkins用户生成密钥对,把公钥放到远程机器上。
方法二(推荐)
流水线语法 --- 不用给jenkins用户登录权限,不用配密钥对
(这个方法是小俊子提示我的)
点击进去,能根据在自用项目或者maven项目设置的步骤,转化为pipeline语法,当时给我转成sshPublisher这个方法,改了一下就能用了,所以前面文章会有这条:
sshPublisher(publishers: [sshPublisherDesc(configName: '自建数据库服务器在jenkins系统管理上的SSH Server Name', transfers: [sshTransfer(remoteDirectory: '$JAR_TMP_HOME', removePrefix: '项目目录/target', sourceFiles: '项目目录/target/构建出的jar包名-*.jar')])])
所以,不是俺自己手动写的,靠pipeline流水线语法转过来,然后改了关键字,哈哈哈~~~