我正在尝试使用GitHub为项目建立Jenkins-ci。我已经使用适当的插件设置了Jenkins。我希望Jenkins仅在项目上的某人推动掌握时才运行构建脚本。到目前为止,我已经能够对其进行设置,以便任何人将其推送到任何地方都可以触发构建,但这太广泛了。我已经使用Git上的接收后服务挂钩完成了此操作。
我已经阅读了詹金斯(Jenkins)Wiki和一些教程,但是缺少此特定细节...可能与轮询有关吗?还是应该在Git方面完成工作,以便Git仅在master
更改时触发Jenkins ?
我正在尝试使用GitHub为项目建立Jenkins-ci。我已经使用适当的插件设置了Jenkins。我希望Jenkins仅在项目上的某人推动掌握时才运行构建脚本。到目前为止,我已经能够对其进行设置,以便任何人将其推送到任何地方都可以触发构建,但这太广泛了。我已经使用Git上的接收后服务挂钩完成了此操作。
我已经阅读了詹金斯(Jenkins)Wiki和一些教程,但是缺少此特定细节...可能与轮询有关吗?还是应该在Git方面完成工作,以便Git仅在master
更改时触发Jenkins ?
Answers:
正如gezzed在他的评论中已经指出的,与此同时,有一个很好的解决方案(《轮询必须消亡:从Git钩子触发Jenkins构建》中描述):
将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存储库的构建。
但是,轮询实际上检查是否已将任何内容推送到使用的分支。
它完美地工作。
从0.5版开始,当将更改推送到GitHub时,Jenkins的GitHub插件可以触发构建。
无需远程触发构建,而是将Jenkins项目配置更改为通过轮询触发构建。
Jenkins可以基于固定内部或URL进行轮询。如果该分支没有更改,则后者是您要跳过构建的内容。详细信息在文档中。基本上,您只需要选中“轮询SCM”选项,将计划部分保留为空白,然后设置一个远程URL即可访问JENKINS_URL / job / name / polling。
如果您拥有安全的Jenkins环境/build
,那么一个陷阱就不同了,/polling
URL需要身份验证。此处的说明具有详细信息。例如,我有一个GitHub Post-Receive钩子转到username:apiToken@JENKIS_URL/job/name/polling
。
对于GitLab,请执行以下步骤:
从您的Jenkins项目中输入“立即构建” URL作为推送事件URL:
http://server.com/jenkins/job/project_name/build?delay=0sec
例如
Add Web Hook
然后test hook
然后,无论何时提交到存储库,都会触发Web挂钩并创建一个构建。确保将您的Jenkins工作区设置为,delete workspace before each build
以便获得新代码的新副本。
与Git无关,但是下面我将通过Mercurial来详细帮助Jenkins进行作业配置。它可能会帮助其他有类似问题的人。
Poll SCM
选项。将值设置为* * * * *
[URLTrigger] - Poll with a URL
。现在,您可以选择一些选项,例如修改日期更改,URL内容等。Monitor change of content
现在,通过一些测试签入触发对Mercurial存储库的一些更改。
看到Jenkins作业现在通过检测SCM更改来运行。当由于Mercurial更改而运行构建时,您将看到text Started by an SCM change
。否则,是手动启动它的用户。
我希望这会有所帮助:如何在Git commit上触发Jenkins构建
只需使用Git提供的Git钩子使用curl来触发Jenkins作业即可。
该命令curl http://localhost:8080/job/someJob/build?delay=0sec
可以运行Jenkins作业,这someJob
是Jenkins作业的名称。
在隐藏的.git文件夹中搜索“ hooks”文件夹。将“ post-commit.sample”文件重命名为“ post-commit”。使用记事本打开它,删除“:Nothing”行,然后将上面的命令粘贴到其中。
而已。每当执行提交时,Git都会触发文件中定义的提交后命令。
从Git命令/ GUI将代码推送到存储库后,与Jenkins进行持续集成:
.git/hooks
文件夹。该hooks
文件夹包含一些文件。检查“提交后”。如果不存在,则创建一个没有文件扩展名的“后提交”文件:
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
5,
userName
:Jenkins用户名
jobName
:构建的工作名称
apiToken
:要获取您的API令牌,请转到您的Jenkins用户页面(界面右上方)。它在页面左侧的“配置”菜单中可用:“显示API令牌”
在源代码中进行更改,并将代码提交到存储库。
您的工作http://localhost:8080/jenkins/job/Gitcommittest/
应该正在建立。
您需要指定分支。默认情况下,它听任何东西。请参阅博客文章Hudson:Git和Maven插件。
通用Webhook触发插件可以配置过滤器来实现。
当配置为
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
在我目前的组织中,我们不是在master上执行此操作,而是在开发和发布/分支上都执行此操作(我们正在使用Git Flow),以便生成快照构建。
当我们使用多分支管道时,我们使用when {}语法在Jenkinsfile中执行此操作...
stage {
when {
expression {
branch 'develop'
}
}
}
此博客文章中对此进行了详细说明:https : //jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline
上面的答案是正确的,但我在这里是为他们的新手而写的
特别是为管道设置构建触发器:
假设您有两个Github分支:1.master,2.dev和Jenkinsfile(编写管道脚本的位置),并且每个分支上都有其他文件
配置新的管道项目(针对dev分支)
## 1。使用git-plugin和基于cron的方法进行代码集成 先决条件应该安装git插件并使用您的姓名和电子邮件对其进行配置
## 2。代码集成:github-plugin和webhook方法 先决条件应该安装Github插件并配置Github服务器,如果不考虑以下配置,则应测试连接
在Jenkins上使用帐户配置Github插件
GitHub部分如果不存在,则添加Github服务器API URL:https : //api.github.com凭据:添加具有值Personal Access Token(从您的Github帐户生成它->设置)的秘密文本(单击添加按钮:选择键入秘密文本)。 —>开发人员设置—>个人访问令牌—>添加令牌—>检查范围—>复制令牌)测试连接—>检查它是否已连接到您的Github帐户选中“管理钩子”复选框预先选择小节以前的“共享秘密”凭证
如果没有将webhook添加到存储库中,则添加
如果您有Github Pull请求插件,请使用已发布的Jenkins URL对其进行配置。
使用拉取请求构建器插件:https : //wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
这真的很简单。然后,您可以设置GitHub webhooks来触发构建。
我对本地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”的相同名称的其他文件。
这就是你所需要的