You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Jenkins+Git在Azure Linux VMSS部署Spring Boot应用及日志备份咨询

针对Azure VMSS部署Spring Boot应用的问题解答

1. VMSS上构建并部署Spring Boot应用的最优方案

结合你已有的自定义镜像、Jenkins+Git架构,推荐分层落地的最优方案:

  • 基础环境固化到自定义镜像:把JDK、systemd应用管理配置、固定应用目录(如/opt/spring-apps)、azcopy/git等工具都打包进镜像,避免每次部署重复安装依赖。同时在镜像中预置标准化启动脚本(如/opt/spring-apps/start-app.sh),通过systemd设为开机自启。
  • Jenkins CI/CD流程优化:
    • 拉取Git源码构建Spring Boot Jar包后,上传到带SAS权限的Azure Blob存储容器(避免公开访问)。
    • 触发VMSS更新时采用滚动更新策略:通过自定义脚本扩展(CSE)向每个实例下发命令,用azcopy拉取最新Jar到指定目录,再调用systemctl restart spring-app.service重启应用。这种方式无需替换VM实例,更新速度快、downtime极低。
    • 若涉及基础环境变更(如JDK版本升级),重新制作自定义镜像后更新VMSS镜像版本,触发滚动升级替换旧实例。
  • 额外安全与效率优化:给VMSS实例分配系统托管身份,授权访问Blob存储,避免脚本硬编码密钥;在Jenkins中集成Azure CLI插件,直接调用VMSS命令完成部署。

2. 手动重启超出最小实例数的VM后,CSE无法触发执行的处理方法

自定义脚本扩展(CSE)默认仅在VM创建/重新部署时执行,手动重启不会触发,可通过以下方式解决:

  • 手动触发CSE重执行:用Azure CLI针对目标实例或整个VMSS重新运行CSE:
    # 针对整个VMSS执行
    az vmss extension set --resource-group <你的资源组名> --vmss-name <你的VMSS名> --name CustomScript --version 2.1 --settings '{"commandToExecute": "你的原脚本命令"}'
    # 针对单个实例执行
    az vmss extension set --resource-group <你的资源组名> --vmss-name <你的VMSS名> --name CustomScript --version 2.1 --settings '{"commandToExecute": "你的原脚本命令"}' --instance-id <实例ID>
    
  • 将脚本加入系统启动流程:把CSE核心逻辑(如拉取应用包、配置环境)加入Linux启动项,确保重启后自动执行:
    • 对于systemd发行版(Ubuntu 18.04+、CentOS 7+),创建post-start.service配置文件,指定ExecStart为脚本路径并设为启用状态。
    • 对于传统SysVinit系统,将脚本路径加入/etc/rc.local(确保文件有可执行权限)。
  • 脚本幂等性改造:确保脚本重复执行不会产生异常(如检查Jar包是否已存在、服务是否已启动等),适配手动触发或自动启动的场景。

3. VM自动缩放解除分配时,日志备份到存储的低成本方案

核心思路是利用VM关机信号触发备份,结合低成本存储层级实现最优成本控制:

  • 关机钩子触发备份:在自定义镜像中配置systemd关机服务,捕获VM终止信号执行备份:
    1. 创建backup-log.service文件:
      [Unit]
      Description=Backup application logs on shutdown
      DefaultDependencies=no
      Before=shutdown.target reboot.target halt.target
      
      [Service]
      Type=oneshot
      ExecStart=/opt/scripts/backup-logs.sh
      TimeoutStartSec=300
      
      [Install]
      WantedBy=shutdown.target reboot.target halt.target
      
    2. 在/opt/scripts/backup-logs.sh中用azcopy同步日志目录到Blob存储:
      azcopy sync /var/log/spring-apps https://<你的存储账户名>.blob.core.windows.net/logs/app-logs --recursive
      
    3. 启用服务:systemctl enable backup-log.service
  • 低成本存储配置:
    • 使用Azure Blob存储的冷存储层存储日志(成本约为标准热层的1/3);若日志无需频繁访问,可进一步使用归档存储层(成本最低,但访问需提前解冻)。
    • 配置Blob存储生命周期规则:自动将30天以上日志移至冷层,90天以上移至归档层,180天以上自动删除,进一步压缩成本。
  • 权限优化:给VMSS系统托管身份分配Blob存储的Storage Blob Data Contributor权限,避免脚本中存储账户密钥,提升安全性。

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:01:01