部署到ci上
在circleci上注册,然后关联到github,讲项目重新推送到一个专门用于持续集成的仓库,将该仓库用ci工具联系起来,建立project
如何自动发布
首先要注意发布命令要部署在ci上,但是不是每次运行 yarn ci命令就发布, 发布的主动命令要掌握在自己电脑上,
在本地新建deploy.sh,通过本地运行 ./deploy.sh patch等命令进行自动升版本号并发布,
#!/bin/env bash
npm version $1 && \
git push --follow-tags
逻辑是,运行了npm version patch,所以版本号会变动,然后运行了git push --fpllow -tags,所以会推送到刚才讲的那个持续集成的仓库中,然后关联仓库的线上ci工具会自动运行,走提前配置好了的config.yml代码,如下
#https://github.com/revolunet/create-react-app-circleci/blob/master/.circleci/config.yml
defaults: &defaults
docker:
- image: circleci/node:10
version: 2
jobs:
prepare:
<<: *defaults
steps:
- checkout
- restore_cache:
keys:
- v2-dependencies-{{ checksum "package.json" }}
- run: yarn install
- save_cache:
paths:
- node_modules
key: v2-dependencies-{{ checksum "package.json" }}
- persist_to_workspace:
root: .
paths:
- node_modules
build:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: .
- run: yarn build
- persist_to_workspace:
root: .
paths:
- dist
- package.json
- README.md
test:
<<: *defaults
steps:
- checkout
- attach_workspace:
at: .
- run: yarn ci
- store_test_results:
path: test-results
publish:
<<: *defaults
steps:
- attach_workspace:
at: .
- run: npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
- run: npm publish
workflows:
version: 2
build_accept_deploy:
jobs:
- prepare
- build:
requires:
- test
- test:
requires:
- prepare
- publish:
requires:
- build
filters:
tags:
only: /^v[0-9]+(\.[0-9]+)*/
branches:
ignore: /.*/
然后会在线上自己测试,生成测试覆盖率等,(如果要查看测试覆盖率,还得在test环节再加上发布测试结果到新仓库,等等代码命令行),然后会根据设置的publish的filters来查看是否进行发布新版本。
tags的circleci官方文档
tags的circleci官方用法
总结逻辑是:
一般的push,会在线上ci进行测试,但是监测到不是带有tag的push,所以不会发布
需要发布的时候,不用push 或者publish命令,而是运行 ./deploy.sh patch
但是明明逻辑上都没错了,运行 ./deploy.sh patch,circleci还是没有publish的那一步,搞不懂
只能本地npm publish了暂时
查了别人的代码,都说这样不行,不能用tags来filter,只有branch可以进行filter,思路是平时push就在main主分支上,要发布的时候发布在deploy分支上,所以需要修改配置
首先circleci的config.yml
改成branches 为only deploy
- publish:
requires:
- build
filters:
branches:
only: /deploy/
# tags无效,只能用branches
# tags:
# only: /^v.*/
然后本地deploy文件修改push命令,不必再带tag,注意现在的github是main分支,不再是master了
#!/bin/env bash
npm version $1 && \
git push origin main:deploy
这样普通push的时候不会进行发布,需要发布的时候运行 ./deploy.sh patch就可以了,只不过会多出一个deploy分支