简介
持续集成指的是, 频繁地 (一天多次) 将代码集成到主干.
它的好处主要有两个:
1. 快速发现错误. 每完成一点更新, 就集成到主干, 可以快速发现错误, 定位错误也比较容易.
2. 防止分支大幅偏离主干. 如果不是经常集成, 主干又在不断更新, 会导致以后集成的难度变大, 甚至难以集成.
持续集成的目的, 就是让产品可以快速迭代, 同时还能保持高质量. 它的核心措施是, 代码集成到主干之前, 必须通过自动化测试. 只要有一个测试用例失败, 就不能集成.
GitHub Actions https://github.com/features/actions 是 GitHub https://github.com/ 的持续集成服务, 于 2018 年 10 月推出, 现在已经到了 beta 测试版本, 预计将于今年的 11 月份正式发布.
本文是一个简单教程, 演示如何使用 GitHub Actions 自动发布一个 NPM 包.
实现步骤
1. 创建 workflow 模板
点击 GitHub Actions https://github.com/features/actions 页面中的 Sign up 按钮, 即可获取资格. 进入你需要发布的 GitHub 项目页面, 就会出现项目的 Actions 图标.
进入 Actions Tab 页:
有各种类型的 workflow 模板可供选择. 这里我们选择 Node.JS Package 点击
- Set up this workflow
- .
选择默认配置文件:
GitHub 项目中即可生成下列文件
- .GitHub
- |- workflows
- |- npmpublish.YAML .
2. 本地 YAML 文件配置
进入本地项目目录拉取 GitHub 最新代码. 编辑 npmpublish.YAML 文件, 下面是我的 GitHub 项目 lottie-iamge https://github.com/gaobowen/lottie-image 使用的配置文件.
- name: Node.JS Package
- on:
- pull_request:
- branches:
- - master
- push:
- branches:
- - master
- jobs:
- build:
- runs-on: Ubuntu-latest
- steps:
- - uses: actions/checkout@v1
- - uses: actions/setup-node@v1
- with:
- node-version: 12
- - run: NPM ci
- - run: NPM test
- publish-NPM:
- needs: build
- runs-on: Ubuntu-latest
- steps:
- - uses: actions/checkout@v1
- - uses: actions/setup-node@v1
- with:
- node-version: 12
- registry-url: https://registry.npmjs.org/
- - run: NPM publish
- env:
- NODE_AUTH_TOKEN: ${{secrets.npm_token}}
对比可看出, 除了 publish-gpr 外几乎没有任何修改.
.YAML 文件的主要结构如下:
- name: workflow_name
- on:
- pull_request:
- branches:
- - master
- push:
- branches:
- - master
- jobs:
- job1:
- runs-on: platform
- steps:
- - uses: action1
- - uses: action2
- with:
- KEY : VALUE
- - run: command1
- - run: command2
- env:
- KEY: VALUE
- job2:
- needs: job1
- runs-on: platform
- steps:
- - uses: action1
- - uses: action2
- with:
- KEY : VALUE
- - run: command1
- - run: command2
- env:
- KEY: VALUE
下面解释各部分的含义:
name 表示此工作流的名称.
on 表示触发条件, 例如上述文本表示当 master 分支合并 pr 和推送时会触发 workflow.
jobs 工作集合, 例如 jobs 内部的 job1,job2 表示具体的工作任务的 ID 可以自定义只要不冲突即可.
needs 表示当前的 job 依赖与另外一个 job, 例如上面的 job2 依赖于 job1,publish-NPM 依赖于 build.
runs-on 表示工作所在的虚拟机操作系统, 目前可选的系统有 Ubuntu-latest,Ubuntu-18.04,Ubuntu-16.04,Windows-latest,Windows-2019,Windows-2016,macOS-latest,macOS-10.14.
steps 表示 job 所执行的 actions 和 commands 集合. 具体如何实现和自定义 action 今后会在专门的文章中讲解.
这样整个 workflow 的结构就大致清楚了.
下面我们回到 npmpublish.YAML 文件, 删除掉整个 publish-gpr job 节点(gpr 是 GitHub Package Registry https://github.com/features/package-registry 的缩写, 目前该功能还在内测中, 申请资格需要等待很长时间, 这里直接略过), 只保留 build 与 publish-NPM.
3. 配置. npmignore 文件
在本地项目的根目录中添加. npmignore 文件.
排除掉. GitHub 目录和其他无关的目录文件.
例如, 在我的项目 https://github.com/gaobowen/lottie-image 中就排除了. GitHub 目录和项目测试文件
test/
.GitHub/
test.JS
4. 添加 NPM token
打开 NPM account 页面 -> Tokens -> Creat New Token 将 token 复制粘贴下来并保存在本地(token 在页面关闭后将不再出现).
打开 GitHub 项目页面选择 Settings -> Secrets -> add a new secret .
名称与配置文件的中的名称保持一致. 例如, 项目中配置文件为
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
这里的 Name 就填 npm_token .
5. 配置 package.JSON 与 package-lock.JSON
修改 package.JSON 与 package-lock.JSON 的版本号使其保持一致. 若项目中没有 package-lock.JSON 文件, 可以在项目中执行 NPM i 会自动生成该文件.
6. 提交推送
提交推送本地项目至 GitHub, 打开项目的 Actions 页面即可查看持续集成结果.
参考文档
NPM-developers https://docs.npmjs.com/misc/developers.html
GitHub Actions 入门教程
来源: https://www.cnblogs.com/gaobw/p/11593602.html