<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CI/CD on 涯余的博客</title><link>https://hangyan.github.io/tags/ci/cd/</link><description>Recent content in CI/CD on 涯余的博客</description><generator>Hugo</generator><language>zh</language><managingEditor>hang.yan@hotmail.com (涯余)</managingEditor><webMaster>hang.yan@hotmail.com (涯余)</webMaster><lastBuildDate>Thu, 22 Aug 2019 17:02:37 +0000</lastBuildDate><atom:link href="https://hangyan.github.io/tags/ci/cd/index.xml" rel="self" type="application/rss+xml"/><item><title>失败博物馆 - Jenkins</title><link>https://hangyan.github.io/post/2019-08-22-fuck-jenkins/</link><pubDate>Thu, 22 Aug 2019 17:02:37 +0000</pubDate><author>hang.yan@hotmail.com (涯余)</author><guid>https://hangyan.github.io/post/2019-08-22-fuck-jenkins/</guid><description>&lt;p&gt;我想记录一下工作中使用过的软件里的一些在设计上比较失败的。因为它们，工作中多了很多痛苦。&lt;/p&gt;
&lt;p&gt;Jenkins 便是其中之一。跟很多软件一样，Jenkins 在商业上是成功的，成功的原因就是用户并没有什么选择。对 Jenkins 非常了解的人来说，能很容易列举出非常多的详细的jenkins 的问题。从一个普通使用者的角度来看，最直观的两个感觉就是: Jenkinsfile 难写，流水线很慢。&lt;/p&gt;
&lt;p&gt;对我来讲，Jenkinsfile 就是最大的设计败笔。从工作中的反馈来看，即使看了文档，也没人知道怎么去写一个正确的 Jenkinsfile。用户想描述好一些流水线步骤，最直观的想法应该就是贴近于 Makefile, 每个步骤几条命令，清清楚楚。再加上其他一些并发控制，产出物管理即可。用 YAML 或者 TOML 这样的配置文件即可。&lt;/p&gt;
&lt;p&gt;几乎除了 Jenkins 之外的所有 CI/CD 工具，都选择了 用YAML。而 Jenkins 使用了 Jenkinsfile, Groovy 语言，意味着用户需要首先了解 Groovy，在学习 jenkins的语法，才能写好 Jenkinsfile。一些自作聪明的开发人员在类似的设计问题时，会有一种炫技的想法，总想用 DSL 来解决问题。结果通常是不好的，既给用户带来了沉重的负担，也让系统变得难以理解。基于 JVM 的很多语言都是如此命运。&lt;/p&gt;
&lt;p&gt;即使你费劲千辛万苦，终于写出了一个能跑通的 Jenkinsfile,这时候你会发现，在 Jenkins 的流水线里面，有很多复杂的难以理解的东西。为什么多出来很多莫名其妙的步骤？系统日志和构建日志怎么这么杂乱无章地堆在一块？为什么速度总是这么慢？界面为什么这么丑？不一而足。&lt;/p&gt;
&lt;p&gt;想深刻地理解这些问题在哪，当然可以去好好探究一下它的架构，然后了解这些问题的根源。但这是在没有必要了，对于一个将死的系统来说。作为用户来讲，在已经有了替代品之后，赶快逃离就是了。&lt;/p&gt;</description></item><item><title>在 Gitlab 中使用 Danger</title><link>https://hangyan.github.io/post/2019-05-07-gitlab-danger/</link><pubDate>Tue, 07 May 2019 23:23:52 +0000</pubDate><author>hang.yan@hotmail.com (涯余)</author><guid>https://hangyan.github.io/post/2019-05-07-gitlab-danger/</guid><description>&lt;p&gt;Gitlab 社区版的 CI 功能非常好用，能够很方便的地做到代码的 lint/build/test/等等。不过社区版在多人协作上(比如 Merge Request)上阉割了不少功能，
比如将 MR assign 给多人等。通常来说，在代码合并这块，CI/CD 一般包括两部分: 代码本身以及 MR/PR 本身。Danger 这个工具正好可以补足 Gitlab 在后者的不足。&lt;/p&gt;
&lt;h2 id="功能"&gt;功能&lt;/h2&gt;
&lt;p&gt;Gitlab CI 的关注点在于提交的代码本身，而 Danger 的关注点在于 Merge Request 本身，当然也可以做到很多 Gitlab CI 能做到的事情，各种第三方插件也能极大地扩种 Danger 自身的能力。目前我觉得几个非常有用的功能是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查 Commit Message 的格式。这个功能是很基本的，但是很多 CI 系统本身都不支持。&lt;/li&gt;
&lt;li&gt;检查与 jira 的关联。强制让每一个 MR 都关联一个 jira,方便项目管理&lt;/li&gt;
&lt;li&gt;检查 MR 是否打标签。在 MR 非常多的时候用于给 MR 归类，在 Github 上的大项目上我们经常见到&lt;/li&gt;
&lt;li&gt;检查 MR 的大小。改动太大的 MR 是不推荐的，因为 Review 起来难度太大，推荐分裂成比较小的 MR&lt;/li&gt;
&lt;li&gt;检查是否 rebase 过了目标分支,保持一个干净的提交记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;因为 MR 本身属于 Git 系统的一个功能，所以 Danger 的一个主要能力在于与各大平台的集成性上,目前主流的 Gitlab/Github/都支持。也很容易部署。下面简要介绍与 Gitlab 的集成方法&lt;/p&gt;</description></item></channel></rss>