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

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

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

1.环境准备:

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

第一种no build方式

第一种no build方式需要修改docker-compose.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.创建一条流水线

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

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

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

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

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

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

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

具体自定义镜像构建这里,任务步骤第一步添加一个node.js构建,然后需要把build后的编译物,也就是前端代码通过脚本下载到服务器的前端代码目录里既可以了
Dvadmin使用阿里云flow实现自动化ci/cd部署更新项目

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

node.js构建也就是前端npm工具下载npm包然后build的步骤
Dvadmin使用阿里云flow实现自动化ci/cd部署更新项目

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

cd web
npm install -g pnpm
pnpm install --registry=http://registry.npm.taobao.org
pnpm build

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

注意打包路径的配置

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

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

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

具体部署步骤配置

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

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

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

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

部署脚本如下

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

deploy.sh

#!/bin/bash

# 更新代码
git pull

export DJANGO_DEBUG=False

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

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

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

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

原文链接:https://juejin.cn/post/7343138527418646563 作者:H0nGzA1

(0)
上一篇 2024年3月7日 上午10:05
下一篇 2024年3月7日 上午10:17

相关推荐

发表回复

登录后才能评论