• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Perolong
V2EX  ›  程序员

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

  •  1
     
  •   Perolong ·
    Notsfsssf · Aug 22, 2019 via Android · 7579 views
    This topic created in 2633 days ago, the information mentioned may be changed or developed.

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

    38 replies  •  2023-01-12 14:52:53 +08:00
    chendy
    chendy
    Aug 22, 2019
    1
    最简单就脚本搞定,最好再弄个 CI 自动跑
    最复杂就 k8s (或者类似的东西) + CI 跑脚本搞定
    Foxkeh
    Foxkeh
    Aug 22, 2019 via Android
    2
    安装成系统服务
    luozic
    luozic
    Aug 22, 2019 via iPhone
    3
    jenkins 开源的 还有闭源的 CI 工具,找一个抄一下跑,复杂点就是基于 CI+K8s+配置服务器 打镜像的方式玩部署。
    RYAN0UP
    RYAN0UP
    Aug 22, 2019 via Android
    4
    可以用 pm2 管理
    LeeSeoung
    LeeSeoung
    Aug 22, 2019
    5
    jenkins 或者自己写脚本 ssh 到远端机器部署,也可以上 docker,k8s 个人小型没必要上,维护工作量比较大。
    skycitygalaxy
    skycitygalaxy
    Aug 22, 2019
    6
    看你这个需求,建议使用 docker-compose,把 yaml 文件写代码里面,每次拉代码编译+部署
    jorneyr
    jorneyr
    Aug 22, 2019
    7
    如果使用 Gradle 的话,可以看看这个插件 org.hidetake.ssh
    GM
    GM
    Aug 22, 2019
    8
    就你们现在的需求的话,直接编译成 war,上传到 tomcat 的 webapps 目录完事。
    Perolong
    Perolong
    OP
    Aug 22, 2019 via Android
    9
    @skycitygalaxy 好的我试试
    KingPL
    KingPL
    Aug 22, 2019
    10
    git 拉代码,docker 跑个 maven 编译,移动 jar,docker restart **java,单个项目目前这样玩
    ClutchBear
    ClutchBear
    Aug 22, 2019
    11
    jenkins 自动拉取编译和部署
    然后自动执行 superviserctl restart springboot
    fakeJas0n
    fakeJas0n
    Aug 22, 2019
    12
    @jorneyr #7 这个不错👍
    Yanickkk
    Yanickkk
    Aug 22, 2019
    13
    单机 docker,然后 docker stop && docker run,玩的花一点的就像楼上 @KingPL 挂载 Vol,然后 Restart
    registerrr
    registerrr
    Aug 22, 2019 via Android
    14
    跟你现在的部署方式一模一样…
    lihongjie0209
    lihongjie0209
    Aug 22, 2019
    15
    可以使用 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 “”
    xuanbg
    xuanbg
    Aug 22, 2019
    16
    自然是 Jenkins+docker,先 maven 打包,然后 docker build 制作镜像,push 到私有仓库后在服务器上面 run 就好了。
    qwerthhusn
    qwerthhusn
    Aug 22, 2019
    17
    可以使用不打 jar 包的方式
    qwerthhusn
    qwerthhusn
    Aug 22, 2019
    18
    这样如果想更新某个 class 或者某个文件,就不用重新打包浪费时间
    kaiser1992
    kaiser1992
    Aug 22, 2019
    19
    1.上传到 git 仓库;
    2.脚本读取源码,然后 build;
    3.运行
    cyril4free
    cyril4free
    Aug 22, 2019
    20
    gitlab+CI/CD
    lllllliu
    lllllliu
    Aug 22, 2019
    21
    github/gitlab 有 webhook 呀,最简单的就是 push 之后触发 hook 然后,你可以写个脚本让他操作你想要做的事情。
    liiihhhh
    liiihhhh
    Aug 22, 2019
    23
    上传 jar,pm2 start
    limuyan44
    limuyan44
    Aug 22, 2019
    24
    以前搞过一个项目我写了个 shell,更新的时候 sh xx.sh 就好了。 拉代码-编译-打包-停服务-上传 jar-启动。
    wongy
    wongy
    Aug 22, 2019
    25
    用的 appassembler-maven-plugin 打包成 tar.gz 超级实用。去年面了很多家公司,问了一下打包发布方式都是 jar。

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

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

    git pull
    maven package
    docker build
    docker run

    另外:gitlab ci/cd 很好用
    print1024
    print1024
    Aug 23, 2019
    34
    本地的话用这个:
    wagon-maven-plugin
    能直接上传到服务器并且可以配置命令
    springboot 建议三方依赖和业务代码分离打包
    StarkWhite
    StarkWhite
    Aug 23, 2019
    35
    我公司也在用 Jenkins 自动打包
    haitongz
    haitongz
    Aug 23, 2019
    36
    考虑到可运维性最好使用专门的发布系统,简单点也可以使用 Jenkins/Gitlab
    配合 ansible 脚本能够比较方便的上线和回滚
    另外可以搭建 nexus 或者 jfrog artifactory 免费版作为制品管理仓库,不用每次都从源码编译
    suijishu
    suijishu
    Aug 23, 2019
    37
    使用阿里云效,20 人以内免费,现在公司的 8 个服务,都是用这个发布。特方便,可以试试。
    hongye
    hongye
    Jan 12, 2023
    38
    有个疑问,为什么都想用 docker 包一层,不像安装 jdk 环境?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1842 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 06:13 · PVG 14:13 · LAX 22:13 · JFK 01:13
    ♥ Do have faith in what you're doing.