Git 仅当在存储库中发现更改时,才定期构建项目

Git 仅当在存储库中发现更改时,才定期构建项目,git,continuous-integration,jenkins,sonarqube,Git,Continuous Integration,Jenkins,Sonarqube,我已激活并正在运行以下设置: 带有Git和Sonar插件的Jenkins 一个jenkins作业(项目),每分钟轮询Git 一个jenkins作业(ProjectSonar),每24小时轮询一次git 两个作业共享相同的git存储库 这使我能够为每次提交构建项目,然后每天,只有当项目发生变化时,才运行Sonar分析 我最近设置了git存储库,以便在项目发生更改时向Jenkins发送通知,如所示。这会立即生成两个项目,但我只希望生成快速(project)作业。如果我将项目sonar移动到定期构

我已激活并正在运行以下设置:

  • 带有Git和Sonar插件的Jenkins
  • 一个jenkins作业(
    项目
    ),每分钟轮询Git
  • 一个jenkins作业(
    ProjectSonar
    ),每24小时轮询一次git
两个作业共享相同的git存储库

这使我能够为每次提交构建项目,然后每天,只有当项目发生变化时,才运行Sonar分析

我最近设置了git存储库,以便在项目发生更改时向Jenkins发送通知,如所示。这会立即生成两个项目,但我只希望生成快速(
project
)作业。如果我将
项目sonar
移动到定期构建的位置,即使没有代码更改,也会运行sonar分析,这是浪费

我怎样才能留住你

  • 项目的即时生成
    生成
  • 项目声纳的每日构建
    构建

我实现了一些非常类似于您在jenkins中使用“运行条件”插件所看到的东西


我将sonar作业作为轮询/构建/测试作业的后续作业,条件是它每天只运行一次。

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

  • 所有jenkins项目都以其git存储库命名(我使用gitolite)
  • 我只为基础版本远程激活了触发器版本
  • 我在gitolite中添加了一个
    post receive
    hook,它的作用类似于

    $CURL--silent--netrc--unsecure--connect timeout 2“$GIT\u REMOTE\u TRIGGER\u URL/$GL\u REPO/build?token=$JENKINS\u build\u token”>/dev/null

  • 安排所有声纳作业每24小时轮询SCM


  • 我有我的常规项目,还有一个叫做“每日项目”的项目,每天运行

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

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

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


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

    感谢指向插件的指针。你能分享一些关于你是如何实现每天运行一次条件的详细信息吗?很抱歉,花了几天时间才回到这个问题上。在复习时,我发现我上面的答案不太准确。我们有一个单独安排的工作,每天做一次构建,声纳工作是这项工作的后续工作。运行条件插件用于控制一周中的哪一天(我们周末不运行Sonar)。考虑到这一点,您可以设置一个单独的每日作业,轮询自上次运行以来的更改,并构建和测试是否有任何更改。使用构建状态条件将sonar作业作为运行条件插件下的一个构建步骤,我认为这会为您提供所需的控制。我很好奇您将作业从SCM轮询更改为推送通知的原因是什么?@aleung使构建响应时间更快