背景
通过《主动产出changelog-第一节:标准提交代码》与《主动产出changelog-第二节:主动产出》两节内容的记录后,日志能实现一键产出。在小我的项目中未接入继续部署的,本地跑release-it命令就能简略实现版本标记、产出日志、推送git与npm的流程,可说是一步到位。公司我的项目基于Drone继续部署工具的研发流程下,须要将下面提及的步骤联合到继续部署工具进行。
简略阐明一下我当初基于Drone打造的开发流程:
分支状况:
- master分支作为代码汇总的分支,PR/MR后触发继续部署主动部署到测试服务。
- production分支作为生产分支,push代码后触发继续部署主动部署到线上服务。
研发至公布操作过程:
- fork一份代码至本人名下,而后本地开发。
- 实现开发需提测时,发动PR/MR推到主仓库,组长或组员
code review
通过后合并至主仓master
分支 - 合并master至production,更新日志与版本号后提交
production
分支进行公布操作
在下面流程中人工更新版本的环节在多人合作的过程中会存在比拟大误操作危险,所以才打算用工具实现自动更新版本的工作。这就是《主动产出changelog》文章三节内容的最终目标。
本文提及的内容与我司当初应用Drone继续交付工具与工作流程高度绑定不倡议生吞活剥,整体参考思路大致相同倡议借鉴学习。
上面解说继续部署中release-it
在继续部署工具Drone应用的细节局部。
联合应用的细节
继续部署中的流程分为:拉取仓库、构建代码、部署推送,三个局部。当初须要在这个流程中减少“版本更新”这一环节,上面是drone部署配置参考例子:
kind: pipelinename: releasessteps:- name: release image: tarampampam/node:12.13-alpine environment: SSH_KEY: from_secret: ssh_key commands: - GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $SSH_KEY" - git config --global user.email "in_boot@uxfeel.com" - git config --global user.name "in_boot" - npm ci - npm run build - npm run test:unit - npm run release -- --ci --no-git.requireUpstream --git.pushRepo=origin- name: release2npm image: plugins/npm settings: username: in_boot email: in_boot@uxfeel.com password: from_secret: npm_password registry: http://self.uxfeel.com/trigger: branch: - production event: - push
代码尽管是简略几行,背地细节及思路却比拟繁冗的,须要具体地提及一下。
流程
release-it
默认会做以下行为:
Git局部:
- 依据上一个版本标签(Tag)与最新历史进行比照并产出日志到日志文件;
- 解析日志内容更新版本号;
- 提交内容变动并打上版本标签;
- 推送至远端;
npm:
- 推送至npm服务;
推送npm服务显然是不须要的,这里我在release-it配置敞开其性能。然而是git局部遇到了比拟多的问题。
问题
遭逢问题1:没有Git
在继续部署工具中应用,第一步对于Git的局部就卡住了,提醒没有git。因为node官网提供的docker镜像内并没有git,要用上git我换成了这个镜像:tarampampam/node:12.13-alpine。
遭逢问题2:ssh没有受权
如何在容器中提供凭证给git推送代码呢?存在两种状况http与ssh有所不同:
http的状况将账号密码写在Drone的secret
中,并作为零碎变量应用。而后敞开release-it的git-push环节,推送git局部手动进行能力反对账号密码。
environment: USERNAME: from_secret: username PASSWORD: from_secret: password commands: - git config --global user.email "in_boot@uxfeel.com" - git config --global user.name "in_boot" - npm ci - npm run release -- --ci --no-git.requireUpstream --git.pushRepo=origin - git push "https://$USERNAME:$PASSWORD@myrepository.biz/file.git"
ssh的状况须要批改GIT_SSH_COMMAND(git版本高于2.7.0),在Drone的secret
中增加ssh_key(私钥),并作为零碎变量应用,在GIT_SSH_COMMAND设置就能减少进去。
environment: SSH_KEY: from_secret: ssh_key commands: - GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $SSH_KEY" - git config --global user.email "in_boot@uxfeel.com" - git config --global user.name "in_boot" - npm ci - npm run release -- --ci --no-git.requireUpstream --git.pushRepo=origin
遭逢问题3:release-it提醒没有设置upstream branch
ERROR No upstream configured for current branch.Please set an upstream branch.Documentation: https://git.io/release-it-git
这种状况间接应用--no-git.requireUpstream --git.pushRepo=origin
就防止了release-it的查看。
遭逢问题4:npm install 后会扭转package-lock.json文件
扭转了package-lock.json文件Git状态就受到影响,releaset-it
后续操作就无奈进行。这里能够应用npm的另一个命令解决此问题:
$ npm ci
yarn的用户能够应用上面命令取得同样的成果:
$ yarn install --frozen-lockfile
结语
最初感激一下咱们的前端小伙伴能陪着我折腾这套货色,从2019年年末开始至今研发流程迭代了好几个版本,从刚开始的git-flow到当初gitlab-flow,从不懂得为何要用继续部署工具到学习devops、继续交付与精益思维,一路走到当初独特学习共同进步。还得感激运维小哥的反对与技术总监的放行,才有机会部署上云和有工夫与精力执行至今。
援用
https://stackoverflow.com/que...