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

目前部署 spring boot 有没有什么更为简便的方法

  •  1
     
  •   Perolong · 28 天前 via Android · 2276 次点击

    我现在是将项目编译成 jar,然后上传到服务器,然后 nohup java -jar xx.jar &,不算麻烦,也不算简单,因为想要更新 spring boot 项目的代码,就需要重新编译,重新上传到服务器,kill pid 上一个 8080 的进程,再重新打一遍指令,比起 caddy 部署前端的 react 项目可以直接拉取 git 项目更新,还是繁琐了一些,唯一解就是自己写个 python 脚本么?

    37 回复  |  直到 2019-08-23 13:37:13 +08:00
        1
    chendy   28 天前
    最简单就脚本搞定,最好再弄个 CI 自动跑
    最复杂就 k8s (或者类似的东西) + CI 跑脚本搞定
        2
    Foxkeh   28 天前 via Android
    安装成系统服务
        3
    luozic   28 天前 via iPhone
    jenkins 开源的 还有闭源的 CI 工具,找一个抄一下跑,复杂点就是基于 CI+K8s+配置服务器 打镜像的方式玩部署。
        4
    RYAN0UP   28 天前 via Android
    可以用 pm2 管理
        5
    LeeSeoung   28 天前
    jenkins 或者自己写脚本 ssh 到远端机器部署,也可以上 docker,k8s 个人小型没必要上,维护工作量比较大。
        6
    skycitygalaxy   28 天前
    看你这个需求,建议使用 docker-compose,把 yaml 文件写代码里面,每次拉代码编译+部署
        7
    jorneyr   28 天前
    如果使用 Gradle 的话,可以看看这个插件 org.hidetake.ssh
        8
    GM   28 天前
    就你们现在的需求的话,直接编译成 war,上传到 tomcat 的 webapps 目录完事。
        9
    Perolong   28 天前 via Android
    @skycitygalaxy 好的我试试
        10
    KingPL   28 天前
    git 拉代码,docker 跑个 maven 编译,移动 jar,docker restart **java,单个项目目前这样玩
        11
    ClutchBear   28 天前
    jenkins 自动拉取编译和部署
    然后自动执行 superviserctl restart springboot
        12
    fakeJas0n   28 天前
    @jorneyr #7 这个不错👍
        13
    yannxia   28 天前
    单机 docker,然后 docker stop && docker run,玩的花一点的就像楼上 @KingPL 挂载 Vol,然后 Restart
        14
    registerrr   28 天前 via Android
    跟你现在的部署方式一模一样…
        15
    lihongjie0209   28 天前
    可以使用 tmux 来替代 nohup, 上传 jar 包这个动作无法避免的, 只是看你上传到哪里, 如果你有 nexus 之类的私有仓库, 可以在本地直接 deploy 上去, 然后脚本 wget 就好了。


    分享一个 tmux 脚本, 杀死之前的进程并重新启动

    (tmux kill-session -t app || true) && tmux new-session -d -s app "java -Dlog4j.configuration=log4j-pro.properties -jar /opt/app.jar “”
        16
    xuanbg   28 天前
    自然是 Jenkins+docker,先 maven 打包,然后 docker build 制作镜像,push 到私有仓库后在服务器上面 run 就好了。
        17
    qwerthhusn   28 天前
    可以使用不打 jar 包的方式
        18
    qwerthhusn   28 天前
    这样如果想更新某个 class 或者某个文件,就不用重新打包浪费时间
        19
    kaiser1992   28 天前
    1.上传到 git 仓库;
    2.脚本读取源码,然后 build;
    3.运行
        20
    cyril4free   28 天前
    gitlab+CI/CD
        21
    lllllliu   28 天前
    github/gitlab 有 webhook 呀,最简单的就是 push 之后触发 hook 然后,你可以写个脚本让他操作你想要做的事情。
        23
    liiihhhh   28 天前
    上传 jar,pm2 start
        24
    limuyan44   28 天前
    以前搞过一个项目我写了个 shell,更新的时候 sh xx.sh 就好了。 拉代码-编译-打包-停服务-上传 jar-启动。
        25
    wongy   28 天前
    用的 appassembler-maven-plugin 打包成 tar.gz 超级实用。去年面了很多家公司,问了一下打包发布方式都是 jar。

    去过一家公司用 docker 打包部署。
        26
    Seney   28 天前
    我是用 gitlab 代码推送到服务器就开始 build 然后 deploy
        27
    Unbelievable9   28 天前
    在 system.d 加入你的服务 相关配置可以参考 https://stackoverflow.com/questions/21503883/spring-boot-application-as-a-service
        28
    StarkWhite   28 天前
    热部署或热更新。
    不过貌似 java 没有好的热部署方案,之前这个帖子讨论过了,里面 v 友给了好几种方案

    Java 是不是没有好的热部署方案?
    https://v2ex.com/t/585647
        29
    mritd   28 天前 via iPhone
    Docker + ci
        30
    JasperWong   28 天前
    jenkins
        31
    JRay   28 天前
    jenkins + 1
        32
    br00k   28 天前
    不想麻烦,又想简单。就直接在部署的服务器上部署一个 Jenkins 就好了,更新的时候就不用上传了。
        33
    liuxey   27 天前
    大致四步吧

    git pull
    maven package
    docker build
    docker run

    另外:gitlab ci/cd 很好用
        34
    print1024   27 天前
    本地的话用这个:
    wagon-maven-plugin
    能直接上传到服务器并且可以配置命令
    springboot 建议三方依赖和业务代码分离打包
        35
    StarkWhite   27 天前
    我公司也在用 Jenkins 自动打包
        36
    haitongz   27 天前
    考虑到可运维性最好使用专门的发布系统,简单点也可以使用 Jenkins/Gitlab
    配合 ansible 脚本能够比较方便的上线和回滚
    另外可以搭建 nexus 或者 jfrog artifactory 免费版作为制品管理仓库,不用每次都从源码编译
        37
    suijishu   27 天前
    使用阿里云效,20 人以内免费,现在公司的 8 个服务,都是用这个发布。特方便,可以试试。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1028 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 19:15 · PVG 03:15 · LAX 12:15 · JFK 15:15
    ♥ Do have faith in what you're doing.