2012-07-02 54 views
0

在Jenkins的工作中,我设置了两个存储库:本地和远程。计划是定期检查远程设备,当它检测到更改时,将其推送到本地,然后从定制分布式测试系统获取对测试的控制并将结果返回给Jenkins。Jenkins不断重置工作区的.git/config

这一切都适用于一个问题。每次我重新启动Jenkins时,它会从作业工作区的.git/config文件中删除远程(或本地,取决于天气)回购,我必须手动进行编辑。

如何配置了工作:

  • 回购网址:/path/to/local
  • 名称:localrepo
  • 回购网址:[email protected]:therepo
  • 名称:origin

和产生.git/config仅包含:

[remote "localrepo"] 
    fetch = +refs/heads/*:refs/remotes/localrepo/* 
    url = /path/to/local 

对我做错了什么在这里的任何想法?

+0

我不能再发生这种情况。关闭它? – Kostas

回答

0

我假设您使用的是Jenkins git插件。我认为你需要让git插件控制本地git仓库,而不是在Jenkins后面进行任何手动配置。

当您使用远程git存储库配置Jenkins作业时,可以让詹金斯轮询更改,或者您可以安排将通知发送给Jenkins,例如,从一个git钩子脚本。

当詹金斯检测到任何你已经告诉它建立的分支的变化时,它会更新Jenkins工作区中的git repo,然后准备执行作业配置的构建步骤。

工作区中的git repo由Jenkins git插件以某种非标准方式管理。您没有完全指定git中的文件如何发送到自定义分布式测试系统,因此我无法推测Jenkins工作区是否可用于您,还是需要进一步处理。

要真正回答你的问题“我在做什么错”:你应该停止手工更改Jenkins工作区中本地git repo的配置,并让git插件管理它。如果这不是一个好的解决方案,你可能需要停止使用git插件。

由于您似乎愿意手动进行大量回购管理,因此我认为您需要git插件的唯一方法是轮询远程回购,即检测更改。

您可以使用例如https://wiki.jenkins-ci.org/display/JENKINS/script-scm,它允许您编写自定义脚本来管理轮询和结帐。

另一种选择是忘记轮询,并从远程git仓库的提交后脚本脚本中简单触发新作业。这将允许您在作业配置中为SCM指定“无”,并完全控制本地回购管理。

我自己可能会检查是否有可能与詹金斯的git插件合作,并使用本地的git回购原样。 git插件为您提供了一些不错的东西,比如每个构建中的更改列表,如果作业没有SCM,则不会有这些列表。

+0

这就是我所做的:(1)安装Jenkins和插件。 (2)成立一份新工作。 (3)设置新工作的git设置。 (4)启动新的构建。直到我发现我设置的两个遥控器(通过jenkins的配置)只有一个存在(获取轮询以进行更改)之前,我没有插手工作区。另一个遥控器由实际分发和运行规格的脚本使用。 – Kostas