通过 GitLab CI/CD 自动更新版本号发布

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 到仓库,我们需要做以下几个步骤:

  1. 在项目根目录下创建一个 .gitlab-ci.yml 文件,这是一个声明式的文件,用于定义 Gitlab CI/CD 的流程和任务。
  2. .gitlab-ci.yml 文件中定义一个 deploy 阶段,用于执行更新版本号的操作。
  3. deploy 阶段中使用 jq 命令行工具来操作变更版本号。
  4. 在项目设置中开启 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 中查看流程的状态和日志。