Soft_Job 板


LINE

这篇来聊 CI (Continuous integration) 的导入须知, 什麽是 CI ,中文常见是翻"持续整合"。 (也有人是 CI / CD 持续整合/持续交付 并称, 我以下都只说 CI,但涵盖是 CI/CD。) 虽然是一个常见而且通用的概念, 我个人觉得因为名字不太好懂,很多人还是一知半解。 DevOps 很大一部分的工作会跟这题有关, 这个词的发展就我接触的顺序早 DevOps 不少。 这十年来有些词汇的发展先後不一, 都是根据当时的市场跟分工需求,定义上有些混乱。 -------- CI 最基本的概念,至少包含, 把一个专案从 source code ,到他真的上服务, 这一段 flow 中间的自动化。 换言之, checkout 自动,build 自动, local(nightly) release 自动,deploy 自动。 很多人对这题可能认知的只有build专案的服务。 虽然最早 CI 其实是搭配 test ,因为持续发布持续测试, 所以在每个版本可以迅速找到"假设"被破坏的地方回馈。 不过国内撰写测试风气不发达, 真的做到测试能涵盖到确保安全的地方,就我所见不多。 但即使如此,build 仍然是过版失误中,相当常见的主因, 诸如 build 错版本,丢错版本,丢错地方,下错环境参数等等。 CI 在 build 自动化的优点在於, 只要设定好一个已经变化不大的 build process 。 剩下的要出错的机率很低, 因为机器基本上都是 step by step process。 一般来说,做好 CI 有几个好处: 1. build 版不用倚赖特定工程师的脑内思维,把工程师的中断减少(不会被叫去过版或buil 2. 设定即文件,而且是活的文件 3. 为测试整合打好基础 4. 减少测试环境的过版负担 5. 能够提供水平角色(pm/qa) 自动存取最新 build 的资料, 包括 web / app / 各类执行档。 有些专案甚至是每天对外发 nightly version , 就是个典型 CI 流程的特徵。 ---------- 目前圈内常见的 CI 手段, 最基本的大概是定期跑排程,一些 batchjob 勉勉强强就算数了。 其他常见工具包括 jenkins (前身为 hudson),Travis CI , travis CI 的优点是跟 github 无缝整合。 可能还有一些其他的,我自己是比较习惯用 jenkins 。 也不是他特别好还是怎样,从早期就一直用到现在懒得改, 另外是步骤都可以 shell base , 换言之你能用指令做到的就能用他做,我是用的很习惯。 另外 azure devop 也有提供 pipeline & release, 可以做对应的事情,不过 azure 封装的比较多, 用起来我自己是觉得跟 jenkins 风格大异其趣。 -------- 导入时的第一个问题,build 的环境处理: 当你装好 jenkins ,他就是个 web server , 然後你可以使用该台 server 上的环境进行建置。 也可以建多台 slave ,到别台机器上去建置。 (比方说某些有平台相依的,ex. mac vs windows) 建置时有些工具需要分开安装, 如 build android 需要 android sdk , build .net framework 需要 msbuild。 dotnet core 需要 dotnet core runtime 。 除了像 azure pipeline 有提供线上能 build 的机器(要收钱), 其他大部分都是得自己搞定。 另外要留意一件事情是为了隔离性, CI 的执行使用者通常不是我们进入操作的高权限帐号, 一开始的各类设定,档案权限处理,通常会花一点力气。 --------- 第二个常碰到的问题,在於不熟悉指令建置的 input output 。 比方说微软体系的 msbuild ,多数人可能用过 vs 的发布工具, 但对 msbuild 怎麽用不熟。 其实能用 vs 做到的都能用 msbuild 做到, 但有时需要钻过茫茫复杂设定海。 另外就是 build 出来的 package 在哪,有时候需要找, 有些专案设定甚至会影响 build 的结果。 要留意跟团队沟通有变化时要更新对应的 build 设定。 像是 android 有些人会改 gradle 设定档,加入档名的变化, 这个设定如果 build 那边没考虑到就会事倍功半。 --------- 第三个常碰到的问题,在於权限管理的模型设定, 有些地方是采取集中建置的策略, 有些地方是让工程师各自建置的策略。 其中特别需要的部分, 是把测试环境跟建置环境的权限分开。 另外设定档的保存,不要让没有权限的人, 存取到超过他权限的设定档也是重要课题之一。 ----------- 第四题跟第三题有点重叠,在於各类环境设定的处理。 目前主流有几派,一个是设定在 os 的环境变数。 (台湾我是非常少看到有专案这样做) 一个是独立保管设定档, 但保管在哪这点目前无标准化,就我看到大家都是各做各的。 如找个 private blob (or s3) 放之类的, 也有人是交给 ansible 之类的发布作业接手。 ----------- 常见的问题还包括讨厌的跨专案间的相依问题, 比方说某专案需要某建置工具的 A 版本, 另一个专案需要某建置工具的 B 版本。 有时候会需要费心去处理版本的 bin 指定跟环境安装。 ---------- 最後因为每次建置,大多数预设的情况, 我们会保留 workspaces 跟 output file 。 所以如果专案 build 出来的东西不幸比较肥, 那可能会常常把伺服器的空间塞爆, 这里的空间管理就会是问题。 常见做法是直接接到外部的 file service 做保存。 ---------- CI 有时候大家会开始设定 trigger ,可能 A 专案建置完之後,要跟着整套建完上测试之类的。 当单一建置时间太常,团队人又多时,有可能会导致建置服务的塞车。 我们可能也要留意设定上,设定是不是适当的, 举例,每次都需要 clone 整个专案吗? 还是只需要取最新版就好。 每次都要重装相依性套件吗?(ex. maven , npm , nuget ) 能不能 local cache ,或是内部有个 cache service, 有些设定在 build 时,会需要稍微调校来加快效能。 总之,很多人觉得自动化建置,等於再久也没关系, 实务经验来说,我觉得还是得追求建置速度, 快速反应,快速前进。 还有一些相对比较不多人关心的问题, build fail 的处理要怎麽安排,这些就是有空再说了。 我个人会建议,有机会的话,多了解一些发布流程如何自动化, dotnet 工程师看看 msbuild 跟 dotnet(core) . android 玩一玩 ./gradlew assembleRelease signapk 怎麽指令化操作 ios 玩一玩 xcode 对自己手边专案的掌握跟理解都会比较上升。 有时候也可以帮自己省下不少时间, 省下多一点的时间,不管是要混要认真, 还是要在周末上网写废文,都会比较有时间。(笑) ----- Sent from JPTT on my Google Pixel 3 XL. -- I have a dream, it's silly but beautiful. --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.167.67.203 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1598230146.A.8A1.html
1F:推 ckp4131025: 推 08/24 08:55
2F:推 jerryshadow: 推 08/24 09:02
3F:推 imchou239: (不会'背'叫去过版或build) -> 应为"被" 08/24 09:16
已修正,谢啦 ※ 编辑: TonyQ (114.136.135.6 台湾), 08/24/2020 09:28:58 ※ 编辑: TonyQ (114.136.135.6 台湾), 08/24/2020 09:29:19 ※ 编辑: TonyQ (114.136.135.6 台湾), 08/24/2020 09:29:34
4F:推 virgil246: 推 08/24 09:31
5F:推 bbbgreentea: 推 08/24 09:52
6F:推 brian80122: 推 08/24 09:56
7F:推 et84121: 推 08/24 10:54
8F:推 AgileSeptor: 推 08/24 10:58
9F:推 black2575: 推 08/24 11:31
10F:→ shooter555: 我是用gitlab-ci, 重装相依套件应该很难避免, 毕竟要 08/24 13:16
11F:→ shooter555: 维持自动化的话 08/24 13:18
12F:→ shooter555: 要不然就是固定依赖的套件 先备份一份docker image重 08/24 13:24
13F:→ shooter555: 复使用? 08/24 13:25
14F:推 knives: gitlab的话,不是有cache可以用吗 08/24 13:45
15F:→ shooter555: 对喔 docker image本身在重建好像也有cache 烦恼这个 08/24 13:51
16F:→ shooter555: 好像多余了 08/24 13:51
是说几个朋友在FB说, 觉得 CI 跟 build 还是有差, 欸 我觉得原则上同意, 因为 build 只是基础的一环. 至於有了自动 build 是不是就能达到持续整合的精神, 比方说虽然有 build server 但还是每个月 build 一次. 那样就不能说有持续整合的精神. 这我同意啦 只是说论述总有远近, 要讲到持续整合这个架构, 能进入的人又少太多了. XDDD (啊是说你们自己来回啊. = =) ※ 编辑: TonyQ (210.61.209.201 台湾), 08/24/2020 14:15:18
17F:→ shooter555: 整个CI的主体应该是在Linter身上 0.0 08/24 14:27
18F:推 meokay: 谢谢分享 08/24 15:36
19F:推 wayne0530: 推 08/24 15:49
20F:推 blackcan: 感谢分享!!! 08/24 17:53
21F:推 hellomotogg: fastlane还蛮好玩ㄉ 08/24 19:53
22F:推 wulouise: 从没有到有至少是一个进步 08/24 20:16
23F:推 ice0803: 感谢分享 08/24 20:51
24F:→ day831231: 提供执行档这些不是属於CD的范围吗? 08/24 21:20
25F:→ TonyQ: 楼上请看本文第三四行 XD 08/24 22:03
26F:→ landlord: 朋友:PTT上鲨鱼环伺,不小心流点血就会被围起来咬了 08/24 22:36
27F:推 kennedy1024: 推! 08/24 22:36
28F:→ clamperni: VVVVVVVVVVVVVVVV 08/25 00:06
29F:推 joery: 大力的推,感谢分享 08/25 08:08
30F:推 SFV650: 感谢分享 08/25 08:16
31F:→ shooter555: CI看起来就像是统整之前的一些流程 给他一个名词 08/25 09:05
32F:推 shooter555: 补个推 08/25 09:13
33F:推 SoftwareSing: 建置速度慢一点才能看着 pipeline 发呆啊 (X 08/25 12:08
34F:推 GLaDOS1105: 看着 pipeline 发呆不知道为什麽有种强烈的吸引力 08/25 13:41
35F:推 unmolk: 推 最近跟lab一起做专案才学到CI/CD的概念 不然平常只会写 08/25 23:35
36F:→ unmolk: 完慢慢deploy 有够浪费时间 08/25 23:35
37F:→ unmolk: 话说tony大最近产出好多篇分享文XD最近比较多时间吗 08/25 23:35
战是写文的原动力 XD
38F:→ superpandal: 这东西感觉如果自己想方便一点就创的出来 专门提无非 08/26 00:23
39F:→ superpandal: 要交流 08/26 00:23
40F:推 kaitokid1214: 好文 推个 08/26 11:22
※ 编辑: TonyQ (118.167.72.246 台湾), 08/27/2020 05:38:45







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP