Dvadmin使用阿里云flow实现自动化ci/cd部署更新项目

flow.aliyun.com/ 阿里云云效flow地址

说明:本教程有两种更新方式,一种是需要build镜像,前端代码更改,后端依赖新增(pip新增了包)这种情况适用,另一种是只是修改了业务代码,新增接口,前端页面代码修改等,就可以使用no build的方式,通过docker的volumes映射本机环境的代码目录与前后端容器做到文件挂载,实时读取,这种情况适用于只新增了接口,页面配置

1.环境准备:

  • 云服务器(阿里云,腾讯云,只要是公网能访问的服务器即可)
  • 服务器已经安装了docker,并且代码已上传到了服务器上

第一种no build方式

第一种no build方式需要修改docker-compose.yml文件,修改如下

yml 复制代码
dvadmin-web:
    container_name: dvadmin-web
    ports:
      - "80:8080"
    build:
      context: ./
      dockerfile: ./docker_env/web/Dockerfile
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./web/dist:/usr/share/nginx/html
      - ./docker_env/nginx/my.conf:/etc/nginx/conf.d/my.conf
    expose:
      - "8080"
    networks:
      network:
        ipv4_address: 177.8.0.11

重点就是这里volumes,把前端代码的web/dist目录和前端容器的nginx代理的前端目录做一个挂载映射,就能做到实时更新

2.创建一条流水线

流水线基本配置看起来这样

2.1 创建一个流水线源,一般是github,gitee,gitlab,coding上的代码仓库(需要先配置服务连接,自行配置,本文章不做教学)

2.2 新增一个步骤,这里我们需要编译前端代码,需要用到node构建的服务,后端代码不用build,直接通过docker-compose的配置volumes挂载到容器,所以后端更新理论上只用更新代码然后重启项目(docker-compose restart)即可

具体自定义镜像构建这里,任务步骤第一步添加一个node.js构建,然后需要把build后的编译物,也就是前端代码通过脚本下载到服务器的前端代码目录里既可以了

node.js构建也就是前端npm工具下载npm包然后build的步骤

经测试,pnpm的构建效率,下载npm包的效率速度远超于npm,cnpm,yarn这几个工具速度

sh 复制代码
cd web
npm install -g pnpm
pnpm install --registry=http://registry.npm.taobao.org
pnpm build

2.3 构建完成之后需要上传编译后的产物到阿里云的package制品仓库,然后再下载到我们自己服务器上(自己新增一个就好,没有特殊配置)

注意打包路径的配置

  1. 现在流水线步骤1就已经完成,接下来做部署任务的下载前端dist文件

具体部署步骤配置

这里就是把我们构建好的前端代码,下载到我们代码目录的前端目录(dvadmin/web/)下,会自动新建一个dist目录,这个目录其实就是前端代码build之后的产物,我们就是把前端编译后的js,html,css代码放到这里,只不过都是自动化处理,通过下载tgz压缩包,tar -xzvf解压之后得到文件夹

3.1 第三步的主机部署就比较简单,就是去执行项目文件里的一个sh脚本

部署脚本如下

sh 复制代码
cd /xxx/你的代码目录/
git pull
echo '当前目录文件:'
echo $(ls)
sh deploy.sh

deploy.sh

sh 复制代码
#!/bin/bash

# 更新代码
git pull

export DJANGO_DEBUG=False

# # 停止并移除已存在的容器和网络
# docker-compose down

# # 拉取最新的镜像
# docker-compose pull

# 构建并启动容器
docker-compose down
docker-compose up -d

到现在第一种no build的更新方式就完成了

相关推荐
我爱娃哈哈29 分钟前
SpringBoot + Spring Security + RBAC:企业级权限模型设计与动态菜单渲染实战
spring boot·后端·spring
欣然~1 小时前
法律案例 PDF 批量转 TXT 工具代码
linux·前端·python
一个小废渣1 小时前
Flutter Web端网络请求跨域错误解决方法
前端·flutter
符文师2 小时前
css3 新特性
前端·css3
小王不爱笑1322 小时前
SpringBoot 配置文件
java·spring boot·后端
ct9782 小时前
WebGL开发
前端·gis·webgl
想用offer打牌2 小时前
Spring AI vs Spring AI Alibaba
java·人工智能·后端·spring·系统架构
C_心欲无痕2 小时前
前端页面渲染方式:CSR、SSR、SSG
前端
果粒蹬i3 小时前
生成式 AI 质量控制:幻觉抑制与 RLHF 对齐技术详解
前端·人工智能·easyui
码农幻想梦3 小时前
实验五 spring入门及IOC实验
java·后端·spring