0

在 Jenkins 工作中,我设置了两个存储库:一个本地存储库和一个远程存储库。计划是定期检查远程,当它检测到变化时,推送到本地,然后在自定义分布式测试系统上控制测试并将结果返回给 Jenkins。

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

我是如何配置工作的:

  • 回购网址:/path/to/local
  • 姓名:localrepo
  • 回购网址:gitolite@someserver:therepo
  • 姓名:origin

并且生成的.git/config仅包含:

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

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

4

1 回答 1

0

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

当您使用远程 git 存储库配置 Jenkins 作业时,您可以让 Jenkins 轮询更改,或者您可以安排将通知传递给 Jenkins,例如从 git hook 脚本。

当 Jenkins 检测到您告诉它构建的任何分支发生变化时,它将更新 Jenkins 工作区中的 git 存储库,然后准备执行作业配置的构建步骤。

工作区中的 git repo 由 Jenkins git 插件以某种非标准方式管理。您没有准确指定 git 中的文件如何发送到自定义分布式测试系统,因此我无法推测 Jenkins 工作区是否可以按原样使用,或者是否需要做进一步的事情。

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

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

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

另一种选择是忘记轮询,只需从远程 git repo 的 post-commit-hook 脚本触发新的工作构建。这将允许您在作业配置中为 SCM 指定“无”并完全控制本地 repo 管理。

我自己可能会检查是否可以与 Jenkins git 插件合作并按原样使用本地 git repo。git 插件为您提供了一些不错的东西,例如每个构建中的更改列表,如果作业没有 SCM,您将不会拥有这些内容。

于 2012-07-03T20:50:10.303 回答