如何在推送至master时使用Git触发器制作Jenkins CI?

如何在推送至master时使用Git触发器制作Jenkins CI?,git,github,jenkins,Git,Github,Jenkins,我正在尝试使用GitHub为一个项目设置Jenkins ci。我已经为Jenkins安装了合适的插件。我希望Jenkins只在项目中有人向master发起请求时才运行构建脚本。到目前为止,我已经能够设置它,以便在任何人推到任何地方的任何时候都会触发构建,但这太广泛了。我用Git上的post receive服务钩子实现了这一点 我读过Jenkins维基和一些教程,但是缺少这个特别的细节。。。这可能与投票有关吗?或者应该在Git端完成工作,以便Git仅在master更改时触发Jenkins?您需要指

我正在尝试使用GitHub为一个项目设置Jenkins ci。我已经为Jenkins安装了合适的插件。我希望Jenkins只在项目中有人向master发起请求时才运行构建脚本。到目前为止,我已经能够设置它,以便在任何人推到任何地方的任何时候都会触发构建,但这太广泛了。我用Git上的post receive服务钩子实现了这一点


我读过Jenkins维基和一些教程,但是缺少这个特别的细节。。。这可能与投票有关吗?或者应该在Git端完成工作,以便Git仅在
master
更改时触发Jenkins?

您需要指定分支。默认情况下,它会侦听任何内容。请参阅博客文章

从0.5版开始,Jenkins的GitHub插件可以。

更改Jenkins项目配置,通过轮询触发生成,而不是远程触发生成

Jenkins可以基于固定的内部地址或URL进行投票。如果没有对该分支进行更改,则要跳过生成的是后者。具体细节如下: 在里面实际上,您只需要选中“Poll SCM”选项,将schedule部分留空,并设置一个远程URL以点击JENKINS_URL/job/name/polling


一个问题:如果您有一个安全的Jenkins环境与
/build
不同,
/polling
URL需要身份验证。说明中有详细说明。例如,我有一个GitHub Post-Receive钩子指向
username:apiToken@JENKIS_URL/job/name/polling

与Git无关,但下面我将详细介绍Mercurial的Jenkins作业配置。它可能会帮助其他有类似问题的人

  • 安装URL触发器插件
  • 转到作业配置页面,选择轮询SCM选项。将该值设置为
    ***
  • 选中选项:
    [URLTrigger]-使用URL进行轮询。
    现在您可以选择一些选项,如修改日期更改、URL内容等
  • 在选项中,选择URL内容更改,选择第一个选项–
    监视内容更改
  • 保存更改
  • 现在,通过一些测试签入触发对Mercurial存储库的一些更改

    查看Jenkins作业现在是否通过检测SCM更改来运行。当由于Mercurial更改而运行构建时,您将看到由SCM更改启动的文本
    。否则,手动启动它的用户。

    正如gezzed在其评论中所指出的,同时还有一个很好的解决方案(如中所述):

    • 将Jenkins作业的生成触发器设置为轮询SCM,但不要指定计划

    • 创建GitHub post接收触发器以通知URL

      http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
      
      http://yourserver/jenkins/git/notifyCommit?url=?token=
      
    • 这将触发轮询指定Git存储库的所有生成

    • 但是,轮询实际上检查是否有任何内容被推送到已使用的分支

    它工作得很好。

    我希望这有助于:

    只需要使用curl,使用Git提供的Git钩子触发Jenkins作业

    命令
    curlhttp://localhost:8080/job/someJob/build?delay=0sec
    可以运行Jenkins作业,其中
    someJob
    是Jenkins作业的名称

    在隐藏的.git文件夹中搜索“hooks”文件夹。将“post commit.sample”文件重命名为“post commit”。用记事本打开它,删除“:Nothing”行并将上面的命令粘贴到其中


    就这样。无论何时进行提交,Git都会触发文件中定义的提交后命令。

    对于GitLab,请使用以下步骤:

  • 转到项目的设置→ 网钩
  • 从Jenkins项目中输入“Build Now”URL作为推送事件URL:

    http://server.com/jenkins/job/project_name/build?delay=0sec
    例如

  • 单击
    addwebhook
    ,然后单击
    testhook

  • 然后,每当您提交到存储库时,就会触发web钩子并创建一个构建。确保在每次生成之前将Jenkins workspace设置为“删除工作区”,以便获得新代码的新副本。

    使用pull request builder插件:


    这真的很简单。然后,您可以设置GitHub webhooks以触发构建。

    在代码从Git命令/GUI推送到存储库后,继续与Jenkins集成:

  • 在Jenkins中创建一个只有作业名称的作业,并选择项目自由式的类型。单击“确定”。下一页没有添加任何内容-只需单击“保存”
  • 转到您的本地Git存储库,在那里您有源代码,并导航到
    .Git/hooks
    文件夹
  • hooks
    文件夹包含少量文件。检查“post-commit”。如果不存在,则创建一个不带文件扩展名的文件“提交后”:

    C:\work\test\\.git\hooks\post-commit
    
  • 使用以下命令编辑“提交后”文件。确保它存在于本地源代码文件夹中

    curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
    
    例如:

    curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
    
    五,

    用户名
    :詹金斯用户名

    jobName
    :生成的作业名称

    apiToken
    :要获取API令牌,请转到Jenkins用户页面(界面右上角)。可在页面左侧的“配置”菜单中找到:“显示API令牌”

  • 对源代码进行更改并将代码提交到存储库

  • 你的工作,
    http://localhost:8080/jenkins/job/Gitcommittest/
    ,应该在建筑中

  • 可以配置过滤器来实现这一点

    当配置为

    • 名为
      ref
      的变量和表达式
      $.ref
    • 带有文本
      $ref
      和过滤器表达式的过滤器,如
      ^refs/heads/master$
    然后,每次推送到
    主机
    ,该作业都会触发。没有投票

    stage {
        when { 
            expression { 
                branch 'develop'
            }
        }
    }
    
    gituser@me:~/project.git/hooks$ pwd
    /home/gituser/project.git/hooks
    gituser@me:~/project.git/hooks$ cat update
    #!/bin/sh
    echo "XXX from  update file"
    curl -u admin:11f778f9f2c4d1e237d60f479974e3dae9 -X POST http://localhost:8080/job/job4_pullsrc_buildcontainer/build?token=11f778f9f2c4d1e237d60f479974e3dae9
    
    exit 0
    gituser@me:~/project.git/hooks$