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

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

  •  1
     
  •   avalon8 · 2019-07-03 11:40:37 +08:00 · 7847 次点击
    这是一个创建于 1730 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟公司这几天在做 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 在本地,如何把构建好的包推到外网服务器?
    thonatos
        22
    thonatos  
       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   ·   我们的愿景   ·   实用小工具   ·   1157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:30 · PVG 02:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.