【问题标题】:Jenkins - Configure Jenkins to poll changes in SCMJenkins - 配置 Jenkins 以轮询 SCM 中的更改
【发布时间】:2012-04-24 15:40:08
【问题描述】:

我正在使用 jenkins,当 svn 存储库发生更改时,我想运行 maven 目标。我附上了一张我当前配置的图片。

我知道每 5 分钟检查一次存储库很疯狂。我只想在有新变化时运行它,但我找不到方法。无论如何,它没有检查存储库。我做错了什么??

提前感谢

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    我认为这些天的最佳做法是H/5 * * * *,这意味着每 5 分钟使用一次散列因子,以避免所有作业在完全相同的时间开始。

    【讨论】:

    • 确实,Jenkins(两年后)现在会抛出以下警告 Spread load evenly by using ‘H/5 * * * *’ rather than ‘*/5 * * * *’
    • 是的,使用 H/5 * * * * 是避免错误“使用 'H/5 * * * *' 而不是 '*/5 * * * * 均匀分布负载”的最佳实践
    【解决方案2】:

    我认为你的 cron 不正确。根据您的描述,您可能需要将 cron 计划更改为

    */5 * * * *
    

    现在您在日程表中添加的内容意味着它将在每小时 5 点轮询 SCM。

    【讨论】:

    • 我还有其他问题,也许你可以帮助我:我在部署项目时遇到了身份验证问题。我不知道在哪里写凭据。任何线索?谢谢
    • 这是一个特定于网络服务器的问题,我无法真正回答
    • 嗨,Blanca,您可以检查 jenkins 用户的权限(可能需要另一个用户运行)。在windows上运行services.msc,找到jenkins项目,右键,属性->登录
    • 如此细微的变化带来了巨大的变化! (在 5 之前添加 */ 每 5 分钟而不是 5 分钟过去...)
    • 为什么它错了会得到这么多的赞成?值“*/5”是“0-59/5”的等值,即每小时 12 倍。
    【解决方案3】:

    这是一个老问题,我知道。但是,据我说,它缺少正确的答案。

    这里的实际/最佳工作流程是结合 SVN 的提交后挂钩,以便它仅在发出实际提交后触发 Jenkins 作业,而不是在任何其他情况下。这样可以避免在 SCM 系统上进行不必要的轮询。

    您可能会发现以下链接很有趣:

    如果我在 corp 的 SVN 服务器中进行设置,我会使用以下(经过审查的)脚本作为 subversion 服务器端的提交后挂钩:

    #!/bin/sh
    
    # POST-COMMIT HOOK
    
    REPOS="$1"
    REV="$2"
    #TXN_NAME="$3"
    LOGFILE=/var/log/xxx/svn/xxx.post-commit.log
    
    MSG=$(svnlook pg --revprop $REPOS svn:log -r$REV)
    JENK="http://jenkins.xxx.com:8080/job/xxx/job/xxx/buildWithParameters?token=xxx&username=xxx&cause=xxx+r$REV"
    JENKtest="http://jenkins.xxx.com:8080/view/all/job/xxx/job/xxxx/buildWithParameters?token=xxx&username=xxx&cause=xxx+r$REV"
    
    echo post-commit $* >> $LOGFILE 2>&1
    
    # trigger Jenkins job - xxx
    svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -qP "branches/xxx/xxx/Source"
    if test 0 -eq $? ; then
            echo $(date) - $REPOS - $REV: >> $LOGFILE
            svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -P "branches/xxx/xxx/Source" >> $LOGFILE 2>&1
            echo logmsg: $MSG >> $LOGFILE 2>&1
            echo curl -qs $JENK >> $LOGFILE 2>&1
            curl -qs $JENK >> $LOGFILE 2>&1
            echo -------- >> $LOGFILE
    fi
    
    # trigger Jenkins job - xxxx
    svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -qP "branches/xxx_TEST"
    if test 0 -eq $? ; then
            echo $(date) - $REPOS - $REV: >> $LOGFILE
            svnlook changed $REPOS -r $REV | cut -d' ' -f4 | grep -P "branches/xxx_TEST" >> $LOGFILE 2>&1
            echo logmsg: $MSG >> $LOGFILE 2>&1
            echo curl -qs $JENKtest >> $LOGFILE 2>&1
            curl -qs $JENKtest >> $LOGFILE 2>&1
            echo -------- >> $LOGFILE
    fi
    
    exit 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      相关资源
      最近更新 更多