0

在访问我的SVN存储库之前,我需要创建一个tunnel这样的第一个:

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

之后,我可以在9898我的localhost. 在创建 Jenkins 作业时,我可以提供 SVN url 作为localhost,并且 Jenkins 能够访问 repo,但我仍然需要在服务器上手动创建一个隧道。有什么方法可以让詹金斯自动化,这样如果对隧道的访问失败,那么它可以做隧道,然后再试一次?

我在用Jenkins 1.487

4

3 回答 3

1

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

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

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

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

于 2012-11-05T14:19:39.133 回答
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 更新(无论是否有变化),然后让工作构建它。然后,您可以在真正的构建步骤之前进行常规构建操作,以检测是否实际上有新的结帐。

于 2012-11-03T14:22:34.947 回答
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'时,首先创建隧道,更新签入并完成构建。但是,不幸的是,在这种情况下轮询不起作用

于 2012-11-05T10:55:07.473 回答