IBM Cloud Docs
配置 GitHub 仓库

配置 GitHub 仓库

Git Repos and Issue Tracking 工具集成基于 Github,Github 是 Git 仓库(repos)的网络托管服务。 您可以同时具有存储库的本地和远程副本。 欲了解更多信息,请参阅 Git Repos and Issue Tracking{: external}。

分支保护策略实施安全性,协作,并帮助确保您的团队遵守代码质量和变更管理标准。 本主题帮助您设置和管理分支策略。 DevSecOps 需要您配置分支保护规则GitHub存储库。

GitHub 现在支持定义分支保护的规则集- 一种在存储库级别定义保护和策略的更细粒度和灵活的机制。 更多信息,请参阅 关于规则集

分支保护的好处

  • 改进的代码质量和协作: 通过分支保护要求拉取请求和核准可增强代码质量和协作。 这确保了代码一致性和遵守团队的编码标准。 更改会进行复审,并有助于及早捕获错误和错误,从而生成更可靠且可维护的代码。

  • 提高了变更的可视性: 需要拉取请求可提高对代码变更的可视性。 此步骤简化了跟踪修改和识别潜在问题。

  • 确保代码完整性: 拉取请求状态-检查通过针对预定义标准和指针运行自动化测试来验证代码,然后才能合并拉取请求。 此步骤通过在开发周期早期捕获错误和其他问题来维护代码完整性。

