仅在存储库中找到更改时才定期构建项目

时间:2012-08-12 11:28:32

标签: git continuous-integration jenkins sonarqube

我将以下设置激活并正常工作:

  • Jenkins与Git和Sonar插件
  • 每分钟调查一次Git的jenkins工作(project
  • 一个jenkins工作(project-sonar)每24小时轮询一次git

两个作业共享相同的git存储库。

这允许我为每个提交构建我的项目,然后每天,只有在项目发生变化时才运行声纳分析。

我最近设置了git存储库,根据Push notifications from repository在项目发生变化时向Jenkins发送通知。这会立即构建两个项目,但我只想构建快速(project)作业。如果我定期移动project-sonar,即使没有代码更改也会运行声纳分析,这很浪费。

我如何保留

  • project构建
  • 的即时构建
  • project-sonar build
  • 的每日构建

3 个答案:

答案 0 :(得分:3)

我使用jenkins的“运行条件”插件实现了非常类似的东西。 https://wiki.jenkins-ci.org/display/JENKINS/Run+Condition+Plugin

我使声纳工作成为轮询/构建/测试工作的后续工作,条件是每天只运行一次。

答案 1 :(得分:1)

我使用以下方法解决了这个问题:

  1. 所有jenkins项目都以他们的git存储库命名(我使用gitolite)
  2. 我只为基础版本
  3. 激活了远程触发器构建
  4. 我在gitolite中添加了一个post-receive钩子,其功能类似于

    $CURL --silent --netrc --insecure --connect-timeout 2 "$GIT_REMOTE_TRIGGER_URL/$GL_REPO/build?token=$JENKINS_BUILD_TOKEN" > /dev/null

  5. 计划所有声纳工作每24小时轮询SCM

答案 2 :(得分:0)

我有我的常规项目和第二个名为“每日项目”的项目,每天运行。

“Project”采用名为“RELEASE_TAG”的参数,该参数作为git部分中的分支说明符传递。 git插件还允许在此处指定标记。

当“project”启动时,它会将$ COMMIT保存到名为latest / $ PROJECT。$ BRANCH的文件中。 ($ BRANCH设置为$ RELEASE_TAG,除非$ RELEASE_TAG是标记,在这种情况下,$ BRANCH设置为“master”。)此文件由“project-daily”读取。

“Project-daily”是一个管道脚本。它没有存储库。为了节省空间,它运行“git clone --bare ...”,然后“git log -n 1 --format = format:%H daily”。它读取“latest / $ PROJECT.daily”以获取最新版本(尝试)。如果该提交与“git log”输出不同,则它调用“build job:'project'”,参数“RELEASE_TAG”设置为“daily”。

我们将工作代码推送到每日分支。在发布版本的时候,我们合并为master,标记它,然后使用标记(指定版本)手动运行“project”。