长江黄河论:比较Gitlab和Bamboo的部署权限控制

💡
最近稍微接触了一下Bamboo CI和GitLab CI,也不敢说有什么深入的理解,如果有什么事实性的错误,还请直接忽略。因为这里主要的目的是说长江黄河论,而并非真的要比较两个CI。

“练得身形似鹤形,千株松下两函经。 我来问道无余说,云在青天水在瓶。”
这些个CI有些是云,有些是水,所做的事情不同而已,都是忠臣,没有奸臣。也没有真正的贤臣。贤与不贤,有时候也由不得他们。看清楚了,贤时便用,不贤便黜。
古人称长江为江,黄河为河,长江水清,黄河水浊。古谚云‘圣人出,黄河清’,可黄河什么时候清过?长江之水灌溉了两岸数省之田地,黄河之水也灌溉了数省两岸之田地。只能不因水清而偏用,也不能因水浊而偏废,自古皆然。


CI间的客观差异

在部署的权限控制方面,Bamboo和Gitlab的核心差异在于是否能够把权限配置放在代码库里。Bamboo允许直接在代码库里放权限列表,Gitlab只能手动配置。
(我也没来的及仔细看Gitlab是不是没有别的办法把权限也as code,有也当没有吧,反正都是要枪毙的)

首先看Bamboo方面,根据这个文档:https://docs.atlassian.com/bamboo-specs-docs/9.2.1/specs.html?yaml#deployment-permissions。显然,Bamboo是可以通过他的specs file里直接写明部署相关的权限。

接着看Gitlab方面,根据这个文档:https://docs.gitlab.com/ee/ci/yaml/#rules。看上去只能利用rules,然后从环境变量里看能不能拿到谁trigger的,再做判断。但不重要,毕竟对比Bamboo的话,假装不行也说的过去。
(如果实在不想假装,那就结合这个文档https://docs.gitlab.com/ee/ci/variables/predefined_variables.html,拿GITLAB_USER_ID就行)


将权限放在代码库里属于罪大恶极

显而易见,将权限放在代码库里会存在致命的安全问题。

只要有代码的提交权限,那么这个人就可以通过改变配置,提升自己的权限,进而做一些原本他无权做的事情。
这可能导致没有经过测试或审批的改动直接进入到生产环境。

因此,凡事忽略这一问题的,明显是对内部安全和内部权限控制没有清晰的认识,或者直接就是主观上的对安全问题极不重视。


不将权限放在代码库里属于罪大恶极

显而易见,稍微复杂一点点的项目就会产生不止一个代码仓库。如果权限控制不在相应的代码库里as code显然是非常难维护的。

一旦项目稍微重组,要把一部分的代码库交接给其他团队的维护。那权限的交接就会变得异常复杂。需要一个个代码库去操作。
这样会浪费大量的时间,而且容易出错,导致该被清理的人保留了权限。

因此,凡事不as code的,明显就是不注重项目的长期发展,对未来没有一个清晰的规划。或者直接就是对未来的维护不负责任。


其他毒瘤操作

把所有代码放一个仓库

且不论这样的代码库会有多大,如果要细分权限,直接就没办法做了。这种提议,就应该千刀万剐。

自动化UI操作

成本高就不说了,CI的UI本就不是一成不变,这个代码的维护难度直接爆表。这种提议,就应该油炸火烹。

其他

再其他的操作,这里就不列举了。各位自己发挥主观能动性,找好帽子。
实在想不到帽子,这里提供三顶万能帽子:1. 操作太新不知道有没有什么未知问题;2. 反过来就是,操作太老旧跟不上时代,不能走经验主义、倚老卖老的路子;3. 操作不新不旧,那就是既没有充分验证可行性,又人云亦云。


对CI的评价本质是权限要不要代码化

要对Bamboo和Gitlab在权限问题上做出评价,首先就要搞清楚问题的本质。

那么首先,一切的折中的操作都是不可能的。
根据前面说的,一切的折中操作都是属于革命不彻底。不仅不解决问题,而且还可能带来跟多问题。

所以,评价Bamboo和Gitlab,本质就是在评价权限要不要代码化。所以,这就成了一个政治问题。

安全党表示,Bamboo作为CI,是整个项目安全实践的最大短板。
自动流表示,Gitlab连权限表自动读取都做不到,是拖慢项目效率的元凶首恶。

都不是什么好东西。


长江黄河论

对CI的评价是一个屁股的问题,而且是个你死我活的屁股问题。正确的解决方法是跳出来,站在一个更高的角度——站在工具的主人的角度。

Gitlab也好,Bitbucket也好,Drone也好,Jenkins也好,都是实现目的的工具,也只是实现目的的工具。
这些工具背后可以有各种强大、先进的思想。但是,作为工具的主人,而不是工具的奴隶,最重要的是工具背后的思想能多大程度上满足需求。

不同的人有不同的价值取向,也就会有不同的立场,也就会产生不同的判断。但最重要的,是“水不能淹过山头”。
不论选择Gitlab还是Bamboo,最重要的是选择之后,不被这个选择绑架。
不论是后面所选的工具更新之后不再好用,还是发现一开始选的就不对,要能立刻转向。

说到底,作为主人,要对工具保持绝对的控制力。


最后再引用忠孝帝君、万寿帝君的一段话:
“反之,黄河一旦泛滥,朕便治理,这就是朕为什么罢严嵩杀严世蕃等人的道理;再反之,长江一旦泛滥,朕也要治理,这便是朕为什么要罢黜杨廷和、夏言,杀杨继盛、沈链等人的道理。比方这个海瑞,自以为清流,将君父比作为山,水却淹没了山头,这便是泛滥。”

蜀ICP备19018968号