詹金斯(Jenkins)是世界上许多团队中众所周知的术语,并且已经存在了很长一段时间。 随着许多组织将其源代码从集中式版本控制系统迁移到git,GitHub似乎是支持和简化git工作的好工具。 不用说它通过请求请求的概念对代码审查的大力支持。 Jenkins和GitHub本身都是很棒的工具,但是将它们集成在一起并进一步利用自动化的力量真的很好。 在这篇文章中,我将描述我这样做的尝试。

使用git和GitHub

使用git的方式很重要。 选择适当的分支模型可能会并且将影响您的工作方式以及与队友的沟通。 如果您现在使用git并从Subversion时代开始携带任何行李,那么该是重新考虑分支方式的时候了。 接下来的帖子将依靠合适的分支模型来支持集成。 几周前,我遇到了Vincent Driessen撰写的精彩文章,标题为“成功的Git分支模型” 。 我强烈建议您检查一下它,因为它提供了适合git和分支的一种可能的git分支方法的详细说明。

Gits分支模型允许平滑的工作并行化,并在GitHub中提供拉取请求,从而可以讨论源代码和有效的代码审查过程。 在理想的情况下,每个开发人员都可以合并最新版本的母版代码,针对他们使用的功能运行完整的测试套件,以防止推送到母版后可能发生的任何问题和修复。 不幸的是,情况并非总是如此,因此使整个过程自动化是有意义的。 我在这里提出的建议是让Jenkins将拉取请求的更改合并到目标分支中,针对合并后的构建运行测试套件和声纳/检查样式分析,并通过HitBubs拉取请求列表通知开发人员此拉取请求是否准备就绪甚至值得。代码审查。

设置詹金斯

您需要做的第一件事是安装其他插件以促进集成。 这些插件可以是独立插件,也可以是使系统之间进行通信所需的插件依赖性。

现在,您需要允许Jenkins通过配置GitHub Web Hook访问权限与GitHub通信。 单击Jenkins->管理Jenkins->配置系统,转到Jenkins系统配置。 您应该在页面底部附近看到以下条目:

jenkins和jpom比较 jenkins与github_spring

选择“让Jenkins自动管理挂钩URL”使您可以配置要使用的GitHub凭据:

  • API网址:https:// GITHUB_HOST:GITHUB_PORT / api / v3
  • 用户名:USER
  • OAuth令牌:令牌

有几种获取OAuth令牌的方法,其中一种将在有关Jenkins配置的部分中提到,因此,如果需要帮助,请继续阅读。 填写所有凭据后即可测试配置。

让Jenkins信任GitHub

如果您正在运行GitHub的本地实例,则可能会遇到自签名证书的麻烦。 要解决此问题,需要导出目标应用程序的SSL证书,将其导入Jenkins服务器的JVM TrustStore,然后重新启动Jenkins,以使Jenkins信任目标应用程序。 好消息是,在詹金斯的一生中,只需要做一次。 为此,只需执行以下三个步骤:

openssl s_client -connect GITHUB_HOST:GITHUB_PORT < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt
  1. 将证书导入密钥库。 提取证书后,将其导入用于运行Jenkins的JAVA_HOME
JVM_PATH/bin/keytool -import -alias GITHUB_HOST -keystore JVM_PATH/jre/lib/security/cacerts -file public.crt
service jenkins restart

请注意,需要用特定于您的环境的实际值替换GITHUB_HOSTGITHUB_PORTJVM_PATH

设置GitHub

在我开始描述设置GitHub的方法之前,我想分享一个技巧,以防您的组织没有实践它。 对于像这样的集成和自动化而言,创建一个专门的系统用户代表系统和脚本行事是有益的,这使开发过程更加容易。 出于Jenkins和GitHub集成的目的,需要向该用户授予协作者角色或Push&Pull权限。 设置好该用户后,建议您使用它来设置GitHub实例。

登录GitHub后,转到您选择的存储库,然后单击存储库设置。 单击Webhooks&Services后,将为您提供添加新的Webhook或添加新的服务的选项。 单击添加服务,然后尝试查找Jenkins(在撰写本文时,该服务的名称为Jenkins(Git插件))。 配置非常简单,您唯一需要提供的就是Jenkins钩子URL并选中“激活”。 该URL应该如下所示http://JENKINS_HOST:JENKINS_PORT/github-webhook/

jenkins和jpom比较 jenkins与github_spring_02

您可以通过单击测试服务来测试您的配置。 请转到Jenkins系统日志,以确保一切正常。 您应该能够找到类似于以下内容的日志条目:

Mar 10, 2015 3:32:55 PM INFO com.cloudbees.jenkins.GitHubWebHook processGitHubPayload
Received POST for https://GITHUB_HOST:GITHUB_PORT/ORGANISATION/REPOSITORY

Mar 10, 2015 3:32:55 PM INFO com.cloudbees.jenkins.GitHubWebHook processGitHubPayload
Received POST for https://GITHUB_HOST:GITHUB_PORT/ORGANISATION/REPOSITORY

成功完成上述所有步骤后,您应该在Jenkins(GitHub插件)服务旁边看到绿色的复选标记。

jenkins和jpom比较 jenkins与github_spring_03

配置詹金斯

集成过程的最后一步是根据如何处理传入的Web挂钩和其他内容(如注释或触发器)来配置Jenkins。 单击Jenkins->管理Jenkins->配置系统,然后转到GitHub Pull Request Builder,以进行Jenkins系统配置。

jenkins和jpom比较 jenkins与github_java_04

首先填写基本配置。 使用前面提到的API URL https:// GITHUB_HOST:GITHUB_PORT / api / v3和OAuth令牌。 通过单击高级…,您可以微调此插件的行为。 大多数默认设置都可以满足我们的期望,但是我建议您更新测试短语,使其完全匹配。

jenkins和jpom比较 jenkins与github_jenkins和jpom比较_05

生成OAuth令牌的一种方法是在此对话框底部附近。 通过提供用户名和密码,您可以生成将在早期配置中使用的访问令牌。 就是这样。 完成所有这些步骤后,Jenkins应该可以选择与拉取请求相关的事件并对其采取行动。

整合的权衡

  • 更快的错误检测
  • 开发过程中最大的改进之一是早期的错误检测。
  • 无需回滚更改
  • 这一点与上一个点相连。
  • 改进的代码审查流程
  • 代码审查过程涉及许多类型的代码检查。
  • 定制选项
  • GitHub的webhook提供了一些有用的信息,您可以在工作定义中使用这些信息。
  • Jenkins的额外职位
  • 要考虑的一件事是,Jenkins的负载增加了(取决于您的基础结构和硬件),而负载又通过以下方式表现出来:

下一步是什么

这篇文章应该通过描述集成可能给您带来的好处以及如何使GitHub和Jenkins相互交谈,使您了解如何充分利用当前的CI工具。 这是您需要做的上半部分。 在我的下一篇名为GitHub和Jenkins pull请求检查的帖子中,我将解决Jenkins作业配置以及如何在需要的地方提供必要的信息。

翻译自: https://www.javacodegeeks.com/2015/04/github-and-jenkins-integration.html