在访问我的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
答案 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轮询,您可以想到两种可能的解决方案:
创建一个单独的作业,其唯一目的是运行上面的脚本。安排它每2-3分钟运行一次(或者隧道上通常的超时时间)。这样,希望您的服务器始终打开隧道。
在您的原始作业中,使用此插件的条件构建后步骤:
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
”时,首先创建隧道,更新签入,然后构建完成。但是,不幸的是,在这种情况下,民意调查不起作用