当前位置: 首页 > 知识库问答 >
问题:

Jenkins Github拉请求合并不尊重状态

梁丘远航
2023-03-14

我正试图建立一个自动化的CI过程GitHub和Jenkins。目标是让开发人员创建特性分支,并生成使用Jenkins Github pull Request合并自动合并的pull请求(当然,如果它们通过了构建)。

另一个目标是要求pull请求针对开放的Github问题。对我们来说,这意味着pull request标题或至少一条pull request提交消息必须包含类似“fixes#nn”的子字符串,其中#nn必须引用openGitHub问题。这个“issue_opened”检查也是自动的--我们的“issue_opened”GitHub应用程序查询GitHub问题并检查提交消息和PR标题,然后发布带有状态的请求(出于测试目的,我总是发布“failure”)。

设想的过程如下:
1。特性分支推送由Jenkins自动构建。
2。当一个特性分支准备好并通过Jenkins测试时,开发人员将生成一个拉请求;这将自动触发步骤3和4,每个步骤都独立运行:
3。我们的'issue_opened'GitHub应用程序很快就会向请求发布一个状态。
4。Jenkins执行构建--它需要比步骤3长得多的时间。如果构建通过,Jenkins将应用该状态。如果所有状态都是'success',则拉请求将自动合并。

我观察到的情况:
当前,我的拉请求正在将特性分支合并到master。主分支受到保护(GitHub主分支:设置>分支>保护此分支>要求在合并前通过状态检查,并且“issue_opened”状态检查设置为required。)除了Github拉请求合并打破了Github约定,只尊重自己的状态,而不尊重其他状态之外,一切都按计划进行。
所以PR合并只依赖于Jenkins:
在第3步发布“失败”状态后,但在第4步完成之前,Github报告“合并前必需的状态必须通过”,并指示“issue_opened”状态为“失败”。但是当Jenkins构建成功时,无论如何都会发生合并。
FWIW,如果在创建请求时功能分支已经处于不良状态,那么合并也会发生。
我有什么方法可以让它做我想做的事情吗?

共有1个答案

孟新知
2023-03-14

在经历了更多绝望的调整后,我尝试启用GH主分支保护设置设置>分支>受保护的分支>master>protect this branch>include administrators和'voila':它对我来说非常有效,或多或少:Jenkins Github请求合并仍然试图进行合并,但Github返回以下内容:
HTTP响应代码:405,消息:'method Not alloving'。作为rc 405的结果,Jenkins生成一个java.io.ioException并从GH返回此json消息:
{“message”:“2个必需的状态检查中有2个没有成功:1个失败,1个挂起。”,“documentation_url”:“https://help.github.com/enterprise/2.10/user/articles/about-protected-branches”}Jenkins随后发布一个“failure”状态(人们可能会对此提出质疑,因为构建本身没有失败)。
这是有道理的,因为我是这个回购的管理员,但我没有预料到Jenkins Github Pull Request合并不会检查状态。但我很高兴这将为我完成工作,尽管从我的角度来看,如果Jenkins首先发布构建状态,然后发布合并,会更干净。更好的是,如果它检查了状态,它可以简单地跳过发送尝试,我就不必启用include administrators保护。目前,我看不到清除Jenkins发布的pull请求失败状态的html" target="_blank">方法。因此,我们必须关闭此类失败的请求并创建新请求。

自从发布初始答案以来,我发现不能设置/启用来自Jenkins构建的GitHub分支保护状态检查。如果未启用,则可以关闭失败的pull请求,纠正导致其他状态检查或Jenkins构建失败的任何问题,然后通过打开新的pull请求重新启动pull请求过程。

 类似资料:
  • 设置您的本地环境 步骤1: 复制 步骤2: 构建 步骤3: 分支 进行更改 步骤4: 编写代码 步骤5: 提交更改 提交代码说明的指导 步骤6:变基 步骤7: 测试 步骤8: 推送代码 步骤9: 新建一个合并代码请求 步骤10: 讨论和更新 批准和请求更改工作流程 步骤11: 执行合并 持续集成测试 设置您的本地环境 步骤1: 复制 在 GitHub 上复制项目到你的账号并把项目克隆到本地。 $

  • 在进行开源开发时,在对主题分支进行任何更改的同时,在一段时间内跟踪上游是正常的。我注意到的一件事是,当返回上游时,创建了一个合并提交。如果我创建了一个pull请求,这个合并提交将作为PR的一部分结束。 我的问题是,这有什么害处吗?我读到过一些人觉得它们没用,但我喜欢这样一个事实,即它们充当了我上次与上游同步的时间戳。有没有一种公认的做法来跟踪上游并引入合并提交。

  • GitLab可以引用提交消息中的特定问题来解决特定的问题。 在本章中,我们将讨论如何在GitLab中引用问题: 步骤(1): 要引用问题,您需要创建问题的问题编号。 要创建问题,请参阅创建问题章节。 步骤(2): 要查看创建的问题,请单击Issues选项卡下的List选项: 步骤(3): 在对本地存储库进行更改之前,请使用以下命令检查它是否为最新版本: 命令从远程服务器下载最新的更改并直接集成到当

  • 主要内容:合并请求的步骤合并请求可用于对项目其他人员之间所做的代码进行交换,与他们讨论更改。 合并请求的步骤 步骤(1): 在创建新的合并请求之前,应该在GitLab中创建一个分支。 您可以参考本章创建分支: 步骤(2): 登录到您的GitLab帐户并转到项目部分下的项目: 步骤(3): 点击选项卡,然后点击New merge request 按钮: 步骤(4): 要合并请求,请从下拉列表中选择源分支和目标分支,然后单击

  • 问题内容: 问题 我有两个Apis。Api 1为我提供了一个项目列表,Api 2为我提供了我从Api 1获得的每个项目的更详细信息。到目前为止,我解决它的方式导致性能下降。 问题 借助Retrofit和RxJava,可以快速有效地解决此问题。 我的方法 当下,我的解决方案如下所示: 步骤1:从Api 1 执行改造。 第2步:我遍历此项目,并向Api 2请求每个项目。 步骤3:对每个项目依次执行改造

  • 设置您的本地环境 步骤1: 复制 步骤2: 构建 步骤3: 分支 进行更改 步骤4: 编写代码 步骤5: 提交更改 提交代码说明的指导 步骤6: 合并分支 步骤7: 测试 步骤8: 推送代码 步骤9: 新建一个合并代码请求 步骤10: 讨论和更新 批准和请求更改工作流程 步骤11: 执行合并 持续集成测试 Pull Requests Setting up your local environmen