目录
语义化版本控制
主要版本变更 (Major)
次要版本变更 (Minor)
修补版本变更 (Patch)
提交信息格式
提交标题
提交脚注
强制执行提交信息格式
生成发布
发布派对!
首页 web前端 css教程 如何通过连续部署自动化项目版本并发布

如何通过连续部署自动化项目版本并发布

Apr 01, 2025 am 04:16 AM

How to Automate Project Versioning and Releases with Continuous Deployment

采用语义化版本控制能更轻松地维护和沟通软件变更,但手动操作却很繁琐。即使手动合并PR、标记提交并推送发布,仍然需要编写发布说明。步骤众多,且重复性高,耗时费力。

本文将介绍如何通过将语义化版本控制集成到持续部署流程中,实现更高效的流程并完全自动化发布流程

语义化版本控制

语义化版本是一个由三个数字组成的版本号,例如 1.4.10。每个数字都有特定的含义:

主要版本变更 (Major)

第一个数字表示主要版本变更,意味着存在破坏性变更。

次要版本变更 (Minor)

第二个数字表示次要版本变更,意味着添加了新功能。

修补版本变更 (Patch)

第三个数字表示修补版本变更,意味着修复了bug。

可以将语义化版本更简洁地理解为:破坏性变更.功能变更.错误修复。这种描述方式更精确,避免歧义。

提交信息格式

为了确保正确递增语义化版本号并发布正确版本,需要标准化提交信息格式。标准化的提交信息格式有助于确定何时递增哪个数字,并轻松生成发布说明。这里将使用 Angular 提交信息约定,当然也可以根据需要更改。

格式如下:

<code></code>
登录后复制

每个提交信息包含标题正文脚注

提交标题

标题是必须的,它具有特殊的格式,包括类型、可选的范围主题

标题的类型是必填字段,用于说明提交内容对下一个版本的影响。它必须是以下类型之一:

  • feat: 新功能
  • fix: bug 修复
  • docs: 文档变更
  • style: 不影响代码含义的变更(例如:空格、格式、缺少分号等)
  • refactor: 代码重构,既不修复bug也不添加功能
  • perf: 性能改进
  • test: 添加或修正测试
  • chore: 构建流程或辅助工具和库的变更,例如生成文档

范围是一个分组属性,用于指定提交相关的子系统,例如 API、应用程序的仪表板或用户帐户等。如果提交修改了多个子系统,则可以使用星号 (*) 代替。

标题主题应简要描述所做的更改。编写主题时需遵循以下规则:

  • 使用祈使句,现在时态(例如,“更改”而不是“已更改”或“更改”)。
  • 首字母小写。
  • 末尾不加句点 (.)。
  • 避免主题长度超过 80 个字符。提交正文。

与标题主题一样,正文也应使用祈使句,现在时态。它应包括更改的动机,并将其与之前的行为进行对比。

提交脚注

脚注应包含任何有关破坏性变更的信息,也是引用此提交关闭的问题的地方。

破坏性变更信息应以 BREAKING CHANGE: 开头,后跟空格或两行新行。其余提交信息在此处。

强制执行提交信息格式

在团队协作中,标准化任何需要每个人都遵守的内容始终是一项挑战。为了确保每个人都使用相同的提交标准,我们将使用 Commitizen。

Commitizen 是一个命令行工具,它简化了使用一致的提交信息格式的过程。使仓库与 Commitizen 兼容意味着团队中的任何人都可以运行 git cz 并获得详细的提示以填写提交信息。

生成发布

现在我们知道我们的提交遵循一致的标准,我们可以开始生成发布和发布说明了。为此,我们将使用名为 semantic-release 的包。这是一个维护良好的包,对多种持续集成 (CI) 平台具有良好的支持。

semantic-release 是我们旅程的关键,因为它将执行发布所需的所有步骤,包括:

  1. 确定您发布的最后一个版本
  2. 根据自上次发布以来添加的提交确定发布类型
  3. 为自上次发布以来添加的提交生成发布说明
  4. 更新 package.json 文件并创建与新发布版本对应的 Git 标签
  5. 推送新版本

任何 CI 都可以。在本文中,我们使用 GitHub Action,因为我喜欢在寻求第三方解决方案之前使用平台的现有功能。

安装 semantic-release 的方法有很多,但我们将使用 semantic-release-cli,因为它提供了逐步操作。让我们在终端中运行 npx semantic-release-cli setup,然后填写交互式向导。

