目录
语义化版本控制
主要版本变更 (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

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? 为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? Apr 05, 2025 pm 05:51 PM

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

如何通过CSS选择第一个类名为item的子元素? 如何通过CSS选择第一个类名为item的子元素? Apr 05, 2025 pm 11:24 PM

在元素个数不固定的情况下如何通过CSS选择第一个指定类名的子元素在处理HTML结构时,常常会遇到元素个数不�...

See all articles