通过 GitLab API 实现 CHANGELOG.md 文件的自动化上传至指定分支

在软件开发流程中,CHANGELOG.md 文件扮演着记录项目变更历史的重要角色。随着项目的迭代,定期更新 CHANGELOG 文件变得至关重要。然而,手动将更新后的 CHANGELOG.md 文件推送到 GitLab 仓库的指定分支可能会变得繁琐且容易出错,特别是在自动化部署和持续集成(CI)环境中。幸运的是,GitLab 提供了强大的 API,允许我们自动化这一过程。

步骤 1: 获取 GitLab API 访问令牌

首先,你需要在 GitLab 上创建一个个人访问令牌(Personal Access Token),以便你的脚本可以安全地访问 GitLab API。

  1. 登录到 GitLab。
  2. 进入"用户设置"(User Settings),选择"访问令牌"(Access Tokens)。
  3. 点击"新建个人访问令牌"(New Personal Access Token),输入令牌名称,并选择相应的作用域(至少需要"api"权限)。
  4. 复制生成的令牌,并在你的脚本或环境变量中安全地存储它。

步骤 2: 设置 GitLab API 环境变量

首先,你需要设置一些环境变量来存储 GitLab 服务器的基础 URL、访问令牌、项目 ID 和目标分支名。这些环境变量通常可以在你的 CI/CD 管道中设置,或者在你的本地机器上作为环境变量设置。

bash 复制代码
export CI_SERVER_URL="https://your-gitlab-server.com"
export TRIGGER_USER_ACCESSTOKEN="your_gitlab_api_token"
export CI_PROJECT_ID="your_project_id"
export BRANCH_NAME="your_target_branch"

确保替换上述环境变量中的占位符为实际的 GitLab 服务器地址、API 令牌、项目 ID 和目标分支名。

步骤 2: 编写 Python 脚本

接下来,我们将编写一个 Python 脚本来处理文件的读取、编码和上传过程。

python 复制代码
import requests
import base64
import os

# 从环境变量中获取必要的配置
SERVER_URL = os.environ.get('CI_SERVER_URL')
GITLAB_API_BASE_URL = f"{SERVER_URL}/api/v4/"
GITLAB_API_TOKEN = os.environ.get('TRIGGER_USER_ACCESSTOKEN')
CI_PROJECT_ID = os.environ.get('CI_PROJECT_ID')
BRANCH = os.environ.get('BRANCH_NAME')

def upload_changelog(project_id, branch, token, file_path):
    url = f"{GITLAB_API_BASE_URL}/projects/{project_id}/repository/files/CHANGELOG.md"

    # 读取文件并转换为 base64 编码
    with open(file_path, "rb") as file:
        encoded_content = base64.b64encode(file.read()).decode('utf-8')

    # 构建请求头部和请求体
    headers = {
        'PRIVATE-TOKEN': token,
        'Content-Type': 'application/json'
    }
    data = {
        "branch": branch,
        "file_path": "CHANGELOG.md",
        "content": encoded_content,
        "encoding": "base64",
        "commit_message": 'ci: update CHANGELOG.md[skip ci]',
        "author_email": "[email protected]",  # 替换为你的 Git 邮箱
        "author_name": "Your Name"  # 替换为你的 Git 用户名
    }

    # 发送 POST 请求
    response = requests.post(url, headers=headers, json=data)
    print(response.json())

# 调用函数上传 CHANGELOG.md
upload_changelog(CI_PROJECT_ID, BRANCH, GITLAB_API_TOKEN, "CHANGELOG.md")

步骤 3: 运行脚本

将上述 Python 脚本保存为文件(例如 upload_changelog_to_gitlab.py),并在包含 CHANGELOG.md 文件的目录中运行它。确保你的环境变量已经设置正确,并且 Python 环境已经安装。

注意事项

  1. 权限问题:确保你的 GitLab API 令牌具有足够的权限来修改仓库内容。
  2. 文件编码:GitLab API 需要文件内容以 base64 编码的形式发送。
  3. 分支存在性 :确保目标分支已经在 GitLab 仓库中存在。如果不存在,你可能需要先创建它,或者使用默认的分支(如 mastermain)。
  4. 安全性:不要将敏感信息(如 API 令牌)硬编码在脚本中,而应使用环境变量或安全的配置管理系统。

参考链接

相关推荐
chxii11 分钟前
2.4.5goweb项目上传到csdn的git仓库
git
FJW02081414 分钟前
【Linux】web服务器的部署和优化
linux·运维·服务器·rhce
平生不喜凡桃李32 分钟前
Linux 进程控制
linux·运维·服务器
清风徐来QCQ39 分钟前
git和github的使用指南
git·github
鱼与宇1 小时前
Linux常用命令
linux·运维·服务器
小南家的青蛙1 小时前
lspci的资料
linux·运维·服务器
敖云岚1 小时前
【那些年踩过的坑】Docker换源加速详细教程(截至2025年4月)
运维·docker·容器
serene941 小时前
IntelliJ IDEA 2025.2 和 JetBrains Rider 2025.1 恢复git commit为模态窗口
java·git·intellij-idea
柳如烟@2 小时前
Docker安装ES :确保 Kibana 正确连接 Elasticsearch
运维·数据库·elasticsearch·docker·容器·kibana
sun0077002 小时前
git 工具
git