Day23 - 有了 CI/CD Pipeline ,还需要合适的 Git Workflow

前言

从 Day16 - Day22 我们花了不少时间建立了 CI/CD 流水线,有了这些工具後,交付应用的方式就变得相当简单,只需要建立 Commit 上传到 Repo ,CI/CD 就会自动化部属到 Kubernetes 里面。

https://ithelp.ithome.com.tw/upload/images/20210923/201392359tT1x9lagR.png

当专案团队人数越来越多,在使用 Git 上就需要导入 Workflow,简单讲就是一套使用 Git 的流程,让大家有规矩可以遵守,现在已经有像是 Git flowGithub FlowGitlab flow 等发展成熟的开发流程,可以根据开发习惯、专案内容等资讯挑选出适合团队的 Git Workflow。

图片取至 GitLab Flow

为了方便 Demo ,本次 Lab 设计的 Git Workflow 相当简单,主要分为 dev ( 开发分支 ) 以及 master ( 部属分支 ),开发人员会将程序 Push 到 dev 分支上,并藉由 Merge Request 合并到 master 分支上,接着就来实际走过整个流程吧。

上传新 Commit

为了学习 Git Workflow 的整个流程,我们先来修改一下应用程序,并建立新的 Commmit 。

  1. 进入 Cloud Shell 网站

  2. 点击左上 Explorer -> Open Folder -> 选择 project 资料夹 -> Open

  1. 点击 app.js 并将 res.send() 回传的字串修改

https://ithelp.ithome.com.tw/upload/images/20210923/20139235dJmB1tudxo.png

res.send('This is my Version 2 App')

专案修改完成後就可以上传至 Git Repo ,这里要注意不能直接在 master 分支上做 Commit ,需要建立新的分支并从分支 Commit。

实务上会使用 Protected branches 方式保护 master 使其无法直接 Push 。

  1. 建立 dev Branch
cd ~/project
git branch dev
git checkout dev
  1. 建立 Commit 并 Push 到 GitLab 上
git add .
git commit -m "Create Version 2 App"
git push origin dev
  1. 输入 GitLab 帐号密码後按 Enter
Username for 'https://gitlab.com': 
Password for 'https://[email protected]':
  1. GitLab 网站,找到 web app 的 Repository

https://ithelp.ithome.com.tw/upload/images/20210923/20139235ymsLSSZfRK.png

可以看到 dev 分支成功上传。

建立 Merge Request

现在假设我们的应用程序开发完成,准备要进入部属阶段,就可以建立 Merge Request ,将 dev ( 开发分支 ) 合并到 master ( 部属分支 ) 上。

  1. 点击左边 Merge requests -> 点选 New merge request

https://ithelp.ithome.com.tw/upload/images/20210923/20139235iIrUsSYwEt.png

  1. Source branch 选择 dev, Target branch 选择 master ,接着点选 Compare branches and continue

https://ithelp.ithome.com.tw/upload/images/20210923/20139235NY5cjNkZkP.png

  1. 点选 Create merge request

https://ithelp.ithome.com.tw/upload/images/20210923/20139235EORU79Uhn7.png

Merge Request 就建立完成了,在同意 Merge 之前,会先检查 CI/CD Pipeline 测试有无问题,并且进行 Code Review ,部属前的检查都没问题後,就可以请有权限的人合并。

  1. 点选 Merge 合并分支

https://ithelp.ithome.com.tw/upload/images/20210923/20139235m6Zkfr7JUb.png

合并到 master 後,就会再次执行 CI/CD Pipeline。

  1. 到 CI/CD Pipelines 介面,等待所有 Stages 通过

https://ithelp.ithome.com.tw/upload/images/20210923/20139235iRZntu6W2T.png

若你的 CI/CD Pipelines 正常执行,在 ArgoCD 就可以看到 stage 环境部属成功。

  1. 到 ArgoCD 的 webapp-stage Application 查看,会看到新的 Sync Result

https://ithelp.ithome.com.tw/upload/images/20210923/20139235rRPsuHnGKZ.png

ArgoCD 每隔三分钟才会去检查 Git Repo 是否有做更新,所以会需要等待一段时间。

Stage 环境是一个与生产环境相仿的测试环境,在这里我们会对服务进行实际测试。

  1. 到 Stage App 的网站上,确认服务正常运行

https://ithelp.ithome.com.tw/upload/images/20210923/201392356tBdRaFxbC.png

测试过没有问题,就可以回到 CI/CD 流水线去触发 prod-deploy 的 stage。

  1. 回到 CI/CD Pipelines 介面,点击 prod-deploy 的 stage 开始执行

https://ithelp.ithome.com.tw/upload/images/20210923/20139235hXmVkiQ3ID.png

  1. 回到 ArgoCD 的 webapp-prod Application 查看,等待一段时间就会看到新的 Sync Result

https://ithelp.ithome.com.tw/upload/images/20210923/2013923593FAWMFk9s.png

我们走过一遍从开发者修改 Code 到把应用程序进入部属环境的整个流程,就用一张流程图来了解今天到底做了什麽。

https://ithelp.ithome.com.tw/upload/images/20210923/20139235yMDidlxvtQ.png

总结

到这里,进阶篇就算正式结束了,明天开始就会进入实战篇,讨论一些实务上会遇到的一些问题。最後附上我自己建立的 GitLab Repository 给大家做个参考。


<<:  Day 8 - 用 canvas 复刻 小画家 绘制圆形/椭圆形

>>:  Day 23 - SwiftUI开发实作2 (多爱女朋友测试APP、Alert用法、传递变数)

Day14 Let's ODOO: Security(3) Record rules

如果说Access right是针对model的CURD,那麽Record rules就是针对每笔资...

网路架构检视 - 网路分段/分区与 IP 发放

打 D2R ,连梗图都懒得找... 在资安法中,有些应办事项即使在技术面定义也很广,不会有明确的实作...

Day-20 : devise 安装 part 1

devise是一套使用者认证(Authentication)套件,是Rails社群中最广为使用的一套...

Day 27 Quantum Protocols and Quantum Algorithms

Quantum Key Distribution Polarisation can be one o...

[DAY 21]纠团通知功能(1/3)

先前做的公会文字云 其中任务、副本、主线的出现次数很多代表频道里蛮常有人想纠团的 但我翻了一下纪录成...