jenkins发布应用时,对linux动态库的加载,有别于直接使用ssh连接到服务端的发布方式。原因还不是很明确,jenkins也是通过SSH的方式,使用与直接使用ssh登录服务发布应用时,使用同样的用户名,因此不可能是权限上的问题。我的猜想可能jenkins通过SSH链接的方式,可能直接跳过了某些bash相关初始化,因为从事后反证加载默认的动态库没有问题,只是在加载附加目录下的动态库时才出现无法正确加载动态库,有待进一步验证,但直接使用ssh连接并发布应用,可以正常加载附加目录下的动态库。
解决办法:把放在特殊位置的动态库拷贝到上述默认目录比如/lib(64)/下即可。
问题延伸:其实问题的解决是很容易的,但发现问题的过程有必要重提一下,因为本人的应用是一个java application(不需要中间件服务器如tomcat),使用jenkins发布并运行application,与直接发布效果一样,没有任何异常信息。但其中有一个功能点在jenkins下失效了,此功能点是java调用外部程序OpenOffice Server。
未发现问题时的源码片段:
pro = Runtime.getRuntime().exec(command.toString());
buffer = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while(buffer.readLine()!=null);
int rtstate = pro.waitFor();
return rtstate;
发现返回的rtstate是127,一头雾水了,一开始以为只要rtstate>=0都是正确的状态,但正确是只有rtstate为0是,才算正常调用并执行了外部程序。那127只是个错误代号,如何查看其详细报错信息呢?看以下源码片段:
pro = Runtime.getRuntime().exec(command.toString());
buffer = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while(buffer.readLine()!=null);
int rtstate = pro.waitFor();
if(rtstate!=0){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i=-1;
while((i=pro.getErrorStream().read())!=-1){
baos.write(i);
}
/** 粗糙的把出错打出来,有空进一步自定义Exception **/
System.out.println(baos.toString());
baos.close();
}
return rtstate;
加上这一段专门捕获错误信息后,很清楚的把错误输出到控制台:找不到xxx.so!,回到本文的开头,第一次看到这个错误信息真是意想不到,jenkins的发布还能引起这样的问题。
分享到:
相关推荐
jenkins 执行远程linux命令,jenkins 执行远程linux命令,jenkins 执行远程linux命令
Jenkins离线包 yarn/node/jdk/maven,包括32个常用离线插件
jenkins的war包,解压rar后将war包通过ssh复制到服务器中,在服务器中找到指定目录,然后java -jar jekins.war,即可运行jekins,然后通过服务器地址:9000就可以打开jekins.
linux下面部署Jenkins,war包,直接放到tomcat的webapp下运行即可
linux jenkins 原始配置config.xml
jenkins2.389Linux安装包
Linux 部署jenkinsLinux 部署jenkinsLinux 部署jenkins
linux离线安装jenkins插件安装包,包含jenkins.war, jenkins-plugins等hpi文件。
linux安装jenkins所需所有插件,apache-httpcomponents-client-4-api.hpi cloudbees-folder.hpi credentials.hpi display-url-api.hpi generic-webhook-trigger.hpi git-client.hpi git.hpi jsch.hpi junit.hpi ...
1.Jenkins安装步骤: https://www.jb51.net/article/176615.htm 2.修改密码 (1)编辑Jenkins的config.xml配置文件 vim /var/lib/jenkins/config.xml (在JENKINS_HOME目录下,每个人安装目录不同,所以改为自己的...
本插件库不可以单独使用,需要配合的`.jenkins`文件夹(该文件夹为Jenkins启动时自动生成的)使用,具体使用步骤如下: 1,正常通过war包或者其他的方式启动Jenkins; 2,找到Jenkins生成的工作目录`.jenkins`,查看...
jenkins安装和自动发布相关流程,最近玩jenkins的一些笔记,如果有问题可以评论给我联系
配置linux环境下jenkins持续集成方法配置linux环境下jenkins持续集成方法配置linux环境下jenkins持续集成方法
配置linux环境下jenkins持续集成方法-工具,配置linux环境下jenkins持续集成方法-工具。
使用Jenkins进行Unity自动构建的环境搭建笔记
jenkins离线所需插件 包括各种自动化部署和插件
jenkins, Jenkins厨师 cookbook 开发库 cookbook 安装和配置 Jenkins CI主 & node slave 。 通过 jenkins-cli支持自动化的资源提供者,包括作业创建/更新。要求平台Debian 7 + ( 由于依赖关系,软件包安
2、启用Jenkins存储库。运行以下命令下载并导入GPG密钥 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo sudo rpm –import https://jenkins-ci.org/
Jenkins自动化部署获取svn二级目录,Jenkins部署教程和动态获取svn路径教程
2.jenkins收到发布命令 3.jenkins从SVN上把源代码download下来 4.jenkins根据你设置的mvn命令进行打包 5.jenkins把你打包的好的可执行jar工程通过SSHserver传输到服务器工作目录下 6.自动执行shell脚本启动项目...