问题产生:
git在提交的过程中,使用#1
会自动关联到相关的议题。但是并不会自动展示提交的描述信息,只会展示如下图所示的样子:
需要实现的效果,如下图:
实现步骤:
1. 配置GitLab API Token
首先,你需要创建一个 GitLab Personal Access Token,以便 CI/CD 能够通过 API 与 GitLab 进行交互。
- 登录到你的 GitLab 账户。
- 点击右上角的头像,选择 Settings(设置)。
- 在左侧导航栏中,点击 Access Tokens。
- 创建一个新的 token,勾选
api
访问权限,并记录生成的 token。
2. 在GitLab CI 配置文件中编写脚本
接下来,你需要在项目根目录下创建或编辑 .gitlab-ci.yml
文件。在这个文件中,你可以编写一个 CI 作业(job),在每次提交后,通过 GitLab API 自动向关联的议题添加评论。
stages: - notify add_commit_info_to_issue: stage: notify script: - | ISSUE_ID=$(git log -1 --pretty=format:%s | grep -o '#[0-9]*' | cut -c2-) if [ -n "$ISSUE_ID" ]; then COMMIT_MESSAGE=$(git log -1 --pretty=format:%B) COMMIT_URL="${CI_PROJECT_URL}/-/commit/${CI_COMMIT_SHA}" curl --request POST --header "PRIVATE-TOKEN: ${GITLAB_API_TOKEN}" \ --data "body=提交信息: [${CI_COMMIT_SHORT_SHA}](${COMMIT_URL}) ${COMMIT_MESSAGE}" \ "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/issues/${ISSUE_ID}/notes" fi only: - master
解释:
- 获取议题编号:通过
git log -1 --pretty=format:%s
获取最新提交的commit message
,并通过grep -o '#[0-9]*'
提取其中的议题编号(形如#1
的格式)。 - 提交信息和提交 URL:通过
git log -1 --pretty=format:%B
获取最新提交的完整描述信息,并生成提交的 URL。 - 调用 GitLab API 添加评论:使用
curl
命令通过 GitLab API 向议题添加评论。API 调用的路径格式为/projects/{project_id}/issues/{issue_id}/notes
。 - 触发条件:配置为仅在提交到
master
分支时触发。
3. 设置CI/CD环境变量
将你的 GitLab API token (第一步生成的token)存储为 GitLab 项目的环境变量,以便在 CI/CD 中使用。
- 打开项目的 Settings。
- 在左侧导航栏中,点击 CI/CD,然后展开 Variables。
- 添加一个名为
GITLAB_API_TOKEN
的变量,值为之前生成的 Personal Access Token。
注意:需要注意设置Options,即保护类型,该设置会导致不同的分支中执行的CI\CD脚本是否能够获取到该变量
4. 提交并测试
将 .gitlab-ci.yml
文件提交到你的 GitLab 仓库,GitLab CI/CD 会在提交后自动运行,并将提交的详细信息作为评论添加到相关的议题中。