关于公司自动化部署的设想 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
avalon8
V2EX    DevOps

关于公司自动化部署的设想

  •  1
     
  •   avalon8 2019-07-03 11:40:37 +08:00 8490 次点击
    这是一个创建于 2298 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟公司这几天在做 devOps,让我负责自动部署这块,小弟也看了很多资料,提出了一设想:

    1、开发人员 Merge 代码后 GitLab 触发 jenkins
    2、jenkins 根据每个应用设置对应的 job,根据每个 module 下的 dockefile 将应用打成 docker 镜像并 push 到 nexus 镜像仓库。
    3、使用 rancher 从 docker 仓库拉取镜像并部署。

    小弟有几个疑问:
    1、上述流程是否可以实现
    2、GitLab 触发 jenkins 持续集成的时候需不需要先执行 maven 命令打包在打 docker 镜像
    3、rancher 能否设置镜像仓库上传了新的镜像后自动拉取 docker 镜像。
    4、关于 docker 镜像的构建能否这样:
    ( 1 )先构建好每个 module 的 tomcat 镜像 放到私有仓库
    ( 2 )每次 jenkins 构建先从仓库拉取对应 tomca 镜像,再把 war 包打进去然后再 build 一次镜像
    ( 3 )推送到私有仓库
    27 条回复    2019-07-23 04:42:17 +08:00
    anubu
        1
    anubu  
       2019-07-03 12:16:15 +08:00
    个人经验:
    1. 可以实现,基本流程都差不多,难点在于具体各个环节的调试落地;
    2. 编译构建步骤是不可缺少的,无非是你选择在 jenkins 环境中出 war 包还是 Dockerfile 多阶段构建出 war 包,这取决于你的构建环境是什么,docker 镜像只是对 war 的一种封装。
    3. 不清楚 rancher 是否可以自动拉取最新镜像,如果部署环境是 docker 的话可以参考 https://github.com/containrrr/watchtower
    4. tomcat 作为基础镜像,出 war 包后直接 build 一个新的镜像即可。
    avalon8
        2
    avalon8  
    OP
       2019-07-03 13:16:31 +08:00
    @anubu 我想着是用 jenkins 打成 war 包再把 war 包复制到 tomcat 中再打成镜像 push 到仓库
    LicV587
        3
    LicV587  
       2019-07-03 13:24:03 +08:00
    @avalon8 为什么要这么复杂?直接 Springboot,内嵌 tomcat,jenkins 直接打 jar 包,在运行 docker build 一个镜像
    Defned
        4
    Defned  
       2019-07-03 13:24:18 +08:00
    刚刚在公司落地,我用了 drone
    victorywangzhcn
        5
    victorywangzhcn  
       2019-07-03 13:26:48 +08:00
    个人经验 2:
    1. 可以实现,不过 Merge 这需要看看开发流程以及回收 Master 权限
    2. 我们以前的流程是 Git --> Jenkins --> Unit Test --> Deploy snapshot to Nexus --> Deploy Daily
    3. 可以采用 Jenkins 的 Pipeline 完成这个流程
    4. 这里有俩选择,一是基础镜像(基本不动)+ War 跑新的 Image,二是类似我们之前的方案,只有一个基础镜像,每次 CI 流程的时候打 snapshot 包,基础镜像里负责根据启动参数拉取对应的包并解压执行(这里也有助于统一运维),所以每次只需要重启,他就能自动拉包
    wangking
        6
    wangking  
       2019-07-03 13:27:18 +08:00
    可以实现,jenkins pipeline 一条龙的事,加上 k8s 就更容易了
    MuscleOf2016
        7
    MuscleOf2016  
       2019-07-03 13:33:27 +08:00
    可以实现的,自动化中间的这些流程,可以先自己人工跑一遍,jenkins 最后作为一个自动工具将这些流程都串起来就可以了。人工能做都,基本自动工具都可以做。
    MuscleOf2016
        8
    MuscleOf2016  
       2019-07-03 13:33:51 +08:00
    @MuscleOf2016 不过简单都直接 gitlab-runner 配流水线就好了嘛
    lauix
        9
    lauix  
       2019-07-03 13:34:57 +08:00
    已经运行了一个多月 也用 rancher 整体技术实现差不多。
    avalon8
        10
    avalon8  
    OP
       2019-07-03 13:37:04 +08:00
    @LicV587 应用架构是 springMvc+dubbo
    luozic
        11
    luozic  
       2019-07-03 13:38:04 +08:00 via iPhone
    数据库需要相应的同步工具,否则也就是应用的自动化部署。
    wangxiaoaer
        12
    wangxiaoaer  
       2019-07-03 13:53:40 +08:00
    我也在关注这个东西,其实开发端 从 git 到 ci 到 jar/war/docker image 都没有问题。

    我们纠结的是打包结果更新好之后如何推送到服务器,docker 的话可以直接 push,jar 或者 war 就不好弄,我们目前是搭建 ftp 上传,但是总感觉不太方便。

    其次,更新包上传到云端后,服务器如何得知应用有更新,我们目前是做了个小应用,定时访问云端,然后下载、重启,同样感觉这个不是很方便。

    有没有好的方案(成熟的)?对了,个别服务器是 windows 的。
    avalon8
        13
    avalon8  
    OP
       2019-07-03 14:03:32 +08:00
    @wangxiaoaer 推送到服务器 jenkins 就可以做到啊,我们现在就可以实现在 jenkins 直接打包然后测试站点直接生效
    akira
        14
    akira  
       2019-07-03 14:07:11 +08:00
    @avalon8 publish over ssh ? 那功能在内网内用不错

    如果是用阿里云或者腾讯云的话 他们有提供 cicd 的方案了,给钱就行
    mikuazusa
        15
    mikuazusa  
       2019-07-03 14:12:00 +08:00
    jenkins 全部能轻松实现
    KuroNekoFan
        16
    KuroNekoFan  
       2019-07-03 14:34:31 +08:00
    gitlab ci 也可以
    br00k
        17
    br00k  
       2019-07-03 14:48:28 +08:00   2
    Rancher 本身就有 Pipeline 了,应该可以满足楼主的要求。
    avalon8
        18
    avalon8  
    OP
       2019-07-03 15:15:23 +08:00
    @br00k 十分感谢
    wuhang89
        19
    wuhang89  
       2019-07-03 15:22:37 +08:00
    我就是这么做的。
    Takamine
        20
    Takamine  
       2019-07-03 15:23:52 +08:00
    话说国内好像用 Travis CI 的确实不多诶。
    wangxiaoaer
        21
    wangxiaoaer  
       2019-07-03 15:26:59 +08:00
    @avalon8 #13 怎么推? jenkins 在本地,如何把构建好的包推到外网服务器?
    SuYia
        22
    SuYia  
       2019-07-03 16:46:53 +08:00
    基于 Jenkins & Docker 的 workflow 应用比较多,基础设施用自建 Rancher 或者云服务商提供的容器服务区别不会很大,早年实现过测试过多套方案,有兴趣可以看看我专栏里的几篇文章( https://zhuanlan.zhihu.com/p/24296218 )。

    k8s 生态日趋完善,多研究研究,蛮有意思,比如可以考虑一下 Knative。
    anubu
        23
    anubu  
       2019-07-03 16:48:01 +08:00
    制品推送没什么问题的,有各种各样的制品仓库,jenkins 也有各种插件支持,最原始的 ftp、ssh 都可以实现,我们的制品是 docker 镜像,所以就简单的 docker push。
    部署更新我们也是在 jenkins 中完成的,根据不同的场景,显式的去执行一个部署操作,而不是推送制品后等待触发部署。可用的工具也很多,Windows 目标可以使用 powershell 远程操作,Linux 目标 SSH 脚本也不错,docker 主机或 k8s 集群都有远程 API 可以调用。
    AlfredYoung
        24
    AlfredYoung  
       2019-07-03 17:04:06 +08:00
    gitlab 自带就可以实现了
    iehp
        25
    iehp  
       2019-07-03 17:34:15 +08:00
    可以去掉 jenkins,直接 gitlab 的 gitlab-runner 都可以搞定了。
    avalon8
        26
    avalon8  
    OP
       2019-07-04 10:40:05 +08:00
    @thonatos 谢谢
    dafengchui
        27
    dafengchui  
       2019-07-23 04:42:17 +08:00
    @iehp #25
    @avalon8 #26 qii404,me/2018/06/21/gitlab-runner.html 这个基本就可以了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2909 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 10:58 PVG 18:58 LAX 03:58 JFK 06:58
    Do have faith in what you're doing.
    ubao msn 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