我们可以在连接到svn存储库之前在jenkins中使用隧道吗?

时间:2012-11-02 15:49:20

标签: svn jenkins

在访问我的SVN存储库之前,我需要首先创建一个tunnel

ssh -L 9898:some_server.com:9898 user@another_server.com

之后,我可以访问9898端口localhost的存储库。在创建Jenkins作业时,我可以提供SVN URL作为localhost,Jenkins可以访问repo,但我仍然需要在服务器上手动创建隧道。有没有什么方法可以让我用Jenkins自动化,所以如果访问隧道失败,那么它可以进行隧道,然后再试一次?

我正在使用Jenkins 1.487

3 个答案:

答案 0 :(得分:1)

您需要一个像pre-scm-buildstep

这样的插件

这允许您在SVN结帐之前执行构建步骤 使用此功能,您可以在SVN结帐开始之前配置一个为您打开隧道的步骤。

但是,我怀疑SVN轮询在这种情况下会起作用。

<强>更新 在OP问题之后,这是另一种可能的解决方案:
https://wiki.jenkins-ci.org/display/JENKINS/ScriptTrigger+Plugin
我自己没有使用它,但它允许执行自定义shell脚本而不是常规轮询。您可以使用此自定义脚本首先建立隧道,然后轮询SVN更改。但是,您必须编写自己的脚本来进行实际的SVN轮询。像检查工作区修订版(svn info <LocalCheckOut>|grep Revision)并针对存储库(svn info <URL>|grep Revision)检查它一样简单。该插件允许您以cron格式安排民意调查的频率。

另一种懒惰的做法是使用此插件,建立隧道,进行SVN更新(是否有更改),然后让作业构建它。然后,您可以在真正的构建步骤之前进行常规的构建操作,以检测是否实际上有新的结帐。

答案 1 :(得分:1)

当您使用脚本启动隧道并且Jenkins作业结束时,您的隧道是否在服务器上保持打开状态?

如果是这样,并且需要SVN轮询,您可以想到两种可能的解决方案:

  1. 创建一个单独的作业,其唯一目的是运行上面的脚本。安排它每2-3分钟运行一次(或者隧道上通常的超时时间)。这样,希望您的服务器始终打开隧道。

  2. 在您的原始作业中,使用此插件的条件构建后步骤:
    https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task
    解析SVN签出失败的日志,如果找到:
    2.1运行脚本以建立隧道
    2.2用卷曲再次重新开始你的工作 2.3你可以选择使用text-finder插件将这些版本标记为“不稳定”而不是失败 https://wiki.jenkins-ci.org/display/JENKINS/Text-finder+Plugin

答案 2 :(得分:0)

我在上面的回答中添加了Slav指定的插件,并在Run buildstep before SCM runs部分编写了以下脚本:

instance_count=`ps x | grep -c 'ssh -L 9898:some_server.com:9898 user@another_server.com'`
if test $instance_count -lt 2 #two instances mean that one is of grep and other is the tunnel
then
    ssh -L 9898:some_server.com:9898 -t -t user@another_server.com&
fi

有了它,每当我点击“Build now”时,首先创建隧道,更新签入,然后构建完成。但是,不幸的是,在这种情况下,民意调查不起作用