You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CI实现合并feature到master时自动更新CHANGELOG及防循环方案

借助conventional-changelog/standard-version在Gitlab CI自动更新CHANGELOG的实现方案

是否可行?

完全可行。Gitlab CI支持在分支合并事件触发流水线执行自定义脚本,结合standard-version的自动化版本管理能力,能实现CHANGELOG.md自动更新、版本标签生成及代码推送的全流程自动化。

具体实现步骤

1. 配置项目依赖

  • 确保项目已安装standard-version,若未安装,本地执行npm install --save-dev standard-version,并提交更新后的package.json和package-lock.json到仓库。
  • 在package.json的scripts字段中添加版本更新命令:
    "scripts": {
      "release": "standard-version"
    }
    

2. 编写Gitlab CI配置文件

在项目根目录创建.gitlab-ci.yml,配置仅在master分支合并时触发的流水线任务:

release:
  stage: deploy
  only:
    - master
  except:
    - tags  # 排除标签触发的流水线,避免循环
  before_script:
    - npm install  # 安装项目依赖
  script:
    # 配置CI提交代码的身份信息
    - git config --global user.name "Gitlab CI Bot"
    - git config --global user.email "ci-bot@your-domain.com"
    - npm run release  # 执行版本更新、CHANGELOG生成
    # 使用PAT推送代码和标签(需提前配置CI变量)
    - git push https://${GITLAB_TOKEN}@gitlab.com/your-username/your-project.git master --follow-tags

3. 配置CI推送权限

  • 登录Gitlab,进入项目Settings -> CI/CD -> Variables,添加名为GITLAB_TOKEN的变量,值为拥有仓库写入权限的个人访问令牌(PAT),权限勾选write_repository。
  • 若使用Gitlab内置的CI_JOB_TOKEN,需在Settings -> Repository -> Protected branches中设置master分支允许CI推送。

避免流水线无限循环的方法

  • 排除标签触发:在CI配置中添加except: - tags,standard-version会生成版本标签,推送标签后若不排除会重复触发流水线。
  • 提交信息加跳过标记:修改standard-version的提交模板,让CI生成的版本提交带上[skip ci],Gitlab会自动跳过该提交的流水线触发。项目根目录创建或修改.versionrc:
    {
      "commitMessageFormat": "chore(release): v{{currentTag}} [skip ci]"
    }
    
  • 双重触发限制:结合only: master和提交信息的[skip ci],从触发条件和提交标记两层避免循环。

内容的提问来源于stack exchange,提问作者fudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:14:56