github-plugin

github-plugin

Jenkins与GitHub集成插件:自动化CI/CD工作流

GitHub Plugin是一款将Jenkins与GitHub项目无缝集成的插件。核心功能包括:在Jenkins和GitHub间建立项目超链接、通过webhook自动触发构建、向GitHub报告构建状态。支持手动或自动配置webhook,适用于防火墙内的Jenkins环境。插件还提供GitHub请求缓存机制以提升性能,并支持在Pipeline中设置提交状态。它简化了持续集成流程,提高了开发效率。

GitHubJenkins插件集成构建触发提交状态Github开源项目

Github 插件

codecov License

该插件将 Jenkins 与 Github 项目集成。该插件目前有三个主要功能:

  • 在 Jenkins 项目和 GitHub 之间创建超链接
  • 通过解析来自 post-receive 钩子的 HTTP POST 请求触发作业,并可选择自动管理钩子设置
  • 将构建状态结果报告回 GitHub,作为 提交状态在 Stack Overflow 上有文档
  • 为其他插件提供基本功能

更改之间的超链接

Github 插件装饰 Jenkins 的"更改"页面,创建指向 Github 提交和问题页面的链接。它添加了一个侧边栏链接,链接回 Github 项目页面。

创建作业时,指定它连接到 git。在"Github 项目"下,输入:git@github.com:Person/Project.git。在"源代码管理"下选择 Git,并输入 git@github.com:Person/Project.git

GitHub 钩子触发 GITScm 轮询

此功能在GitHub 仓库中的 post-receive 钩子之后启用构建。此触发器仅针对每个传入的匹配仓库事件启动 git 插件内部轮询算法。

此触发器之前被命名为"当更改被推送到 GitHub 时构建"

使用方法

要使用此功能,可以使用不同的模式:

  • 手动模式:URL 必须在每个项目中手动添加
  • 自动模式:Jenkins 自动为每个项目注册 webhook

手动模式

在此模式下,您将负责向 GitHub 注册钩子 URL。点击 (question) 图标(在管理 Jenkins > 配置系统 > GitHub 下)以查看 Jenkins 中接收 post-commit POST 的 URL — 但通常 URL 的格式为 $JENKINS_BASE_URL/github-webhook/ — 例如:https://ci.example.com/jenkins/github-webhook/

一旦您有了 URL,并将其添加为相关 GitHub 仓库的 webhook,继续步骤 3

自动模式(Jenkins 自行管理作业的钩子)

在此模式下,Jenkins 将根据后台的项目配置自动向 GitHub 添加/删除钩子 URL。您需要指定 GitHub OAuth 令牌,以便 Jenkins 可以以您的身份登录来执行此操作。

步骤 1. 转到全局配置并添加 GitHub 服务器配置。

步骤 2.1. 在 GitHub 中创建您的个人访问令牌。

插件可以帮助您创建所有必需范围的令牌。转到高级 -> 管理其他 GitHub 操作 -> 将登录和密码转换为令牌

双因素认证

自动创建令牌不适用于 GitHub 双因素认证

您可以直接使用登录和密码在相应域中创建带有令牌的 "Secret text" 凭据,或从用户名和密码凭据创建。

步骤 2.2. 选择之前创建的带有 GitHub OAuth 令牌的"Secret Text"凭据。

令牌所需的范围

要能够管理钩子,您的令牌应具有 admin:org_hook 范围。

GitHub Enterprise

您还可以通过点击 自定义 GitHub API URL 复选框来重新定义 GitHub URL。 请注意,凭据会通过域要求的帮助按输入的 GH URL 进行过滤。因此,您可以在不同域中创建凭据,并只看到与预定义域匹配的凭据。

步骤 3. 完成配置后,转到您希望自动触发的每个作业的项目配置,并在"构建触发器"下简单勾选"GitHub hook trigger for GITScm polling"。这样,每次向仓库推送新内容时都会自动触发新的构建。

请注意,只有一个 URL,它接收所有仓库的所有 post-receive POST 请求。此 URL 的服务器端足够智能,可以根据提交内容确定需要触发哪些项目。

安全影响

此插件要求您有一个从 GitHub 可访问的 HTTP URL,这意味着它可以从整个互联网访问。因此,考虑到可能存在恶意的假 post-receive POST 请求,它的实现非常谨慎。为了应对这种情况,在收到 POST 请求后,Jenkins 将与 GitHub 通信以确保推送确实发生。

防火墙内的 Jenkins

如果您的 Jenkins 在防火墙内运行,不能直接从互联网访问,此插件允许您在自动模式下指定任意端点 URL 作为覆盖。插件将假设您已设置反向代理或其他方式,以便来自 GitHub 的 POST 请求将被路由到 Jenkins。

钩子故障排除

