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的更新方式就完成了

相关推荐
abigale037 分钟前
【浏览器 API / 网络请求 / 文件处理】前端文件上传全流程:从基础上传到断点续传
前端·typescript·文件上传·vue cli
Setsuna_F_Seiei17 分钟前
AI 对话应用之页面滚动交互的实现
前端·javascript·ai编程
cjy00011129 分钟前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
新缸中之脑40 分钟前
追踪来自Agent的Web 流量
前端
wefly20171 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
小江的记录本1 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34161 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan2 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
英俊潇洒美少年2 小时前
vue如何实现react useDeferredvalue和useTransition的效果
前端·vue.js·react.js
kyriewen112 小时前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript