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

相关推荐
Estar.Lee2 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
y先森2 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy2 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189113 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿4 小时前
CSS查缺补漏(补充上一条)
前端·css
2401_857610034 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
凌冰_4 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis
码农飞飞4 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货4 小时前
Rust 的简介
开发语言·后端·rust
吃杠碰小鸡5 小时前
commitlint校验git提交信息
前端