规则集的优点

  • 细化目标:使用强大的 fnmatch 模式(如 release/**、refs/tags/v*)将规则应用于分支和标记

  • 集中管理:从单一界面配置和管理所有分支和标签保护。 GitHub 用户界面和 应用程序接口提供清晰的规则关联和执行细节,以提高透明度。

  • 灵活性更高:与传统的分支保护(每个分支只允许一条规则)不同,规则集可使用模式定义多个分层规则集,适用于多个分支。 单个分支可拥有多个适用的规则集,从而实现细粒度控制、跨分支可重复使用的策略,并更好地与复杂的工作流程保持一致。

中配置规则集 GitHub

要在 GitHub 中为版本库配置规则集,请按照以下步骤操作:

访问规则集设置

  1. 浏览至 GitHub上存储库的 设置 选项卡。
  2. 在左侧边栏“规则”下单击“规则集”进入“规则集设置”页面。
  3. 点击绿色按钮 “New Branch RuleSet
  4. 添加定义规则集所需的信息,然后单击创建

GitHub 资源库规则集 资源库规则集
GitHub

在规则集中添加保护规则

单击绿色按钮“新建分支规则集”后,会出现一个填写规则集详细信息的页面。

创建规则集
创建规则集

  1. 为 RuleSet 命名,并从启用状态下拉菜单中选择启用/禁用/评估规则集

命名并启用规则集
命名并启用规则集

  1. 点击添加目标,配置目标分支。 选择“包括、“排除、“默认”或“全部”来配置分支目标条件。 GitHub 支持 fnmatch 语法,用于基于模式的目标定位。

选择目标分支机构
选择目标分支机构

  1. 点击添加旁路,在旁路列表下配置旁路权限。 您可以添加可以绕过检查的所需角色。 您可以将列表留空(这相当于在传统的分支保护设置中启用 " 不允许绕过这些设置" )。

添加旁路演员
添加旁路演员

  1. 启用分支规则下的“**合并前要求提交拉取请求 **”选项。

  2. 启用 需要核准 选项,并将 合并前需要的核准数 设置为至少 1 或团队中需要的核准数。

  3. 启用选项 推送新落实时取消旧拉取请求核准 以查看所有最新更改,然后才能将其合并到另一个分支上。

添加分支规则
添加分支规则

限制

目前,旁路行为者列表只能从存储库级规则集中检索。 如果在组织层面定义了规则集,则根据标准权限,无法从这些规则集中检索这些信息。

要从组织级规则集检索旁路行动者列表,请查看所需的访问权限,并授予运行管道的功能 ID/GitHub 账户以高级权限 (组织的所有者访问权限 )。 这是由于 GitHub's 权限模型,它限制了对组织级别规则集的可见性, 在没有适当授权的情况下绕过参与者元数据,以防止敏感信息的泄露。

更多信息,请参阅 GitHub 关于 组织规则集和旁路行为体的官方文档。

为规则集配置状态检查

  1. 启用 Require status checks to pass before merging 选项。

为了能够将它们设置为必需的状态检查,首先需要事先触发 PR/CI 管道 (UI 上仅列出现有状态检查)。

在启用 Require status checks to pass before merging 选项之后,您需要配置在合并拉取请求之前必须通过的特定状态检查。

  1. 在可用状态检查列表中,启用以下选项以进行检查:
  • tekton/code-branch-protection
  • tekton/code-cis-check
  • tekton/code-detect-secrets
  • tekton/code-unit-tests
  • tekton/code-vulnerability-scan

这些检查是管道中默认的预期拉取请求状态检查。

状态检查
状态检查 "

添加所有默认规则集(完整配置)

这条 CURL 命令设置了默认的所需状态检查和拉取请求审查设置。

curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/rulesets" \
    -XPUT -d '{
  "name": "Branch Protection Equivalent Ruleset",
  "target": "branch",
  "enforcement": "active",
  "bypass_actors": [], // as the list is empty no one can bypass which is equivalent to enforce_admins: true with no restriction
  "conditions": {
    "ref_name": {
      "include": ["refs/heads/master"],
      "exclude": []
    }
  },
  "rules": [
    {
      "type": "required_status_checks",
      "parameters": {
        "strict_required_status_checks_policy": true,
        "required_status_checks": [
          {
            "context": "tekton/code-unit-tests"
          },
          {
            "context": "tekton/code-branch-protection"
          },
          {
            "context": "tekton/code-cis-check"
          },
          {
            "context": "tekton/code-vulnerability-scan"
          },
          {
            "context": "tekton/code-detect-secrets"
          }
        ]
      }
    },
    {
      "type": "pull_request",
      "parameters": {
        "required_approving_review_count": 1,
        "dismiss_stale_reviews_on_push": true,
        "require_code_owner_review": false,
        "require_last_push_approval": false,
        "required_review_thread_resolution": false
      }
    }
  ]
}'

在 GitHub 中配置分支保护规则

要在 GitHub 中为存储库配置分支保护规则,请执行以下步骤:

访问分支保护设置

  1. 浏览至 GitHub上存储库的 设置 选项卡。
  2. 在左侧边栏中,单击 分支 以访问分支设置页面。
  3. 向下滚动到 分支保护规则 部分。
  4. 找到要配置的分支 (通常为 "main" 分支)。
  5. 选择分支名称旁边的 编辑 按钮以修改其保护规则。

GitHub存储库设置 "
GitHub存储库设置 "

添加分支保护规则

如果未设置现有规则,请单击 添加规则 按钮,并在 **Branch name pattern** 字段中输入相应的分支名称。 然后,继续执行以下步骤:

  1. 启用 在合并之前需要拉取请求 选项。
  2. 启用 需要核准 选项,并将 合并前需要的核准数 设置为至少 1 或团队中需要的核准数。
  3. 启用选项 推送新落实时取消旧拉取请求核准 以查看所有最新更改,然后才能将其合并到另一个分支上。

分支保护规则
分支保护规则

  1. 启用“不允许绕过设置 ”选项,以防止具有绕过分支保护权限的管理员和自定义角色绕过所需的分支保护检查。

分支机构保护规则
禁止绕过上述设置

目前,如果未启用 Do not allow bypassing these settings 检查,日志中会显示警告。 在3月中旬强制检查之前,它不会在分支保护检查中失败。 请在3月中旬之前启用检查,以防止管道故障。

在将拉取请求合并到主分支之前,必须 核准这些请求。 此规则确保变更接受团队成员的复审和审查,促进协作,代码质量和遵守项目标准。

配置状态检查

需要进行状态检查DevSecOps对代码实施一套全面的质量和安全措施。 这将确保代码更改在合并到受保护的分支之前是安全可靠的。 通过要求在合并前通过状态检查,可以防止将损坏或未测试的代码部署到生产环境。

提交拉取请求时,PR/CI 管道会自动触发一系列测试,验证和其他检查,以验证建议的更改。

仅当所有必需的状态检查成功通过时,拉取请求才会被视为有资格合并到受保护的分支中。

通过利用DevSecOps,在将更改纳入项目的受保护分支之前,您可以维护代码质量、遵守编码标准并确保没有漏洞或严重缺陷。

有关配置状态检查的更多信息,请参阅 仅配置状态检查(状态检查配置) 部分以获取参考实现。

  1. 启用 Require status checks to pass before merging 选项。

为了能够将它们设置为必需的状态检查,首先需要事先触发 PR/CI 管道 (UI 上仅列出现有状态检查)。

在启用 Require status checks to pass before merging 选项之后,您需要配置在合并拉取请求之前必须通过的特定状态检查。

  1. 在可用状态检查列表中,启用以下选项以进行检查:
  • tekton/code-branch-protection
  • tekton/code-cis-check
  • tekton/code-detect-secrets
  • tekton/code-unit-tests
  • tekton/code-vulnerability-scan

状态检查
状态检查 "

在合并拉取请求之前,必须通过所显示的状态检查。

这些检查是管道中默认的预期拉取请求状态检查。

设置合规性检查的定制列表

您还可以引入自己的要由管道验证的状态检查列表。 要实现此目的,请首先在存储库中设置所需状态检查的列表,并将 branch-protection-rules-path 值设置为包含相同列表状态检查 (相对于应用程序存储库) 的 JSON 文件的路径。

|branch-protection-rules-path |text | 设置 JSON 文件的路径,该文件包含所需合规性检查的定制列表 (相对于集成应用程序存储库)。 | 可选 |

JSON 文件具有此格式

[{
  "type": "branch-protection",
  "name": "code-review",
  "params": {
    "checks": [
      "tekton/code-branch-protection",
      "tekton/code-unit-tests",
      "tekton/code-cis-check",
      "tekton/code-vulnerability-scan",
      "tekton/code-detect-secrets"
    ]
  }
}]

笔记:DevSecOps默认情况下,将根据具有以下条件的状态检查的结果来确定分支保护检查的结果:tekton/ 字首。

设置合规性检查的定制前缀

如果你想改变 tekton 前缀GitHub,你应该设置一个值 branch-protection-status-check-prefix 管道中的环境属性。

|branch-protection-status-check-prefix |text | 用于分支保护状态检查的前缀文本 (缺省为 tekton) | 可选 |

配置分支保护设置后,除非满足所需条件,否则将拒绝将拉取请求合并到受保护分支的任何尝试。

可选设置

除上述设置外,您还可以选择为分支保护规则配置以下其他设置。 请注意,DevSecOps将不会验证或强制执行这些设置。

  • 需要已签名的落实: 此设置要求对所有对受保护分支的落实进行签名,以防止对代码进行恶意更改。

  • 需要线性历史记录: 此设置要求所有对受保护分支的落实都具有线性历史记录。 这意味着合并到受保护分支中的任何拉取请求都必须使用壁式合并或同步合并。 严格线性落实历史记录可帮助团队更轻松地逆转更改。

这些附加设置是可选的,可以根据您的特定需求和首选项进行定制。

通过 CURL 命令设置分支保护规则

添加所有分支保护规则 (完成配置)

在替换 $GH_TOKEN$OWNER$APP_API_URL $REPO$BRANCH 变量之后,还可以通过以下 curl 命令设置分支保护规则。

curl -u ":$GH_TOKEN" $APP_API_URL/repos/$OWNER/$REPO/branches/$BRANCH/protection -XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'

此 CURL 命令设置必需的状态检查和拉取请求复审设置。

一旦配置了这些设置,任何将拉取请求合并到 $BRANCH 的尝试都将被拒绝,除非至少一个其他用户已批准该拉取请求。

仅配置状态检查 (状态检查配置)

如果只想配置必需的状态检查,那么可以使用以下 CURL 命令作为参考:

curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/branches/master/protection" \
    -XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'

在我们的参考实现中,我们已经为 hello-compliance-app 存储库提供了样本配置,因此您可以将其用作起点,并根据需要进行定制。

请遵循先前的示例,以确保代码质量并遵守存储库的安全措施。 要确保发生此情况,请配置必要的分支保护规则和状态检查。