如果您设置了这些但构建未被触发,请检查以下事项:

  • 点击相关 GitHub 仓库上的"admin"按钮,确保 post-receive 钩子存在。
    • 如果不存在,确保您在 Jenkins 系统配置页面中设置了正确的凭据。
  • 另外,启用日志记录以下类名
    • com.cloudbees.jenkins.GitHubPushTrigger
    • org.jenkinsci.plugins.github.webhook.WebhookManager
    • com.cloudbees.jenkins.GitHubWebHook
      您将看到 Jenkins 尝试安装 post-receive 钩子的日志。
  • 从 GitHub UI 点击"Test hook"按钮,查看 Jenkins 是否收到有效负载。

使用缓存处理 GitHub 请求

每个 GitHub 服务器配置 创建自己的 GitHub 客户端与 API 交互。默认情况下,它使用缓存(限制为 20MB)来加速数据获取过程并减少速率限制消耗。您可以在此配置项的"高级"部分更改缓存限制值。如果您设置为 0,则此功能将对此(且仅此)配置禁用。

附加信息:

  • 该插件现在主要功能是只从 GitHub 提供钩子。然后它开始使用 git 插件来获取源代码。
  • 它同时适用于公共和企业版 GitHub
  • 插件有一些限制

Jenkins 和 GitHub 之间可能存在的问题

Windows:

  • 在 Windows 中,Jenkins 将使用运行它的用户的 SSH 密钥,该密钥位于 %USERPROFILE%.ssh 文件夹中(在 XP 上,路径是 C:\Documents and Settings\USERNAME.ssh,在 Windows 7 上是 C:\Users\USERNAME.ssh)。因此,你需要强制 Jenkins 以配置了 SSH 密钥的用户身份运行。为此,右击"我的电脑",点击"管理"。点击"服务"。找到 Jenkins,右击并选择"属性"。在"登录"选项卡下,选择 Jenkins 将要运行的用户,并输入用户名和密码(这是必需的)。然后通过在服务窗口中右击 Jenkins 并点击"重新启动"来重启 Jenkins 服务。
  • Jenkins 不支持带密码短语的 SSH 密钥。因此,如果你在初始 GitHub 配置时设置了密码短语,请重新运行配置并不要设置密码短语。

Pipeline 示例

设置提交状态

这段代码将为自定义仓库设置提交状态,包括配置的上下文和消息(你也可以用同样的方式定义反向引用)

void setBuildStatus(String message, String state) { step([ $class: "GitHubCommitStatusSetter", reposSource: [$class: "ManuallyEnteredRepositorySource", url: "https://github.com/my-org/my-repo"], contextSource: [$class: "ManuallyEnteredCommitContextSource", context: "ci/jenkins/build-status"], errorHandlers: [[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]], statusResultSource: [ $class: "ConditionalStatusResultSource", results: [[$class: "AnyBuildResult", message: message, state: state]] ] ]); } setBuildStatus("Build complete", "SUCCESS");

更复杂的示例(可用于 pipeline 中的多个 SCM 源)

def getRepoURL() { sh "git config --get remote.origin.url > .git/remote-url" return readFile(".git/remote-url").trim() } def getCommitSha() { sh "git rev-parse HEAD > .git/current-commit" return readFile(".git/current-commit").trim() } def updateGithubCommitStatus(build) { // 解决 https://issues.jenkins-ci.org/browse/JENKINS-38674 的问题 repoUrl = getRepoURL() commitSha = getCommitSha() step([ $class: 'GitHubCommitStatusSetter', reposSource: [$class: "ManuallyEnteredRepositorySource", url: repoUrl], commitShaSource: [$class: "ManuallyEnteredShaSource", sha: commitSha], errorHandlers: [[$class: 'ShallowAnyErrorHandler']], statusResultSource: [ $class: 'ConditionalStatusResultSource', results: [ [$class: 'BetterThanOrEqualBuildResult', result: 'SUCCESS', state: 'SUCCESS', message: build.description], [$class: 'BetterThanOrEqualBuildResult', result: 'FAILURE', state: 'FAILURE', message: build.description], [$class: 'AnyBuildResult', state: 'FAILURE', message: 'Loophole'] ] ] ]) }

更新日志

GitHub 发布

开发

启动本地 Jenkins 实例:

mvn hpi:run

Jenkins 插件 Maven 目标

hpi:create  创建新插件的骨架。

hpi:hpi 构建 .hpi 文件

hpi:hpl 生成 .hpl 文件

hpi:run 使用当前插件项目运行 Jenkins

hpi:upload 将 hpi 文件发布到 java.net。在发布过程中使用。

如何安装

运行

mvn hpi:hpi

来创建插件的 .hpi 文件。

安装方法:

  1. 将生成的 ./target/rdoc.hpi 文件复制到 $JENKINS_HOME/plugins 目录。别忘了之后重启 Jenkins。

  2. 或者使用插件管理控制台(https://example.com:8080/pluginManager/advanced)上传 hpi 文件。你需要重启 Jenkins 才能在已安装插件列表中找到该插件。

插件发布

mvn release:prepare release:perform -Dusername=juretta -Dpassword=******

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多