使用脚本进行结帐时出现SVN错误

时间:2013-12-12 09:11:52

标签: bash shell svn jenkins

我在使用脚本从svn结帐时遇到错误。

**[Test] $ /bin/sh -xe /tmp/hudson8576425899836211909.sh
+ sh /cvsrx/rxapp/build_dir/Jenkins_Scripts/test.sh
Could not load program svn:
Could not load module /opt/freeware/lib/libssl.so.
    Dependent module /usr/lib/libcrypto.a(libcrypto.so.1.0.1) could not be loaded.
    Member libcrypto.so.1.0.1 is not found in archive 
Could not load module svn.
    Dependent module /opt/freeware/lib/libssl.so could not be loaded.
Could not load module .
Build step 'Execute shell' marked build as failure
Finished: FAILURE**

在test.sh中我只写了一行svn co / path到svn branch / 我正在进行一些测试,所以请不要问为什么不在build svn插件中使用jenkins。 在这里,我可以使用svn co / path to svn branch /在命令提示符下结帐 但是如果我在脚本中编写这个命令行并在jenkins的执行shell中运行则不行。 有什么帮助吗?

在AIX 7平台上使用jenkins。

我从/ usr / bin / svn到/ opt / freeware / bin / svn.SVN的软链接安装在/ opt / freeware / bin / svn .....默认情况下我做svn显示{{ 1}}但是当我删除那些软链接和导出的路径时,Jenkins根本没有识别SVN。/usr/bin/svn命令不显示任何安装的svn。詹金斯的PFB日志: `

which svn

3 个答案:

答案 0 :(得分:1)

重新安装Jenkins解决了我的问题!!这是由于服务器重启导致的插件损坏。 谢谢大家

答案 1 :(得分:0)

我还没有看到你在test.sh中使用的svn的确切命令,但会建议你在你的主叫线路上给出完整的SVN路径,例如/ usr / bin / svn co ..... 如果也可以在test.sh中输入导出PATH并导出LD_LIBRARY_PATH,将它们设置为值,这些值是上述.so文件的路径

答案 2 :(得分:0)

我看到你正在使用Hudson / Jenkins。在检查Subversion内外的内容时,Hudson和Jenkins在内部使用SVNKit。这意味着您的系统上可能未安装命令行svn客户端,或者它可能存在其他问题。

您的系统上还可能有多个svn客户端。例如,您可能在/usr/bin/svn下有一个,/usr/local/bin/svn下有一个。如果Subversion在命令行中运行,但在脚本中没有,那么当您从命令行执行时,可能会有一个不同的$PATH设置,而不是来自Hudson / Jenkins的脚本。您可以将行type svn添加到脚本(如果是BASH),以查看执行svn的位置。它可能与您从命令行使用的内容不同。将$PATH作为脚本的一部分打印出来可能也不错。

查看脚本正在执行的svn命令也很有帮助,并告诉我们您要执行的操作。您还可以在脚本中添加以下行:

PS4="\$LINE: "
set -xv

这些行将打开shell脚本调试,并帮助您找到脚本出现问题的位置。

这将为您提供一些关于脚本出现问题的线索。

回复

  

谢谢大卫。这里只存在1个svn路径(usr / bin / svn),但创建为软链接参见 - > cd / usr / bin / svn lrwxrwxrwx 1 root system 26 Jul 1 14:34 svn - > ../../opt/freeware/bin/svn。还创建了libs.so的soflink,参见 - > lrwxrwxrwx 1 root system 15 Sep 13 18:15 libssl.so - > libssl.so.1.0.1 ..........软链是否有可能造成这些问题?在请求删除这些软链接之前,我需要确认这些软链接会产生问题。

对于Unix,软链接并不罕见。例如,我在Mac上的/opt下安装了Ant,Grails,Maven,Subversion和许多其他软件包。为了不必在我的路径中包含这些中的每一个,我在/usr/local/bin下软链接这些程序的所有二进制文件。 <{1}}下约80%的程序仅仅是其他地方的软链接。

库软链接也很常见。这通常与版本编号有关。当程序请求库时,它可能包含也可能不包含库的版本号。所以,你的驱动器上有/usr/local/bin。这是 foo 的实际版本。但是,很少有程序会请求该特定版本。相反,他们可能只是要求他们需要foo的版本#2,或者只是说他们需要链接到foo。

要处理此问题,对于指定需要 foo 版本2的程序,您将libfoo-2.0.3.so软链接到libfoo2.0.3.so。然后,libfoo-2.so将与libfoo-2.so软链接。这样,无论如何都会调用libfoo。如果我安装了libfoo.so,我可以将链接更改为libfoo2.0.4.so以指向版本2.0.4而不是版本2.0.3,依赖于Foo的任何内容都将获得正确的版本。< / p>

相反,让我们看一下错误信息:

  

无法加载模块/opt/freeware/lib/libssl.so   无法加载从属模块 /usr/lib/libcrypto.a(libcrypto.so.1.0.1)。
  在存档

中找不到成员libcrypto.so.1.0.1

由于某种原因,它无法访问文件libfoo-2.so。这个文件在你机器上吗?它在/usr/lib/libcryto.a吗?如果没有,它位于何处?

那么,你从哪里获得这个版本的Subversion?为什么链接到/usr/lib目录?这是你系统的一部分吗?

可能是您系统上的Subversion不完整而且从未起作用。在Jenkins中,Subversion存储库由嵌入Jenkins / Hudson本身的SVNKit Jarfile访问,因此发现Subversion二进制文件不起作用并不奇怪。

您是否可以从命令行对Subversion执行任何操作?如果没有,您可能必须从Perzl安装新版本的Subversion,这是CollabNet指向Subversion AIX版本的地方。 (至少是1.8.4版本的最新版本。)

您甚至可能希望更改/opt/freeware/bin/处的软链接以指向更新的Subversion工作版本。