该脚本将执行以下几件事:

  • 使用提供的 NPM 信息运行 npm adduser 以生成 .npmrc。
  • 创建 GitHub 个人访问令牌。
  • 更新 package.json。

CLI 完成后,它会将 semantic-release 添加到 package.json,但不会实际安装它。运行 npm install 以安装它以及其他项目依赖项。

剩下的唯一事情是通过 GitHub Actions 配置 CI。我们需要手动添加一个将运行 semantic-release 的工作流程。让我们在 .github/workflows/release.yml 中创建一个发布工作流程。

<code>name: Release
on:
  push:
    branches:
      - main
jobs:
  release:
    name: Release
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
          node-version: 12
      - name: Install dependencies
        run: npm ci
      - name: Release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        # If you need an NPM release, you can add the NPM_TOKEN
        #   NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: npm run release</code>
登录后复制

Steffen Brewersdorff 已经出色地介绍了使用 GitHub Actions 进行 CI,但让我们简要回顾一下这里发生的事情。

这将等待对主分支的推送发生,然后才运行管道。可以随意更改此设置以在一个、两个或所有分支上运行。

<code>on:
  push:
    branches:
      - main</code>
登录后复制

然后,它使用 checkout 拉取仓库并安装 Node,以便 npm 可用于安装项目依赖项。如果这是您偏好的内容,则可以添加测试步骤。

<code>- name: Checkout
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v1
with:
    node-version: 12
- name: Install dependencies
run: npm ci
# You can add a test step here
# - name: Run Tests
# run: npm test</code>
登录后复制

最后,让 semantic-release 完成所有神奇的操作:

<code>- name: Release
run: npm run release</code>
登录后复制

推送更改并查看操作:

现在,每次对指定分支进行提交(或合并)时,操作都将运行并进行发布,并附带发布说明。

发布派对!

我们已经成功创建了一个 CI/CD 语义化发布工作流程!是不是没那么痛苦?设置相对简单,拥有语义化发布工作流程没有任何缺点。它只会使跟踪更改变得容易得多。

semantic-release 还有许多插件可以实现更高级的自动化。例如,甚至还有一个 Slack 发布机器人,可以在项目成功部署后发布到项目频道。无需前往 GitHub 查找更新!

以上是如何通过连续部署自动化项目版本并发布的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
静态表单提供商的比较 静态表单提供商的比较 Apr 16, 2025 am 11:20 AM

让我们尝试在这里造成一个术语:“静态表单提供商”。你带上html

使Sass更快的概念证明 使Sass更快的概念证明 Apr 16, 2025 am 10:38 AM

在一个新项目开始时,Sass汇编发生在眼睛的眨眼中。感觉很棒,尤其是当它与browsersync配对时,它重新加载

每周平台新闻:HTML加载属性,主要的ARIA规格以及从iframe转移到Shadow dom 每周平台新闻:HTML加载属性,主要的ARIA规格以及从iframe转移到Shadow dom Apr 17, 2025 am 10:55 AM

在本周的平台新闻综述中,Chrome引入了一个用于加载的新属性,Web开发人员的可访问性规范以及BBC Move

带有HTML对话框元素的一些动手 带有HTML对话框元素的一些动手 Apr 16, 2025 am 11:33 AM

这是我第一次查看HTML元素。我已经意识到了一段时间,但是尚未将其旋转。它很酷,

纸张形式 纸张形式 Apr 16, 2025 am 11:24 AM

购买或建造是技术的经典辩论。自己构建东西可能会感觉更便宜,因为您的信用卡账单上没有订单项,但是

'订阅播客”链接应在哪里? '订阅播客”链接应在哪里? Apr 16, 2025 pm 12:04 PM

有一段时间,iTunes是播客中的大狗,因此,如果您将“订阅播客”链接到喜欢:

它全部都在头上:管理带有React头盔的React Power Site的文档头 它全部都在头上:管理带有React头盔的React Power Site的文档头 Apr 15, 2025 am 11:01 AM

文档负责人可能不是网站上最迷人的部分,但是其中所处的内容对于您的网站的成功也一样重要

托管您自己的非JavaScript分析的选项 托管您自己的非JavaScript分析的选项 Apr 15, 2025 am 11:09 AM

有很多分析平台可帮助您跟踪网站上的访问者和使用数据。也许最著名的是Google Analytics(广泛使用)

See all articles