前端多分支自动化部署

主要痛点(并行的痛):

1、前端各自开发、无统一构建环境

2、运营系统目前采用单项目管理,需要支撑多个业务的运营功能,多个业务并行开发测试(上线时间不一致)的情况难以避免

3、多人开发带来的代码混乱

解决办法思路:

针对核心问题多业务并行开发测试,引入多分支代码管理模型,相应支持多分支并行集成部署,同步解决无统一构建环境的问题。

主要讲述如下几大部分:

1、前端分支管理模型

2、多分支多环境的CI/CD

3、代码自动生成

一、前端分支管理模型

git的工作流模型有很多种,如集中式,gitflow,功能分支工作流等等,按照适合当前工作模式和场景的方式定义即可,针对我们所面临的问题,工作流如下:

说明:(如下xxx表示为任意名,不重复即可)

master: 作为pre-pro和pro环境发布所用的分支;不可直接提交代码

release/xxx:作为当前迭代版本的主分支,当前迭代开始时由owner或者master从最新的master分支切出,xxx没有固定的名字,可以根据需要自行决定;不可直接提交代码;此分支作为此迭代版本功能验证的分支;

feature/xxx:作为某个功能开发的分支,由开发者自行从对应的release/xxx分支切出,并在此开发分支上完成功能开发、连调、自测、静态代码检测、单元测试等,完成后提交merge request 到release/xxx,主要目的是隔离工开发者的开发内容,方便code review;

feature/bugxxx:功能类似feature/xxx,单独列出只是为了说明测试阶段的bug修复都是从release/xxx切分支出来改bug

release/hotfix:线上紧急bug修复分支,从最新的master分支切出,开发人员基于此分支切feature/xxx来修复bug或者直接在本分支上修复后提交,测试验证后提交merge request到master

可以看出如上的工作流模式其实是集中式和gitflow方式的合成体,以release/xxx分支作为迭代开发测试的主分支 解决了多业务并行开发测试的问题,release/xxx合并到master的时机可控,也为功能迭代上线时间的不确定性带来可以变化的空间

下面对关于本模型的可能的一些问题说说解决的方式或思路(欢迎补充、交流):

1、同时进行的两个release/xxx分支,改动涉及相同的文件、公共模块、方法等带来的冲突

解决思路:1)有经验的开发人员鉴别到这种情况后协商调整,避免相互影响;2)后上线的release/xxx分支将已先上线的release/xxx的内容rebase回本分支,并解决冲突和回归验证

2、正常自动化流程会自动发布release/xxx分支的最新内容,可能会影响此分支正在测试的功能

解决思路:1)规定代码合并的时机,如每日下班后或者上班前由owner或者master或其他人定时合并,减少对正在测试功能的影响;2)新增专门用于测试的稳定分支,由测试人员去维护,自行决定将release/xxx分支合并到稳定分支的时机,此方式需要调整自动部署策略

3、其他,欢迎补充交流

以上分支模型是支持多业务同时开发测试的基础,需要相应的CI/CD去保证可行

TODO:各类分支模型详解

二、多分支多环境的CI/CD

常见的CI/CD方案有 1、gitlabCI/CD;2、利用jenkins自定义发布脚步;3、github CI/CD;4、各种云部署方案,如coding,gitee等

具体实现时可以采用1、编译构建、发布静态代码到目标机器;2、编译构建、打包为docker image采用docker部署等等方式;其中线上部署一般会涉及到CDN,那么相应的CI/CD流程要针对CDN的发布 做相应的调整;

以下基于gitlab CI/CD部署docker image的方式为例说明:

1、通过gitlab-ci.yml文件自定义构建流程(忽略了敏感信息和部分细节,仅用来说明过程)

stages:

- test

- build

- ship

- deploy

cache: 

    untracked: true

job_release_test:

    stage: test 

    tags:  - frontend 

    environment:   

        name: TEST 

    script:  - 执行代码检测代码 

    only:  - /^release\/.*$/

job_release_build: 

    stage: build 

    tags:  - frontend 

    environment:   

        name: TEST 

    script:  - 依赖安装、代码构建的命令 

    only:  - /^release\/.*$/

job_release_ship:

  stage: ship

  tags:  - frontend

  environment:

    name: TEST

  script:  - 将构建结果发送到远程docker镜像仓库

  only:  - /^release\/.*$/

job_release_deploy:

  stage: deploy

  tags:  - frontend

  environment:

    name: TEST

  script:  - 部署启动docker

  only:  - /^release\/.*$/

job_master_build:

  stage: build

  image: 基础镜像路径

  tags:  - frontend

  environment:

    name: DEMO

  script:  - 依赖安装、代码构建的命令

  only:  - master

job_master_ship:

  stage: ship

  tags:  - frontend

  environment:

    name: DEMO

  script:  - 将构建结果发送到远程docker镜像仓库

  only:  - master

job_master_deploy:

  stage: deploy

  tags:  - frontend

  environment:

    name: DEMO

  script:  - 部署启动docker

  only:  - master

以上可以看出 通过各stage中only字段的定义,release/xxx分支都会被允许单独执行CI/CD,在部署阶段保证各release/xxx分支都被单独部署,且可单独访问,即完成了多分支并行开发测试的基本诉求。

这里边有很多细节需要运维的配合才能处理好,比如怎么让不同的release/xxx分支单独部署起来且可以单独域名或者路径访问?涉及到的docker image应该如何编排?如果是vue用到了history模式需要做访问路径重定向应该怎么处理?同一套代码部署到不同环境(test、demo、线上)访问的后端接口地址是不同的,怎么方便的处理?等等....... 这些问题都很细节,不同部署方案都有所不同,这里不在细讲,欢迎留言交流

三、代码自动生成

这部分篇幅较长,待更新完整文章...

参考文章:

https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md#241-%E5%B7%A5%E4%BD%9C%E6%96%B9%E5%BC%8F

https://juejin.cn/post/6844903869739171848

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容