`
truemylife
  • 浏览: 230432 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

jenkins发布对linux动态库加载影响

阅读更多

     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使用手册

    1. **系统要求**:Jenkins 可运行于多种操作系统,包括 Windows、Linux 和 MacOS 等。确保你的系统满足最低硬件和软件需求。 2. **安装**:通过官方网站下载对应操作系统的安装包,按照指示进行安装。对于 Linux ...

    Jenkins用户手册

    - **动态加载库(Dynamically Loading Libraries)。** 允许在运行时加载额外的库,为Pipeline提供更多的功能。 - **库版本和检索方法。** 定义如何管理和检索共享库的版本。 - **编写库。** 创建自定义的Pipeline...

    Jenkins+ansible自动部署

    - 添加动态参数,例如从 Git 获取分支列表。 ```groovy def getTags = "git ls-remote -h git@gitlab.ihaozhuo.com:Java_Service/YJK-Java.git".execute() getTags.text.readLines().collect{ it.split()[1]....

    node-jenkins-api库研究.pdf

    通过对`node-jenkins-api`库的研究,我们可以发现它不仅提供了与Jenkins API交互的功能,还通过一系列标准化的配置文件确保了项目的可维护性和可扩展性。这些配置文件不仅有助于提高开发效率,还能保证代码质量和...

    Building_Embedded_Linux_Systems.zip_embedded linux_linux

    7. **嵌入式Linux发行版**:如 BusyBox 和 Buildroot 是流行的工具,用于构建最小化的嵌入式Linux系统,包含基础的命令行工具和必要的库。 8. **电源管理**:在嵌入式设备中,电源管理是关键,包括动态电压频率调整...

    阿里云linux一键安装web环境

    阿里云Linux一键安装Web环境是针对想要快速在Linux服务器上部署Web服务的用户设计的工具。这个资源可能包含了一系列自动化脚本,旨在简化在Linux系统(可能是基于Debian或CentOS的发行版)上安装Apache、Nginx、PHP...

    ClearCase for Linux安装攻略

    《ClearCase for Linux安装攻略详解》 在Linux环境中部署IBM Rational ClearCase,一款强大的版本控制系统,对于软件开发团队而言至关重要。本文将详细阐述ClearCase在Linux系统中的安装过程,帮助你顺利搭建起协同...

    grafana-4.6.2.linux-x64.tar.gz

    3. **强大的仪表板构建器**:用户可以自定义面板,通过拖放操作添加图表,调整大小,设置时间范围,以及使用模板变量实现动态筛选。 4. **实时更新与警报**:Grafana可以实时刷新数据,当指标达到预设阈值时,可以...

    linux c&c++

    在Linux环境下进行C和C++编程是许多软件开发者的基础技能,因为Linux系统提供了丰富的开源工具、库和开发环境。本文将深入探讨Linux下C和C++编程的关键知识点,包括环境搭建、编译链接、调试技巧以及相关的编程实践...

    bootsharp-linux

    10. **单元测试和持续集成**: 了解如何在Linux环境中设置和运行单元测试,以及配置持续集成(CI)工具,如Jenkins或Travis CI,可以确保代码的质量和稳定性。 在实际应用中,你可能还需要掌握Git版本控制,使用如VS...

    JavaScript_一个现代的电子书管理器和阅读器,具有同步和备份能力,适用于Windows macOS Linux和Web

    1. **用户界面**:JavaScript能够创建响应式和动态的用户界面,允许用户轻松地浏览、搜索、添加和删除电子书。利用AJAX(Asynchronous JavaScript and XML)技术,可以实现实时更新,无需刷新页面。 2. **文件处理*...

    CMake教程.zip

    `add_executable`用于创建可执行程序,而`add_library`则用于创建静态或动态库。同时,`include_directories`帮助你指定头文件的搜索路径,`target_include_directories`则为特定目标指定头文件路径。 CMake中的...

    Apache JMeter (apache-jmeter-5.4.3.zip)

    Apache JMeter (apache-jmeter-5.4.3.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象...通过适用于 Maven、Gradle 和 Jenkins 的第3方开源库轻松实现持续集成。

    Apache JMeter (apache-jmeter-5.4.3.tgz)

    Apache JMeter (apache-jmeter-5.4.3.tgz)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象...通过适用于 Maven、Gradle 和 Jenkins 的第3方开源库轻松实现持续集成。

    Linux、Mac、Windows、Android、IOS等操作系统开发/调试的案例&项目

    - **调试工具**: 在Linux环境下,gdb是最常用的调试器之一,它可以对程序进行单步执行、设置断点等操作;Valgrind则是一款优秀的内存调试工具,能够检测内存泄漏等问题;strace则用于跟踪系统调用,帮助开发者理解...

    pi_server:在Ubuntu服务器中使用用户名。 在它下面会有子文件夹,如php,python和jenkins

    Ubuntu是一款基于Debian的Linux发行版,因其稳定性和安全性而被广泛用于服务器环境。安装Ubuntu服务器时,通常会选择最小化安装,仅包含基本系统工具,随后根据需求添加其他服务和软件。 “pi_server”可能是一个...

    Python库 | service-configuration-lib-2.1.0.tar.gz

    同时,该库可能也兼容流行的持续集成/持续部署(CI/CD)工具,如Jenkins、GitLab CI或Travis CI,以自动化服务配置的版本控制和部署流程。 总的来说,“service-configuration-lib-2.1.0”是一个专注于服务配置管理...

    云计算之阿里云的偏架构运维.pdf

    本文主要讲解了云计算之阿里云的偏架构运维,涵盖了API网关、Docker Compose、Jenkins、GitHub Pages、Hexo、Linux操作系统、Webpack编译原理、commitlint、perttier+eslint+husky、前端安全性问题、前端架构工作、...

Global site tag (gtag.js) - Google Analytics