在连接到SVN存储库之前,我们可以在Jenkins中使用隧道



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

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

之后,我能够访问我localhost的端口9898的存储库。在创建Jenkins作业时,我可以将SVN URL作为localhost提供,Jenkins可以访问存储库,但是我仍然必须在服务器上手动创建隧道。有什么办法可以与Jenkins自动化,以便如果对隧道的访问失败,那么它可以进行隧道,然后重试?

我正在使用Jenkins 1.487

您需要一个插件,例如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更新(无论是否有更改),然后让作业构建它。然后,您可以使用常规的构建操作,它可以检测到实际上是否有新的结帐,然后才能进行实际构建步骤。

使用脚本启动和詹金斯作业结束时,您的隧道在服务器上是否保持打开状态?

如果是这样,则需要进行SVN轮询,您可以想到2种可能的解决方案:

  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

我在上述答案中添加了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"时,首先创建了隧道,更新并完成了构建。但是,不幸的是,在这种情况下,民意调查不起作用

最新更新