大家的 CI 都是怎么搭建的?

94 天前
 justdoit123

最近感觉 jenkins 的 pipeline 写烦了,调试起来也比较麻烦。

突然感觉,CI 过程及其配置管理依赖工具的 DSL 不太好。哪天要把 jenkins 的 CI 迁移到 github action 上,又要重写。

之前我们的部分 CI Job 的工作会有一些 python 脚本(使用 python 是因为主要开发语言是 python )来处理,而 jenkins 或者 github action 负责调用,以及传入一些环境变量、security 配置。 像这种 job ,在不同 CI 工具间切换,会比纯 jenkins pipeline 的好迁移。

如果把这种 Job 的形式进行到底,像这样:

不知道这样的方案如何? 很想知道各位的 CI 方案是什么样子的?有什么想法。

3267 次点击
所在节点    DevOps
25 条回复
FlytoSirius
94 天前
不论如何, 把 sensitive 的配置加密到代码里都不是首选方案吧.

把这些 sensitive 配置 抽取为输入变量 , 并转换为 自动从环境变量取值, pipeline 中由 jenkins/github actions 等从自身的 secret 或第三方 secret manager 获取 secret 并注入到 运行时环境变量 来实现相应配置的赋值, 这样才是一般比较广泛使用的平衡了安全性与复杂度的方案吧.
nightwitch
94 天前
在 CI 的描述语言里直接写代码就是邪路啊,既不方便管理也不方便迁移。
不都是写在各种 bash / python / powershell 这种脚本里,然后 ci 只负责调用和设置环境变量么
FlytoSirius
94 天前
关于: 是应用 CI 自身的模块来编写更原生化的 pipeline, 还是使 CI 基本仅负责调用,组织和粘合 shell/python script 的执行.
我个人倾向于后者, 确实是会更方便在多种 CI 工具之间迁移.
CivAx
94 天前
密码有个叫 sealed secret 的工具,可以以加密形式在代码中直接储存密钥,然后在 k8s 中再还原为 secret
sc3263
94 天前
@FlytoSirius 前几天刚把 CI 从 Jenkins 迁移到 Gitlab Pipeline 上。迁移的时候做了亿点点改造,改完之后基本和你说的一样,CI 仅负责基本调用,主要逻辑都在 Python 中实现。
Gitlab Pipeline 被触发后,设置一系列的环境变量,调用 Python 脚本。在 Python 脚本里做真正的工作:解析环境变量,编译,跑单测、归档啥的。
这样本地开发调试脚本也方便,后续迁移 CI 平台也更容易。
hez2010
94 天前
我们的构建脚本全都拿 PowerShell 写的,CI 只是负责传递参数和调用,所以无论迁移到哪个平台都很简单。
justdoit123
94 天前
原来大家都是不依赖 CI 工具的语法写 CI Job 的~~


@FlytoSirius 关于 secret ,至少我感觉 Jenkins 里的 secret 不是很好用。才萌生了把配置放入加密代码中的想法。

@CivAx 谢谢~ 我去了解下。
FlytoSirius
94 天前
@justdoit123

Jenkins 里的 secret 管理确实不是很好的选择, 但也胜过记录"加密"过的密码在代码里, 再在 pipeline 里"解密". 这种方式实质还是把密码保存在了 git repo 里, 是尽量要避免的.

要是用 GitHub Actions 的 CI/CD, secret 也不会在多个途径使用的话, GitHub 里的 Secret 管理也是可靠的.

但一般生产环境, 一个第三方的 secret 管理工具[SaaS 或 self-host]还是需要的.
HashiCorp 的 Vault 就是很好的选择, 能 SaaS, 也能公司自己 self-host, 国内国外都用得很广泛, 第三方支持也很广泛. 各种 CI/CD 工具基本都支持动态从其中获取 secret.
shimada666
93 天前
我的做法:jenkins pipeline + nacos
为什么不上 k8s secret/config 而用 nacos:项目小,方便
guanzhangzhang
93 天前
makefile 或者 justfile 实现具体细节,比如文件拷贝和编译
ci 主要是利用平台的权限拉取代码,和最终的上传到制品库,运行是传入参数啥的调用 makefile 之类的,这样迁移成本小
CivAx
93 天前
@FlytoSirius #8 Bitnami Sealed Secret 就是为了解决如何把加密过的密码(或任何 secret )放在 git repo 里诞生的,解决 "I can manage all my K8s config in git, except Secrets." 的问题。Sealed secret 使用证书生成加密过的 secret.yaml 便于安全存放在 git repo 中,在 apply 到 k8s 集群后通过 controller 解密为正常 base64 enc 的 secret 。
shanch
93 天前
确实有这种问题,用 pipeline 迁移不好弄,我们现在基本上全是用 bash 写的脚本,然后通过 jenkins 传入环境变量
seekafter
93 天前
我自己的项目用的 drone,凑活能用
dddd1919
93 天前
用 gitlab 的话当然首选 gitlab ci ,不仅方便,而且还有 gitlab 自带的 ci/cd 标签,可以放在 readme 里,这精美小标签反正我是没法拒绝
itabas016
93 天前
试试 teamcity ,UI 好看,前段时间从 jenkins 全部切到了 teamcity
ZZ74
93 天前
jenkins 支持在它界面里配置密码这些 ,k-v 形式。pipeline 里面用 key 去获取。不过可能是商业版才有
defunct9
93 天前
shell 打倒一切
xuqiccr
93 天前
我们是自己开发的平台,调用 Jenkins 的 API 做打包发布,没有使用 Jenkins pipeline ,更适合自己公司的场景吧
37Y37
93 天前
pigeon2049
93 天前

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1014242

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX