关于devops:自动产出changelog第三节releaseit与Drone持续部署工具结合使用

6次阅读

共计 3015 个字符,预计需要花费 8 分钟才能阅读完成。

背景

通过《主动产出 changelog- 第一节:标准提交代码》与《主动产出 changelog- 第二节:主动产出》两节内容的记录后,日志能实现一键产出。在小我的项目中未接入继续部署的,本地跑 release-it 命令就能简略实现版本标记、产出日志、推送 git 与 npm 的流程,可说是一步到位。公司我的项目基于 Drone 继续部署工具的研发流程下,须要将下面提及的步骤联合到继续部署工具进行。

简略阐明一下我当初基于 Drone 打造的开发流程:

分支状况:

  • master 分支作为代码汇总的分支,PR/MR 后触发继续部署主动部署到测试服务。
  • production 分支作为生产分支,push 代码后触发继续部署主动部署到线上服务。

研发至公布操作过程:

  1. fork 一份代码至本人名下,而后本地开发。
  2. 实现开发需提测时,发动 PR/MR 推到主仓库,组长或组员 code review 通过后合并至主仓 master 分支
  3. 合并 master 至 production,更新日志与版本号后提交 production 分支进行公布操作

在下面流程中人工更新版本的环节在多人合作的过程中会存在比拟大误操作危险,所以才打算用工具实现自动更新版本的工作。这就是《主动产出 changelog》文章三节内容的最终目标。

本文提及的内容与我司当初应用 Drone 继续交付工具与工作流程高度绑定不倡议生吞活剥,整体参考思路大致相同倡议借鉴学习。

上面解说继续部署中 release-it 在继续部署工具 Drone 应用的细节局部。

联合应用的细节

继续部署中的流程分为:拉取仓库、构建代码、部署推送,三个局部。当初须要在这个流程中减少“版本更新”这一环节,上面是 drone 部署配置参考例子:

kind: pipeline
name: releases

steps:
- 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…

正文完
 0