V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acbot
V2EX  ›  Java

Jenkins 核心功能或者说作用是什么?

  •  
  •   acbot · 2022-08-19 16:32:52 +08:00 · 5075 次点击
    这是一个创建于 833 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为工作需要最近初略的了解了一下 Jenkins 及其功能,不知道是不是了解的不够深入的原因一直觉得使用它有一种画蛇添足的感觉, 比如: 代码都是由 github/gitlab 这些管理。软件打包或者是制作 docker 镜像 IDEA 这些开发软件软件也可以完成,代码审查等功能它本身也是借助第三方。集群部署调度管理 K8S 这些平台本身就能完成,所以...

    44 条回复    2022-08-31 11:41:01 +08:00
    securityCoding
        1
    securityCoding  
       2022-08-19 16:59:05 +08:00 via Android
    那以前还没有 gitlab,k8s 怎么办呢
    acbot
        2
    acbot  
    OP
       2022-08-19 17:07:14 +08:00
    @securityCoding 意思是在此之前他的价值主要的就是打包发布用是不? 其实没有否定 Jenkins 历史贡献的想法,仅仅是讨论当今条件下 Jenkins 还有哪些不可替代的原因!
    idblife
        3
    idblife  
       2022-08-19 17:09:41 +08:00
    pipeline
    你要是生产环境有 2000 个服务,是靠自己 IDEA 打包?
    freefcw
        4
    freefcw  
       2022-08-19 17:09:41 +08:00
    @acbot 持续集成,自动编译,打包,部署...jenkins 基本这些功能吧,像代码托管,审查,这个就不再 jenkins 范畴内才是
    xaplux
        5
    xaplux  
       2022-08-19 17:10:06 +08:00
    要不先了解一下 什么是 CI/DI?
    mooyo
        6
    mooyo  
       2022-08-19 17:11:52 +08:00
    即使你有 k8s ,你在 k8s 上的变更也要依靠人工去更改么?
    missdeer
        7
    missdeer  
       2022-08-19 17:13:02 +08:00
    pipeline 了解一下
    mensa23
        8
    mensa23  
       2022-08-19 17:13:56 +08:00   ❤️ 6
    如果你觉得它没用,那说明不是给你用的。
    XiLingHost
        9
    XiLingHost  
       2022-08-19 17:16:08 +08:00   ❤️ 1
    现在如果是新的项目,很多应该是用 drone 或者 gitlab action runner 这些来替代 Jenkins 了,但是如果之前就在用 jenkins 的老项目要全部迁移到新的流水线上工程量是不低的
    kop1989smurf
        10
    kop1989smurf  
       2022-08-19 17:17:52 +08:00
    本质上就是个 CI/CD 的平台(持续集成、持续交付和持续部署)。

    举个例子:
    你写好的程序,怎么合并到主分支?怎么测试?
    靠人?容易疏漏,且容易出错。

    怎么部署到测试环境,又是怎么部署到生产环境的呢?
    靠人?流程不可控,且容易出错。

    CI 负责的就是按照既定的流程来合并并测试程序。
    CD 负责的就是从代码仓库拿到对应的版本程序》编译(可选)》集成》按照特定步骤与规则部署的流程。

    如此下来,不说最终成果是 100%可用,但一定是 100%可控的。
    Mithril
        11
    Mithril  
       2022-08-19 17:23:08 +08:00
    CI 这种东西其实就是个触发器,通过配置的不同条件,比如定时,代码变更等等,触发某些动作,执行命令,或者执行某个插件。

    现在 Gitlab ,K8S 等等很多已经带了这部分功能,所以你觉得没啥用了。以前没有 Docker ,你的打包可能要一个复杂的脚本。同时要打多个平台的发布包,并且调用测试,代码检查,如果出问题要报错,还要提供审计日志等功能。

    这些基本都是 CI 来做,并且完成多 Step 调度的。

    其实之前没有 Docker 的时候,用 Jenkins 也是迫不得已。一大堆的插件还有互相依赖,部署完了能跑就别升级,不然就容易各种爆炸。而且鬼知道你升级了以后之前用的插件是不是还有人维护了。

    现在有 Docker 就好多了,Docker 一把梭,Gitlab 或者其它 CI 需要做的功能就少了很多。
    kop1989smurf
        12
    kop1989smurf  
       2022-08-19 17:23:50 +08:00
    反之,你说 Jenkins 是必须的么?不是。
    以上的这些功能都可以被脚本替代。

    但问题是他是一个傻瓜化的配置平台,有生态,有 UI ,有流程可视化。
    是给人降低开发、配置成本,以及把以上流程转移给非开发岗位用的。

    你是一个测试,甚至你是一个产品,一句代码都不会敲,你依然可以用 jenkins 。
    yohole
        13
    yohole  
       2022-08-19 17:33:50 +08:00   ❤️ 2
    这就是典型没有需求场景驱动,单纯去学习一个新东西的弊端之一,很容易得出 [我不了解=这个东西没啥用] 的局限思维,这种帖子在 v2 实在太多了

    Jenkins 对运维和测试的效率和便利性的提升是巨大的,即使没有 Jenkins ,自己研发或者写一下某些工具\脚本之类的,其实都是带有 Jenkins 现在所包含的思想或者方法率,Jenkins 只是集众多需求场景之大成而已,这个东西网上的资料太多了,建议还是多去了解一下
    acbot
        14
    acbot  
    OP
       2022-08-19 17:34:27 +08:00
    @idblife 2000 个服务不需要开发编码吗?我的意思对于 IDEA 这些来说打包都不是自动的吗
    siweipancc
        15
    siweipancc  
       2022-08-19 17:38:00 +08:00 via iPhone
    可以看出 op 是不会偷懒的人
    duojiao
        16
    duojiao  
       2022-08-19 17:38:57 +08:00
    持续集成、敏捷开发这类的需求,一般都是出现在需要效率的有一定规模的公司或团队下的,你应该是没有过较大型项目 /团队的经验,导致想不出来这个干嘛用的。
    acbot
        17
    acbot  
    OP
       2022-08-19 17:39:13 +08:00
    @kop1989smurf 意思就是 他的作用之一就是把这些工作程序定式化防止人工操作(比如 缺少步骤)的不确定性!
    duojiao
        18
    duojiao  
       2022-08-19 17:39:28 +08:00
    @duojiao 不过既然现在工作需要了解了,那过段时间,有使用场景了,就自然会知道了~
    acbot
        19
    acbot  
    OP
       2022-08-19 17:43:49 +08:00
    @XiLingHost “现在如果是新的项目.." 这句话说到点上了!
    acbot
        20
    acbot  
    OP
       2022-08-19 17:46:21 +08:00
    @yohole
    @duojiao 有可能是这个理
    qinxi
        21
    qinxi  
       2022-08-19 17:46:25 +08:00
    @acbot #14 没人的 IDEA 的项目配置,环境变量, JDK 版本各不相同.
    每次部署 手动切换到 master 分支 build 吗. 出问题概率太高.
    如果 build 时需要打入一些敏感的数据不方便在开发环境的话怎么办.
    build 结束部署的时候 再去手敲上线命令吗?
    如果你自己用脚本实现了上面的步骤, 恭喜你 重新发明了低配版 Jenkins
    kop1989smurf
        22
    kop1989smurf  
       2022-08-19 17:47:09 +08:00
    @acbot #17 是的,但他不是唯一解。

    他只是众多解决软件合并、测试、发布标准化的一个解决方法之一。优势是傻瓜、生态好、有界面。
    如今远程代码仓库也继承了部分其功能,比如 gitlab 。
    acbot
        23
    acbot  
    OP
       2022-08-19 17:49:42 +08:00
    @kop1989smurf 对啊,很多常用优秀的功能在其他的软件也有交叉所以感觉就不那么突出了
    cp19890714
        24
    cp19890714  
       2022-08-19 17:58:23 +08:00
    我的理解:jenkins 本质是一个可视化的工作流平台。提供了强大的插件能力,随意定制任何流程。
    acbot
        25
    acbot  
    OP
       2022-08-19 17:58:24 +08:00
    @Mithril 谢谢,指教!这种对比式的答案,知道各方面的所长所短才能让人根据需要来选择!
    hoopan
        26
    hoopan  
       2022-08-19 17:58:50 +08:00
    重复的工作流程化,减少体力劳动,也避免人为失误。
    duojiao
        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 功能的产品多的是。
    acbot
        28
    acbot  
    OP
       2022-08-19 18:00:32 +08:00
    @cp19890714 ”...提供了强大的插件能力,随意定制任何流程...“ 所以就让人感觉不出来它本身有啥核心功能 就像拉皮条的,给人感觉用来很复杂到处去一通配置
    kop1989smurf
        29
    kop1989smurf  
       2022-08-19 18:01:56 +08:00
    @acbot #23 这就引申到其实很大程度上,技术选型并不只是技术上的筛选因素。
    有很大一部分非技术因素。

    比如说既有成功项目、既有成功路径的依赖。
    比如领导的个人爱好。
    比如既有的硬件环境。
    等等。

    还有一点就是考虑事物的定位与意义,要思考其适用的时间区间与先后关系。
    用不是一个时代(软件工程一般 3~5 年、短的比如前端,2~3 年就是一个时代,11 、12 年还和 IE 死磕呢,15 年的 JS 连 class 关键字都出来了)的产品互相比较,很容易陷入误区。
    wszzh
        30
    wszzh  
       2022-08-19 18:03:04 +08:00
    Jenkins 基本上可以将 op 说的那些东西涵盖了,一次配置,处处收益。用我司目前的开发体验来说,程序员只需要把代码 push ,后续发测试环境,打包,制作镜像等操作都可以自动完成。
    acbot
        31
    acbot  
    OP
       2022-08-19 18:10:29 +08:00
    @duojiao 这里应该就有先入为主的问题,很多人先接触 jenkins 并且很多功能只有它才有所以他们不会觉得有疑惑,但他们往往会忽视了有很多新生事物的出现。
    BeautifulSoap
        32
    BeautifulSoap  
       2022-08-19 18:19:14 +08:00
    其实另一个角度来看,Jenkins 是 2011 出的,Docker 出现都是两年后的事情了。而 Gitlab 也 2011 年才发
    acbot
        33
    acbot  
    OP
       2022-08-19 18:22:19 +08:00
    @BeautifulSoap 没有否定 Jenkins 历史贡献的想法,仅仅是讨论当今很多新生事物的情况下 Jenkins 还有哪些不可替代的原因!
    XiLingHost
        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 基本上就不会考虑迁移了。
    340244120w
        35
    340244120w  
       2022-08-19 18:44:27 +08:00 via iPhone
    楼主你说的都是流水线上的工人,公人负责自己工位上的工序。而流水线是把工人工位俺一定的顺序进行排列,自动将产品从上一道工序传到下一道,同时每一个工位出现问题能自动发现并解决。这才是 jenkins 的核心
    idblife
        36
    idblife  
       2022-08-19 19:12:24 +08:00
    @acbot
    重点是 pipeline 啊
    每个开发的 idea 打出来的东西不是标准化的,QA 有没有介入,镜像仓库如何统一。。。
    好多问题,我觉得你遇到的场景太简单所以想当然了
    xy90321
        37
    xy90321  
       2022-08-19 21:28:43 +08:00 via iPhone   ❤️ 1
    Jenkins 的图标是个管家,你什么时候见到过管家去烧饭除草擦窗了?
    janxin
        38
    janxin  
       2022-08-19 22:42:12 +08:00
    Jenkins 本来提供的就是 Pipeline 功能,当然这也导致 Jenkins 和其他对手并没什么太多核心竞争力。
    wanguorui123
        39
    wanguorui123  
       2022-08-19 22:44:56 +08:00
    自动化构建
    dorothyREN
        40
    dorothyREN  
       2022-08-20 18:13:40 +08:00
    想象一下,你编译个 linux 内核,需要跑五六个小时,你拿 ide 来跑?
    acbot
        41
    acbot  
    OP
       2022-08-20 20:01:41 +08:00
    @dorothyREN 想象一下 编写的代码都不需要在本地编译和测试 直接写完就提交了? 如果你写一个 Linux 驱动 难道不编译可以直接验证你的代码? 我的意思如果仅仅是自动编译工作你本身都要做
    ThreeK
        42
    ThreeK  
       2022-08-23 14:04:46 +08:00
    不要单看 Jenkins 有啥功能,抽象成 CI/CD 来看。本来需要自己做的重复操作变成了自动触发是不是很诱人。
    acbot
        43
    acbot  
    OP
       2022-08-23 15:54:46 +08:00
    @ThreeK 如果说解决人工重复操作或者是确保所有操作的一致性,那么还算一个用处。
    cco
        44
    cco  
       2022-08-31 11:41:01 +08:00
    它可能对于它自己赋予了很多概念或者说功能,对我来说,就是个方便打包发布的东西。说高端点就是 CI\CD
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:46 · PVG 15:46 · LAX 23:46 · JFK 02:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.