配置 GitHub 存储库
这Git Repos and Issue Tracking工具集成基于 Github,这是一个基于 Web 的托管服务Git存储库(repos)。 您可以同时具有存储库的本地和远程副本。 要了解更多信息,请参阅Git Repos and Issue Tracking{: external}。
分支保护策略实施安全性,协作,并帮助确保您的团队遵守代码质量和变更管理标准。 本主题帮助您设置和管理分支策略。 DevSecOps 需要您配置分支保护规则GitHub存储库。
分支保护的好处
-
改进的代码质量和协作: 通过分支保护要求拉取请求和核准可增强代码质量和协作。 这确保了代码一致性和遵守团队的编码标准。 更改会进行复审,并有助于及早捕获错误和错误,从而生成更可靠且可维护的代码。
-
提高了变更的可视性: 需要拉取请求可提高对代码变更的可视性。 此步骤简化了跟踪修改和识别潜在问题。
-
确保代码完整性: 拉取请求状态-检查通过针对预定义标准和指针运行自动化测试来验证代码,然后才能合并拉取请求。 此步骤通过在开发周期早期捕获错误和其他问题来维护代码完整性。
在 GitHub 中配置分支保护规则
要在 GitHub 中为存储库配置分支保护规则,请执行以下步骤:
访问分支保护设置
- 浏览至 GitHub上存储库的 设置 选项卡。
- 在左侧边栏中,单击 分支 以访问分支设置页面。
- 向下滚动到 分支保护规则 部分。
- 找到要配置的分支 (通常为 "main" 分支)。
- 选择分支名称旁边的 编辑 按钮以修改其保护规则。

添加分支保护规则
如果未设置现有规则,请单击 添加规则 按钮,并在 **Branch name pattern**
字段中输入相应的分支名称。 然后,继续执行以下步骤:
- 启用 在合并之前需要拉取请求 选项。
- 启用 需要核准 选项,并将 合并前需要的核准数 设置为至少
1
或团队中需要的核准数。 - 启用选项 推送新落实时取消旧拉取请求核准 以查看所有最新更改,然后才能将其合并到另一个分支上。

在将拉取请求合并到主分支之前,必须 核准这些请求。 此规则确保变更接受团队成员的复审和审查,促进协作,代码质量和遵守项目标准。
配置状态检查
需要进行状态检查DevSecOps对代码实施一套全面的质量和安全措施。 这将确保代码更改在合并到受保护的分支之前是安全可靠的。 通过要求在合并前通过状态检查,可以防止将损坏或未测试的代码部署到生产环境。
提交拉取请求时,PR/CI 管道会自动触发一系列测试,验证和其他检查,以验证建议的更改。
仅当所有必需的状态检查成功通过时,拉取请求才会被视为有资格合并到受保护的分支中。
通过利用DevSecOps,在将更改纳入项目的受保护分支之前,您可以维护代码质量、遵守编码标准并确保没有漏洞或严重缺陷。
有关配置状态检查的更多信息,请参阅 仅配置状态检查(状态检查配置) 部分以获取参考实现。
- 启用
Require status checks to pass before merging
选项。
为了能够将它们设置为必需的状态检查,首先需要事先触发 PR/CI 管道 (UI 上仅列出现有状态检查)。
在启用 Require status checks to pass before merging
选项之后,您需要配置在合并拉取请求之前必须通过的特定状态检查。
- 在可用状态检查列表中,启用以下选项以进行检查:
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 存储库提供了样本配置,因此您可以将其用作起点,并根据需要进行定制。
请遵循先前的示例,以确保代码质量并遵守存储库的安全措施。 要确保发生此情况,请配置必要的分支保护规则和状态检查。