如何在GitLab CI/CD中自动升级项目的package.json版本?
实现GitLab CI/CD自动升级package.json版本并推送回仓库
核心思路
通过GitLab CI/CD流水线完成三个关键动作:升级版本号、提交修改、推送回仓库。核心是给流水线配置仓库写入权限,同时避免流水线循环触发。
步骤1:配置仓库访问令牌
在GitLab项目中创建一个具备代码写入权限的令牌:
- 进入项目「Settings」→「Repository」→「Deploy tokens」,新建token并勾选「write_repository」权限
- 也可使用个人访问令牌(PAT),确保令牌拥有该项目的「repo」权限
- 进入项目「Settings」→「CI/CD」→「Variables」,添加变量
GITLAB_TOKEN,值为刚才创建的令牌,勾选「Masked」和「Protected」(按需设置)
步骤2:编写.gitlab-ci.yml配置
在项目根目录创建或修改.gitlab-ci.yml,添加以下配置:
stages: - version-upgrade upgrade-version: stage: version-upgrade image: node:latest rules: # 避免循环触发:排除版本更新的自动提交,可根据实际提交信息调整规则 - if: '$CI_COMMIT_MESSAGE !~ /^chore: bump version to.*/' # 仅在指定分支推送时触发,可替换为你的目标分支名 - if: '$CI_COMMIT_BRANCH == "main"' before_script: # 配置Git提交身份,否则无法完成提交 - git config --global user.name "GitLab CI/CD" - git config --global user.email "ci-cd@gitlab.example.com" # 替换远程仓库地址,用令牌完成身份认证 - git remote set-url origin https://gitlab-ci-token:${GITLAB_TOKEN}@${CI_REPOSITORY_URL#*@} # 拉取最新代码,避免浅克隆导致的提交冲突 - git pull origin $CI_COMMIT_BRANCH script: # 用Yarn升级patch版本,不生成Git标签 - yarn version --patch --no-git-tag-version # 获取升级后的版本号,用于提交信息 - NEW_VERSION=$(node -p "require('./package.json').version") # 提交修改的package.json和yarn.lock(Yarn升级版本会同步更新lock文件) - git add package.json yarn.lock - git commit -m "chore: bump version to ${NEW_VERSION}" # 推送修改到当前分支 - git push origin $CI_COMMIT_BRANCH
关键细节说明
- 避免循环触发:通过
rules排除版本更新的自动提交,防止流水线推送代码后再次触发CI,形成无限循环 - Git身份配置:流水线默认没有Git用户信息,必须通过
git config设置,否则提交会失败 - 令牌认证:替换远程仓库地址后,流水线可通过令牌获得写入权限,顺利推送代码
- 同步lock文件:Yarn修改版本号时会更新
yarn.lock,必须一起提交才能保证依赖一致性
测试验证
推送代码到目标分支后,查看GitLab CI/CD流水线状态:
- 流水线执行成功后,检查仓库的
package.json,版本号应已完成patch升级 - 查看提交记录,会出现一条「chore: bump version to x.x.x」的自动提交
内容的提问来源于stack exchange,提问作者Dainank
相关产品推荐
相关产品推荐

