GitLab CI/CD 是一个基于 GitLab 的持续集成和持续交付的服务,它可以帮助开发者在每次提交代码后自动执行一系列的任务,例如编译、测试、打包和部署。本文将介绍如何使用 GitLab CI/CD 自动递增版本号并 push 到仓库,以摆脱手动更新版本号的烦恼。
先决条件
- 拥有一个 GitLab 账号,并创建或导入一个项目
- 在项目根目录下创建一个
.gitlab-ci.yml
文件,用于定义 GitLab CI/CD 的配置 - GitLab Runner 已经安装并注册到 GitLab 服务器,运行 GitLab Runner 的机器中需要安装 jq 工具。
如何配置 Gitlab CI/CD
要使用 Gitlab CI/CD 自动递增版本号并 push 到仓库,我们需要做以下几个步骤:
- 在项目根目录下创建一个
.gitlab-ci.yml
文件,这是一个声明式的文件,用于定义 Gitlab CI/CD 的流程和任务。 - 在
.gitlab-ci.yml
文件中定义一个deploy
阶段,用于执行更新版本号的操作。 - 在
deploy
阶段中使用jq
命令行工具来操作变更版本号。 - 在项目设置中开启 Gitlab CI/CD,并添加相应的环境变量。
这里我们假设项目已经有了版本号,并且存放在package.json
文件中。如果没有,请根据自己的项目情况进行调整。
例如:
{
"name": "my-app",
"version": "1.0.0",
// 其他字段
}
另外,我们还需要在项目设置中添加以下环境变量:
GitLab_Access_Tokens
: 在项目设置 -> Access Tokens 中创建一个 Access Token,并将其值赋给这个环境变量。
这些环境变量可以在项目设置 -> CI/CD -> Variables 中添加,并且可以选择是否保护或者掩藏。
下面是一个示例的 .gitlab-ci.yml
文件:
stages:
- deploy
master-deploy:
stage: deploy
only:
- master # 只有master更新的时候才执行命令
except:
- /^Increment version number to/ # 避免触发以 "Increment version number to" 开头的提交
script: # 执行的命令
- chmod +x ./version_update.sh # 赋予脚本执行权限
- ./version_update.sh # 运行自动更新版本号脚本
下面是一个示例的 version_update.sh
文件:
#!/bin/bash
# 从 package.json 中提取当前版本号
current_version=$(jq -r '.version' package.json)
# 分割版本号
IFS='.' read -ra version_parts <<< "$current_version"
# 递增修订号
((version_parts[2]++))
# 重新构建新版本号
new_version="${version_parts[0]}.${version_parts[1]}.${version_parts[2]}"
# 更新 package.json 中的版本号
jq ".version = \"$new_version\"" package.json > temp.json
mv temp.json package.json
# 提交版本号更新
git config user.name "your-name"
git config user.email "your-email"
git remote add gitlab_origin https://oauth2:$GitLab_Access_Tokens@your-gitlab-host.com/your-username/your-repo.git
git add package.json
git commit -m "Increment version number to $new_version"
git push gitlab_origin HEAD:master -o ci.skip
如何验证结果
当我们提交代码后,Gitlab CI/CD 就会自动触发并执行 .gitlab-ci.yml
文件中定义的任务。我们可以在项目页面 -> CI/CD -> Pipelines 中查看流程的状态和日志。