Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

基于Travis CI 实践 #102

Open
Genluo opened this issue Jan 10, 2021 · 0 comments
Open

基于Travis CI 实践 #102

Genluo opened this issue Jan 10, 2021 · 0 comments

Comments

@Genluo
Copy link
Owner

Genluo commented Jan 10, 2021

CI/CD 流程

构建流程

针对工具库的构建,需要使用云构建,保证结果的一致,这里选择使用Travis CI作为CI工具(文档真的非常完善),项目的接入过程中主要分为这样几步骤:

  • 登录travis进行用户或者群组的授权,并在travs开启对应的Legacy Services Integration

  • 项目中推送.travis.yml,并在其中配置对应的规则,具体配置可以查看官方引导: click me

  • 配置完成之后,仓库每次push commit将在travis virtual machine中执行对应的依赖安装、项目构建等过程

language: node_js
cache:
  directories:
  - node_modules
node_js:
- lts/*
install:
- npm install
- npm run build

测试流程

当构建完成之后,如果每次构建完成,在travis virtual machine上运行对应项目的测试用例,防止单次commit不带来新的问题,这里我继续使用travis的相关能力

1. 执行测试

  • .travis.yml中配置对应的script命令,运行本地的npm run test命令执行对应的测试用例
  • 如果执行报错将导致这次CI流程报错
  • 如果测试完成,同时可以生成对应的覆盖度文档,如果使用的是jest,可以在cli中添加--coverage即可
  • 测试完成之后,需要更加可视化的分析,可以使用codecov将生成结果进行上传分支

2. coverage分析

  • 测试完成之后,可以通过codecov进行代码的覆盖度分析,并生成对应的badge更好的展示我们的项目
  • 首先登录codecov进行授权,找到对应的仓库,获取对应的Repository Upload Token
  • 将获取的Repository Upload Token作为travis的环境变量进行保存
  • .travis.yml中配置对应codecov命令推送测试结果
language: node_js
cache:
  directories:
  - node_modules
node_js:
- lts/*
install:
- npm install
- npm install codecov -g
script:
- npm run test
after_success:
- codecov -f coverage/*.json

发布流程

1. 基础信息

1)npm version

npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]

其中各个参数代表的意义如下:

major # 主版本号
minor # 次版本号
patch # 补丁号
premajor # 预备主版本
prepatch # 预备次版本
prerelease # 预发布版本

命令执行过程中,npm完成了这样几件事情:

  1. 更改package.json中的version
  2. 如果当前是git仓库,同时将创建一个对应的git tag标签,可以通过--no-git-tag-version参数禁止生成tag信息
  3. 保存修改并生产一个新的commit,其commit内容为Upgrade to v0.0.1可以通过-m参数自定义commit信息
npm version major -m "Upgrade to %s"  # %s 会自动替换成版本号

2)git tag

Like most VCSs, Git has the ability to tag specific points in a repository’s history as being important. Typically, people use this functionality to mark release points (v1.0, v2.0 and so on).

详细的使用方法请执行git tag --help,会有详细的man文档输出

2. 发布流程

1)现有的发布流程(单分支)

  1. 根据changelog生成新的版本号
  2. 修改package中的version字段
  3. 执行git commmitgit taggit push
  4. Ci 监听tag,进行npm包的发布

2)理想发布流程(单分支)

  1. 执行npm version会自动执行commmittagpush等流程,
  2. package script中添加如下命令,每次执行npm version 命令,自动将当前committag推送到远程仓库,从而触发travis进行发布
"postversion": "git push --follow-tags"
  1. 每次调用npm version,调用conventional-changelog生成对应版本的changlog
"version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"
  1. 自动生成changlog,但是并不会生成的对应的Github Release,需要使用到github-release-from-changelog根据changelog生成对应的信息,因为调用过程中需要GITHUB_TOKEN,所以我将这一步放在Travis中执行
after_deploy:
- npm install github-release-from-changelog
- github-release-from-changelog --filename CHANGELOG.md
  • 这里需要注意package repository.url需要是https格式的

3. 资源发布(NPM & gh-pages)

  • travis文档非常完整,其中函数npmGithub PagesGithub releases发布,文档请: click me
  • 其中针对这些类型的发布,需要npm发布秘钥和github push的token
  • 获取到之后,可以将这两个值保存为env对应的配置为NPM_TOKENGITHUB_TOKEN,然后配置中通过$进行获取和使用
  • 整体的配置对应如下:
before_deploy:
- npm run tsdoc # 生成文档
- git config --local user.name "Genluo"
- git config --local user.email "[email protected]"

after_deploy:
- npm install github-release-from-changelog -g
- github-release-from-changelog

deploy:
  - provider: npm # 包发布部署
    email: [email protected]
    api_key:
      secure: [token]
    on:
      branch: master
      tags: true
    skip_cleanup: true
  - provider: pages # API文档部署
    skip_cleanup: true
    github_token: $GITHUB_TOKEN
    local_dir: docs
    keep_history: true
    on:
      branch: master
      tags: true

其他

1. 告警配置

notifications:
  email:
    recipients:
      - [email protected]
    on_success: never
    on_failure: always

详细配置点击: click me

2. 值得借鉴

整个CI流程配置针对新手不是很友好,收集了一些友好的方式,可以借鉴

  • release-it: release需要的能力及其于一身,同时还提供非常灵活的插件机制

3. 常见错误

1) api_key配置错误

建议直接通过官方travis cli进行设置,安装方法click me,后续对照文档执行相关命令

@Genluo Genluo added 工具 开发过程中相关工具 工程相关 labels Jan 10, 2021
@Genluo Genluo changed the title 基于Travis CI实践 基于Travis CI 实践 Jan 10, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
工具 开发过程中相关工具 工程相关
Projects
None yet
Development

No branches or pull requests

1 participant