请教 jenkins 发布流程的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rqxiao
V2EX    程序员

请教 jenkins 发布流程的问题

  •  
  •   rqxiao 2020-05-12 10:02:57 +08:00 4582 次点击
    这是一个创建于 1981 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在机器 a 上装了 jenkins 其中配置了节点 机器 b 的信息,想要在机器 b 上发布项目

    1.git 上拉取代码 2.打包

    最后在 b 上启动

    1 和 2 这两部是在 a 还是 b 上完成的额

    第 1 条附言    2020-05-12 16:40:42 +08:00
    配置了节点 机器 b 的信息

    是 指 b 是一台普通的一般用来访问服务的机器...
    33 条回复    2020-05-13 16:42:27 +08:00
    755rQlBW742S6Fcc
        1
    755rQlBW742S6Fcc  
       2020-05-12 10:04:50 +08:00
    应该是 B
    chenuu
        2
    chenuu  
       2020-05-12 10:04:52 +08:00
    在 A 上完成的
    yjxjn
        3
    yjxjn  
       2020-05-12 10:06:28 +08:00
    A 啊。。。肯定不是 B,B 负责拉 war 包就行。或者手动给 copy 过去。
    also24
        4
    also24  
       2020-05-12 10:07:19 +08:00 via Android   1
    1,2 在 A 上完成,此谓 CI


    打包后的东西:
    从 A 上传输到 B 上;
    或者从 A 上传输到制品库,再使用 B 从制品库拉取。
    最后在 B 上启动。
    此谓 CD
    e1o
        5
    e1o  
       2020-05-12 10:07:56 +08:00
    公司目前都是在 A 上面做这些操作
    hiwangzheng
        6
    hiwangzheng  
       2020-05-12 10:08:55 +08:00
    B 上完成的,A 的工作就是任务发布,然后把执行脚本同步给 B,然后 B 去执行脚本,拉代码和打包。
    LUAgam
        7
    LUAgam  
       2020-05-12 10:09:14 +08:00
    a 啊,jenkins 有 git 、maven 插件支持 pull 、打包、编译等
    monsterxx03
        8
    monsterxx03  
       2020-05-12 10:11:22 +08:00
    A 啊, B 上还有线上程序跑着, 编译打包很容易跑满 CPU 的.
    xylophone21
        9
    xylophone21  
       2020-05-12 10:22:16 +08:00
    看起来关键分歧在如何理解“配置了节点 机器 b 的信息”,如果这里指的是 jenkins 的 slave 节点,那么在 B 上运行 1 和 2.
    但后面提到只是在 B 上运行,那边 B 就仅仅是部署机,1 和 2 在 A 上运行。
    所有关键是,“配置了节点 机器 b 的信息”具体指什么
    x66
        10
    x66  
       2020-05-12 10:23:20 +08:00
    用 B 的怕不是来搞笑的吧,如果有很多 B,那不是每台服务器都要编译打包一次,浪费资源不说,怎么保证打包出来的程序不受系统环境的影响
    defunct9
        11
    defunct9  
       2020-05-12 10:52:56 +08:00
    A.
    nicevar
        12
    nicevar  
       2020-05-12 10:57:06 +08:00
    需要打包的肯定在 A 上处理, A 上拉取代码 /编译打包, 然后部署到 B
    CRUD
        13
    CRUD  
       2020-05-12 11:00:48 +08:00
    9 楼+1,如果 B 是 jenkins 从属节点则在 B 上执行整个部署流程。

    如果 B 只是普通服务器节点,则整个代码拉取打包的过程均在 jenkins 节点也就是 A 节点上完成,打包完成后在将包 push 到 B 节点运行。
    d0m2o08
        14
    d0m2o08  
       2020-05-12 11:01:31 +08:00
    A 只是作为一个 master 用于发布任务,具体的任务需要 B 也就是 slaver 去执行

    这样不会对 master 造成压力
    egglin
        15
    egglin  
       2020-05-12 11:41:14 +08:00
    涨知识了
    xuanbg
        16
    xuanbg  
       2020-05-12 11:45:42 +08:00
    正常的操作逻辑:在 A 上面打包成 jar 或者 war,然后上传到 B 发布。

    你非要通过 A 控制 B 去 pull 源代码打包发布也不是做不到,但会比较麻烦就是了。
    wucao219101
        17
    wucao219101  
       2020-05-12 11:46:57 +08:00
    在 A 上完成 git 代码更新和编译打包,再把包部署到 B 。
    B 是生产环境机器,一般不会去做编译打包,也不用安装 git 命令和 Maven 。
    calmzhu
        18
    calmzhu  
       2020-05-12 11:50:57 +08:00 via Android
    jenkins 调度可以指定节点的。默认应该是 master 或者随机
    basefas
        19
    basefas  
       2020-05-12 11:58:20 +08:00   1
    首先不能在 B 上执行,打包过程可能会占用过多资源,会影响 B 上的服务。
    实际上应该有个打包机 C,CPU 和磁盘性能最好好些,然后所有项目的打包任务都调度到 C 上。
    A 只负责调度,将对应任务调度到 C 上打包,打包完后再由 A 调度部署在 B 上。
    legiorange
        20
    legiorange  
       2020-05-12 14:30:04 +08:00
    现在机器 a 上装了 jenkins 其中配置了节点 机器 b 的信息,想要在机器 b 上发布项目

    1. A 机器通过 webhook 到 git 上拉取代码

    2.通过 pipeline 或者配置好的命令来通过 Maven 、Ant 、Gradle 打包

    此时 jekins 已经完成 CI 的持续集成。

    3.通过配置 B 节点通过 docker 、k8s 等实现容器构建部署,相当于把 A 构建好的包下载到 jvm 容器内运行。

    另我不同意打包机的观点,大部分情况是节点 A 机器已经基本够用,不够就扩展,又不是做 devsecops
    BlackBerry999
        21
    BlackBerry999  
       2020-05-12 15:11:38 +08:00
    回答离 A 和 B 都有,应该相信谁呢?
    julyclyde
        22
    julyclyde  
       2020-05-12 15:29:10 +08:00
    回答 A 的朋友们是不是没看清 B 是 jenkins slave 啊?
    Chengxians
        23
    Chengxians  
       2020-05-12 15:33:59 +08:00
    jenkins 就该干它该做的事,当然是 a 干完所有的,b 去拉去最新的包重新部署
    haosamax
        24
    haosamax  
       2020-05-12 17:43:22 +08:00
    不会真有人在 b 上吧
    A388
        25
    A388  
       2020-05-12 17:47:15 +08:00
    用 B 的也是厉害
    hell0v2
        26
    hell0v2  
       2020-05-12 17:58:46 +08:00
    技术上都可行,看具体业务和机器要求吧
    figael
        27
    figael  
       2020-05-12 18:00:16 +08:00
    CI (编译):可在 A 或 B 执行,如果 B 是 A 的 slave 节点,而且被分配。如果仅仅是配置了 ssh,只会在 A 执行。
    CD (部署):B 需要拉取 CI 阶段的产物来运行,这个产物可能在 A,或者 B 。
    ---
    生产流程,一般 B 不能作为 jenkins slave 节点。
    dolphintwo
        28
    dolphintwo  
       2020-05-12 18:02:28 +08:00
    A 送分题 下一个
    jynstar
        29
    jynstar  
       2020-05-12 20:53:36 +08:00 via iPhone
    A
    andj4cn
        30
    andj4cn  
       2020-05-13 07:39:26 +08:00 via Android
    拉代码和打包是 A 做的,打包结束后包也放在了 A 或者上传到其他位置。这时候需要一步主动操作,就是怎么把包放到 B 上运行。这部分就很自由,一般都是手动操作把包从 A 拉到 B 运行,或者写一个额外的服务拉过来,或者打包结果是 docker 镜像的话 A 上传到私有镜像仓库,手动发布到 k8s 上去。总之拉代码和打包肯定是 A 做,发布视情况而定。
    cominghome
        31
    cominghome  
       2020-05-13 09:09:15 +08:00
    @BlackBerry999 看补充的内容,B 不是 slave 。那显然 1 2 都是在 A 完成的,B 只负责运行代码
    smilzman
        32
    smilzman  
       2020-05-13 09:10:38 +08:00
    首先,在 a 和 b 上打包都没问题,但是你思考一下,如果把问题换成在机器 a 上装了 jenkins,其中配置了节点机器 b 和机器 c 的信息,想要把项目 x 发布到机器 b 和机器 c 上,这样是不是就清晰了?

    在发布到一台机子的时候,在哪里打包都一样,但是如果需要同时发布到 b 和 c 是不是需要打包两次、安装多套打包环境?
    tingfang
        33
    tingfang  
       2020-05-13 16:42:27 +08:00
    反正不要在提供服务的机器上打包。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3195 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 11:47 PVG 19:47 LAX 04:47 JFK 07:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86