失败博物馆 - Jenkins

我想记录一下工作中使用过的软件里的一些在设计上比较失败的。因为它们,工作中多了很多痛苦。 Jenkins 便是其中之一。跟很多软件一样,Jenkins 在商业上是成功的,成功的原因就是用户并没有什么选择。对 Jenkins 非常了解的人来说,能很容易列举出非常多的详细的jenkins 的问题。从一个普通使用者的角度来看,最直观的两个感觉就是: Jenkinsfile 难写,流水线很慢。 对我来讲,Jenkinsfile 就是最大的设计败笔。从工作中的反馈来看,即使看了文档,也没人知道怎么去写一个正确的 Jenkinsfile。用户想描述好一些流水线步骤,最直观的想法应该就是贴近于 Makefile, 每个步骤几条命令,清清楚楚。再加上其他一些并发控制,产出物管理即可。用 YAML 或者 TOML 这样的配置文件即可。 几乎除了 Jenkins 之外的所有 CI/CD 工具,都选择了 用YAML。而 Jenkins 使用了 Jenkinsfile, Groovy 语言,意味着用户需要首先了解 Groovy,在学习 jenkins的语法,才能写好 Jenkinsfile。一些自作聪明的开发人员在类似的设计问题时,会有一种炫技的想法,总想用 DSL 来解决问题。结果通常是不好的,既给用户带来了沉重的负担,也让系统变得难以理解。基于 JVM 的很多语言都是如此命运。 即使你费劲千辛万苦,终于写出了一个能跑通的 Jenkinsfile,这时候你会发现,在 Jenkins 的流水线里面,有很多复杂的难以理解的东西。为什么多出来很多莫名其妙的步骤?系统日志和构建日志怎么这么杂乱无章地堆在一块?为什么速度总是这么慢?界面为什么这么丑?不一而足。 想深刻地理解这些问题在哪,当然可以去好好探究一下它的架构,然后了解这些问题的根源。但这是在没有必要了,对于一个将死的系统来说。作为用户来讲,在已经有了替代品之后,赶快逃离就是了。

2019-08-22 · 1 分钟 · 41 字 · 涯余

在 Gitlab 中使用 Danger

Gitlab 社区版的 CI 功能非常好用,能够很方便的地做到代码的 lint/build/test/等等。不过社区版在多人协作上(比如 Merge Request)上阉割了不少功能, 比如将 MR assign 给多人等。通常来说,在代码合并这块,CI/CD 一般包括两部分: 代码本身以及 MR/PR 本身。Danger 这个工具正好可以补足 Gitlab 在后者的不足。 功能 Gitlab CI 的关注点在于提交的代码本身,而 Danger 的关注点在于 Merge Request 本身,当然也可以做到很多 Gitlab CI 能做到的事情,各种第三方插件也能极大地扩种 Danger 自身的能力。目前我觉得几个非常有用的功能是: 检查 Commit Message 的格式。这个功能是很基本的,但是很多 CI 系统本身都不支持。 检查与 jira 的关联。强制让每一个 MR 都关联一个 jira,方便项目管理 检查 MR 是否打标签。在 MR 非常多的时候用于给 MR 归类,在 Github 上的大项目上我们经常见到 检查 MR 的大小。改动太大的 MR 是不推荐的,因为 Review 起来难度太大,推荐分裂成比较小的 MR 检查是否 rebase 过了目标分支,保持一个干净的提交记录。 安装 因为 MR 本身属于 Git 系统的一个功能,所以 Danger 的一个主要能力在于与各大平台的集成性上,目前主流的 Gitlab/Github/都支持。也很容易部署。下面简要介绍与 Gitlab 的集成方法 ...

2019-05-07 · 2 分钟 · 262 字 · 涯余