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

时间:2011-04-25 23:19:45

标签: git github jenkins

我正在尝试使用GitHub为一个项目设置Jenkins-ci。我已经使用适当的插件设置了Jenkins。我希望Jenkins只在项目中有人推动掌握时运行构建脚本。到目前为止,我已经能够设置它,以便在任何人推送到任何地方时都会触发构建,但这太宽泛了。我在Git上使用post-receive服务挂钩完成了这个。

我已经阅读了Jenkins wiki和一些教程,但是缺少这个特殊的细节......它可能与民意调查有关吗?或者应该在Git方面完成工作,以便Git只在master被更改时触发Jenkins?

13 个答案:

答案 0 :(得分:182)

正如 gezzed 在评论中已经指出的那样,同时有一个很好的解决方案(在 Polling must die: triggering Jenkins builds from a Git hook 中描述):

  • 将Jenkins作业的构建触发器设置为 Poll SCM ,但指定时间表。

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

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

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

效果很好。

答案 1 :(得分:32)

从版本0.5开始,Jenkins的GitHub插件可以trigger a build when a change is pushed to GitHub

答案 2 :(得分:9)

不是远程触发 builds ,而是通过轮询更改Jenkins项目配置以触发构建。

Jenkins可以根据固定的内部或URL进行轮询。如果没有针对该分支的更改,则后者是您要跳过构建的内容。确切的细节是 在the documentation。基本上你只需要检查“轮询SCM”选项,将计划部分留空,并设置一个远程URL以命中JENKINS_URL / job / name / polling。

如果您拥有安全的Jenkins环境,则与/build不同,/polling URL需要身份验证。说明here包含详细信息。例如,我有一个GitHub Post-Receive挂钩转到username:apiToken@JENKIS_URL/job/name/polling

答案 3 :(得分:4)

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

  1. 安装URL Trigger Plugin
  2. 转到作业配置页面并选择Poll SCM选项。将值设置为* * * * *
  3. 选中选项:[URLTrigger] - Poll with a URL。 现在,您可以选择一些选项,例如修改日期更改,URL内容等。
  4. 在选项中,选择网址内容更改,选择第一个选项 - Monitor change of content
  5. 保存更改。
  6. 现在,通过一些测试签到来触发对Mercurial存储库的一些更改。

    通过检测SCM更改,可以看到Jenkins作业现在正在运行。当由于Mercurial更改而运行构建时,您将看到文本Started by an SCM change。否则,手动启动它的用户。

答案 4 :(得分:3)

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

答案 5 :(得分:3)

我希望这会有所帮助: How to trigger a Jenkins build on Git commit

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

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

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

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

答案 6 :(得分:3)

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

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

    C:\work\test\\.git\hooks\post-commit
    
  4. 使用以下命令编辑“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
    

    5

    userName:Jenkins用户名

    jobName:构建的作业名称

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

  5. 在源代码中进行更改并将代码提交到存储库。

  6. 你的工作http://localhost:8080/jenkins/job/Gitcommittest/应该在建设。

答案 7 :(得分:2)

可以使用过滤器配置

Generic Webhook Trigger Plugin来实现此目的。

配置

  • 名为ref和表达式$.ref
  • 的变量
  • 包含文字$ref和过滤器表达式的过滤器,如^refs/heads/master$

然后,该作业将触发每次推送到master。没有民意调查。

您可能希望webhook中有更多值来实际执行构建。只需使用JSONPath添加更多变量即可选择所需的变量。

这里有一些用例:https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd

答案 8 :(得分:1)

在我目前的组织中,我们不是在master上执行此操作,而是在development和release /分支上执行此操作(我们正在使用Git Flow),以便生成快照构建。

由于我们使用的是多分支管道,因此我们在Jenkinsfile中使用 when {} 语法...

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

此博客文章中对此进行了详细说明: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline

答案 9 :(得分:1)

以上答案是正确的,但我在此向他们是新手,以求简单

尤其是用于设置管道的构建触发器:

考虑您有两个github分支:1.master 2.dev 和Jenkinsfile(编写管道脚本的位置)以及每个分支上的其他文件

配置新的Pipeline项目(用于dev分支)

## 1。使用git-plugin和基于cron的方法进行代码集成 必备的git插件应已安装,并使用您的姓名和电子邮件进行配置

  

1.General(常规)部分。选中复选框-“此项目已参数化”,并添加Name-SBRANCH默认值-“ refs / remotes / origin / dev”   2.建立triggers.section.Check复选框-“ Poll SCM”并根据检查提交的需要安排时间,例如‘* / 1 * * * *'每分钟检查一次   3.管道定义部分。从SCM中选择-管道脚本->选择git-> addRepository URL->添加git凭证->选择高级   —>添加名称-原点,RefSpec-'+ refs / heads / dev:refs / remotes / origin / dev'   (dev是github分支)—>要构建的分支-$ {SBRANCH}(参数   引用1.st点的名称)->脚本路径-> Jenkinsfile->取消选中   轻量结帐   4.应用->保存

## 2。代码集成:github-plugin和webhook方法 先决条件应安装github插件并配置github服务器,如果不考虑以下配置,则应测试连接

在jenkins上使用帐户配置Github插件

GitHub部分,如果不存在,则添加Github服务器API URL:https://api.github.com凭证:添加具有值Personal Access Token(从您的github帐户中生成它-> settings)的秘密文本(点击添加按钮:选择键入秘密文本)。 >开发人员设置->个人访问令牌->添加令牌->检查范围->复制令牌)测试连接->检查它是否已连接到您的github帐户选中“管理钩子”复选框预先在小节中选择上一个“共享秘密”的凭据

如果未通过以下方式将Webhook添加到存储库中,则添加

1。转到Github存储库设置->添加Webhook->添加URL http://Public_IP:Jenkins_PORT/github-webhook/ 2.或者,如果您没有Public_IP,请使用ngrok。从命令./ngrok http 80(使用您的jenkins_port)安装,认证并获取公共ip,然后添加webhook —>添加URL http://Ngrok_IP/github-webhook/ 3.通过从webhook页面传递有效负载来测试它,并检查是否获得200状态。

如果您有Github Pull请求插件,请使用已发布的jenkins URL对其进行配置。

  

1。常规部分。选中复选框-“ Github项目”添加项目URL-(以“ .git /”结尾的github链接)   2.“常规”部分。选中复选框-“此项目已参数化”,然后添加Name-SBRANCH默认值-“ refs / remotes / origin / dev”   3.Build triggers.section.Check复选框-“ GitHub触发GITScm轮询的触发器”   4.Pipeline defn部分。从SCM中选择-Pipeline脚本->选择git-> addRepository URL->添加git凭证->选择高级->添加   名称-来源,RefSpec-'+ refs / heads / dev:refs / remotes / origin / dev'(dev   是github分支)—>要构建的分支-$ {SBRANCH}(参数名称   从参考1.st点开始)->脚本路径-> Jenkinsfile->取消选中   轻量结帐   5.应用->保存

答案 10 :(得分:0)

使用拉取请求构建器插件: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin

这非常简单。然后,您可以设置GitHub webhooks来触发构建。

答案 11 :(得分:0)

我对本地git服务器的解决方案: 转到本地git服务器的钩子目录,忽略现有的update.sample并创建一个名为“ update”的新文件,例如:

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$ 

echo语句将显示在您的git push结果下,可以从您的jenkins作业配置中获取令牌,浏览找到它。如果未调用文件“ update”,请尝试使用其他没有扩展名“ sample”的相同名称的文件。

这就是您所需要的

答案 12 :(得分:0)

  1. 管理Jenkins /配置系统/ GitHub服务器

  2. 在jenkins作业/ git凭证和Branch Specifier上(给出要查找推送的分支)

enter image description here

  1. github上的Webhook