因为工作需要最近初略的了解了一下 Jenkins 及其功能,不知道是不是了解的不够深入的原因一直觉得使用它有一种画蛇添足的感觉, 比如: 代码都是由 github/gitlab 这些管理。软件打包或者是制作 docker 镜像 IDEA 这些开发软件软件也可以完成,代码审查等功能它本身也是借助第三方。集群部署调度管理 K8S 这些平台本身就能完成,所以...
1
securityCoding 2022-08-19 16:59:05 +08:00 via Android
那以前还没有 gitlab,k8s 怎么办呢
|
2
acbot OP @securityCoding 意思是在此之前他的价值主要的就是打包发布用是不? 其实没有否定 Jenkins 历史贡献的想法,仅仅是讨论当今条件下 Jenkins 还有哪些不可替代的原因!
|
3
idblife 2022-08-19 17:09:41 +08:00
pipeline
你要是生产环境有 2000 个服务,是靠自己 IDEA 打包? |
4
freefcw 2022-08-19 17:09:41 +08:00
@acbot 持续集成,自动编译,打包,部署...jenkins 基本这些功能吧,像代码托管,审查,这个就不再 jenkins 范畴内才是
|
5
xaplux 2022-08-19 17:10:06 +08:00
要不先了解一下 什么是 CI/DI?
|
6
mooyo 2022-08-19 17:11:52 +08:00
即使你有 k8s ,你在 k8s 上的变更也要依靠人工去更改么?
|
7
missdeer 2022-08-19 17:13:02 +08:00
pipeline 了解一下
|
8
mensa23 2022-08-19 17:13:56 +08:00 6
如果你觉得它没用,那说明不是给你用的。
|
9
XiLingHost 2022-08-19 17:16:08 +08:00 1
现在如果是新的项目,很多应该是用 drone 或者 gitlab action runner 这些来替代 Jenkins 了,但是如果之前就在用 jenkins 的老项目要全部迁移到新的流水线上工程量是不低的
|
10
kop1989smurf 2022-08-19 17:17:52 +08:00
本质上就是个 CI/CD 的平台(持续集成、持续交付和持续部署)。
举个例子: 你写好的程序,怎么合并到主分支?怎么测试? 靠人?容易疏漏,且容易出错。 怎么部署到测试环境,又是怎么部署到生产环境的呢? 靠人?流程不可控,且容易出错。 CI 负责的就是按照既定的流程来合并并测试程序。 CD 负责的就是从代码仓库拿到对应的版本程序》编译(可选)》集成》按照特定步骤与规则部署的流程。 如此下来,不说最终成果是 100%可用,但一定是 100%可控的。 |
11
Mithril 2022-08-19 17:23:08 +08:00
CI 这种东西其实就是个触发器,通过配置的不同条件,比如定时,代码变更等等,触发某些动作,执行命令,或者执行某个插件。
现在 Gitlab ,K8S 等等很多已经带了这部分功能,所以你觉得没啥用了。以前没有 Docker ,你的打包可能要一个复杂的脚本。同时要打多个平台的发布包,并且调用测试,代码检查,如果出问题要报错,还要提供审计日志等功能。 这些基本都是 CI 来做,并且完成多 Step 调度的。 其实之前没有 Docker 的时候,用 Jenkins 也是迫不得已。一大堆的插件还有互相依赖,部署完了能跑就别升级,不然就容易各种爆炸。而且鬼知道你升级了以后之前用的插件是不是还有人维护了。 现在有 Docker 就好多了,Docker 一把梭,Gitlab 或者其它 CI 需要做的功能就少了很多。 |
12
kop1989smurf 2022-08-19 17:23:50 +08:00
反之,你说 Jenkins 是必须的么?不是。
以上的这些功能都可以被脚本替代。 但问题是他是一个傻瓜化的配置平台,有生态,有 UI ,有流程可视化。 是给人降低开发、配置成本,以及把以上流程转移给非开发岗位用的。 你是一个测试,甚至你是一个产品,一句代码都不会敲,你依然可以用 jenkins 。 |
13
yohole 2022-08-19 17:33:50 +08:00 2
这就是典型没有需求场景驱动,单纯去学习一个新东西的弊端之一,很容易得出 [我不了解=这个东西没啥用] 的局限思维,这种帖子在 v2 实在太多了
Jenkins 对运维和测试的效率和便利性的提升是巨大的,即使没有 Jenkins ,自己研发或者写一下某些工具\脚本之类的,其实都是带有 Jenkins 现在所包含的思想或者方法率,Jenkins 只是集众多需求场景之大成而已,这个东西网上的资料太多了,建议还是多去了解一下 |
15
siweipancc 2022-08-19 17:38:00 +08:00 via iPhone
可以看出 op 是不会偷懒的人
|
16
duojiao 2022-08-19 17:38:57 +08:00
持续集成、敏捷开发这类的需求,一般都是出现在需要效率的有一定规模的公司或团队下的,你应该是没有过较大型项目 /团队的经验,导致想不出来这个干嘛用的。
|
17
acbot OP @kop1989smurf 意思就是 他的作用之一就是把这些工作程序定式化防止人工操作(比如 缺少步骤)的不确定性!
|
19
acbot OP @XiLingHost “现在如果是新的项目.." 这句话说到点上了!
|
21
qinxi 2022-08-19 17:46:25 +08:00
@acbot #14 没人的 IDEA 的项目配置,环境变量, JDK 版本各不相同.
每次部署 手动切换到 master 分支 build 吗. 出问题概率太高. 如果 build 时需要打入一些敏感的数据不方便在开发环境的话怎么办. build 结束部署的时候 再去手敲上线命令吗? 如果你自己用脚本实现了上面的步骤, 恭喜你 重新发明了低配版 Jenkins |
22
kop1989smurf 2022-08-19 17:47:09 +08:00
|
23
acbot OP @kop1989smurf 对啊,很多常用优秀的功能在其他的软件也有交叉所以感觉就不那么突出了
|
24
cp19890714 2022-08-19 17:58:23 +08:00
我的理解:jenkins 本质是一个可视化的工作流平台。提供了强大的插件能力,随意定制任何流程。
|
26
hoopan 2022-08-19 17:58:50 +08:00
重复的工作流程化,减少体力劳动,也避免人为失误。
|
27
duojiao 2022-08-19 18:00:27 +08:00
@acbot 在 gitlab 还没有做 ci/cd 之前,jenkins 是当时为数不多的被独立出来作为产品的,而且 jenkins 时代不只是有 git 还有 svn 呢,jenkins 的特点就是独立,灵活性更强,转头去接现在的 docker 也行。而到了现在,用 jenkins 的原因是以前就是用 jenkins 的,新开的项目可以有其他更多的选择。了解 jenkins 主要是了解 ci/cd 而已,类似 jenkins 功能的产品多的是。
|
28
acbot OP @cp19890714 ”...提供了强大的插件能力,随意定制任何流程...“ 所以就让人感觉不出来它本身有啥核心功能 就像拉皮条的,给人感觉用来很复杂到处去一通配置
|
29
kop1989smurf 2022-08-19 18:01:56 +08:00
@acbot #23 这就引申到其实很大程度上,技术选型并不只是技术上的筛选因素。
有很大一部分非技术因素。 比如说既有成功项目、既有成功路径的依赖。 比如领导的个人爱好。 比如既有的硬件环境。 等等。 还有一点就是考虑事物的定位与意义,要思考其适用的时间区间与先后关系。 用不是一个时代(软件工程一般 3~5 年、短的比如前端,2~3 年就是一个时代,11 、12 年还和 IE 死磕呢,15 年的 JS 连 class 关键字都出来了)的产品互相比较,很容易陷入误区。 |
30
wszzh 2022-08-19 18:03:04 +08:00
Jenkins 基本上可以将 op 说的那些东西涵盖了,一次配置,处处收益。用我司目前的开发体验来说,程序员只需要把代码 push ,后续发测试环境,打包,制作镜像等操作都可以自动完成。
|
31
acbot OP @duojiao 这里应该就有先入为主的问题,很多人先接触 jenkins 并且很多功能只有它才有所以他们不会觉得有疑惑,但他们往往会忽视了有很多新生事物的出现。
|
32
BeautifulSoap 2022-08-19 18:19:14 +08:00
其实另一个角度来看,Jenkins 是 2011 出的,Docker 出现都是两年后的事情了。而 Gitlab 也 2011 年才发
|
33
acbot OP @BeautifulSoap 没有否定 Jenkins 历史贡献的想法,仅仅是讨论当今很多新生事物的情况下 Jenkins 还有哪些不可替代的原因!
|
34
XiLingHost 2022-08-19 18:29:45 +08:00
@acbot 不可替代的很大因素就是积重难返,你打算把那么多旧的 pipeline 迁移到新的 CI 上吗,而且新的 CI/CD 很多是没有像 Jenkins 那样的构建页面的,大多都是类似 GitHub Action 这种基于事件触发构建的机制,和 Jenkins 的基于定时任务和手动触发的机制是不同的。
Jenkins 实际上是更倾向于传统 ops 的,而新的工具大多都是 DevOps 的思想,这就会影响到开发者在编排项目时是否会预先把部署考虑进来,因此只有新项目或者重构的老项目会使用新的 CI/CD ,而老项目一旦确定使用 Jenkins 基本上就不会考虑迁移了。 |
35
340244120w 2022-08-19 18:44:27 +08:00 via iPhone
楼主你说的都是流水线上的工人,公人负责自己工位上的工序。而流水线是把工人工位俺一定的顺序进行排列,自动将产品从上一道工序传到下一道,同时每一个工位出现问题能自动发现并解决。这才是 jenkins 的核心
|
36
idblife 2022-08-19 19:12:24 +08:00
|
37
xy90321 2022-08-19 21:28:43 +08:00 via iPhone 1
Jenkins 的图标是个管家,你什么时候见到过管家去烧饭除草擦窗了?
|
38
janxin 2022-08-19 22:42:12 +08:00
Jenkins 本来提供的就是 Pipeline 功能,当然这也导致 Jenkins 和其他对手并没什么太多核心竞争力。
|
39
wanguorui123 2022-08-19 22:44:56 +08:00
自动化构建
|
40
dorothyREN 2022-08-20 18:13:40 +08:00
想象一下,你编译个 linux 内核,需要跑五六个小时,你拿 ide 来跑?
|
41
acbot OP @dorothyREN 想象一下 编写的代码都不需要在本地编译和测试 直接写完就提交了? 如果你写一个 Linux 驱动 难道不编译可以直接验证你的代码? 我的意思如果仅仅是自动编译工作你本身都要做
|
42
ThreeK 2022-08-23 14:04:46 +08:00
不要单看 Jenkins 有啥功能,抽象成 CI/CD 来看。本来需要自己做的重复操作变成了自动触发是不是很诱人。
|
44
cco 2022-08-31 11:41:01 +08:00
它可能对于它自己赋予了很多概念或者说功能,对我来说,就是个方便打包发布的东西。说高端点就是 CI\CD
|