jenkins 问题处理
证书问题
jeniins 发布再maven 打包的时候遇到如下问题
解决:
原因就是访问https://build.shi.. 时候证书验证错误,需要把该网站的公钥证书添加到jre 中。
下载网站的证书
详细信息》复制到文件》下一步》base64..》保存本地,文件名例如为a.cert ,再上传到jenkins服务器上面 比如/tmp
找到证书存放路径, $JAVA_HOME/jre/lib/security/cacerts , changeit 是密钥库的默认密码。
keytool -import -alias taobao -file /tmp/a.cer -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
提示是否加入此密钥,输入:Y即可。
其他命令
//删除cacerts中指定名称的证书: keytool -delete -alias taobao -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit //查看cacerts中的证书列表: keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
注意可能需要清除workspace 下面的项目目录才能成功。
编译后失败的缓存问题
maven 报错信息
删除本地缓存里面的配置
rm -f /root/.m2/repository/com/xx/asset/xx/1.0.3/*.lastUpdated
Job 构建失败
Build step 'Execute shell' marked build as failure
现象:
当在jenkins 里面执行脚本的时候,命令并没有执行失败,但是jenkins 标记为失败状态,例如执行git push ,当前仓库已经与远程仓库保持一致了,没有要提交推送的代码了,此时再推送提示:nothing to commit, working directory clean ,但是单独执行此命令,shell 返回的是状态码“0” ,而jenkins 只是把非0 视为失败
解决:
在jenkins shell 里面添加:#!/bin/bash -x
原因分析
在jenkins里面执行的脚本,jenkins 默认的脚本参数是 -xe , 其中-x 表示调试模式,把每条执行命令打印出来,而-e使shell立即退出某些东西会返回一个错误(这通常在shell脚本中用作故障保护机制),也就是回返回非0 状态码,由此导致jenkins job执行失败。所以可以通过添加自定义的shell 参数来覆盖jenkins 默认参数-e。
但是后续发现如果这么做,有些本应该返回非0状态码的执行失败的命令也被jenkins 忽略了,job 不会显示失败