Drone自动化部署vue

Drone自动化部署vue

       最近在学习开发vue项目,同样需要部署到服务器,刚好之前一直在弄Drone自动化部署,所以也打算自动化部署vue项目,通过摸索最终成功完成自动化部署,同样在这里跟大家分享。

       一、准备代码

       我们需要提前建好仓库以及vue项目代码,并且保证本地能运行这个vue项目。

       二、 准备镜像打包文件

       我们在vue项目下创建一个文件名为Dockerfile,用于构建我们的vue镜像,配置如下

FROM nginx:1.15-alpine
COPY ./dist /usr/share/nginx/html

       三、创建部署文件

       我们需要提前到部署服务器创建一份docker-compose.yml文件,用于部署我们的vue服务,我将docker-compose文件放在/home/dockerConfig/project/vue-study目录下,部署配置如下

version: "3"
services:
  vue_study_compose:
    image: hongzhuangxian/vue-study
    container_name: docker_vue_study_compose
    volumes:
    - /etc/localtime:/etc/localtime:ro
    environment:
    - SET_CONTAINER_TIMEZONE=true
    - CONTAINER_TIMEZONE=Asia/Shanghai
    restart: always
    ports:
    - 8083:80

这里我们的代码镜像是

hongzhuangxian/vue-study

容器名称为

docker_vue_study_compose

同时设置容器时区为上海时区,服务器8083端口映射容器80端口。

       四、自动化部署配置

       我们在vue项目下创建.drone.yml文件,用于自动化部署我们的项目,配置如下

kind: pipeline
type: docker
name: vue-study

#设置挂载
volumes:
  #Vue编译缓存目录
  - name: cache # 数据卷名称
    host: # Host Volume
      path: /home/drone/cache/vue-studys # 宿主机目录    #绝对路径
  #Docker环境
  - name: docker
    host:
      path: /var/run/docker.sock
  #Docker配置
  - name: docker-daemon
    host:
      path: /etc/docker/daemon.json
#构建步骤
steps:
#设置全局配置
- name: clean
  image: docker:19.03.1
  pull: if-not-exists
  network_mode: host
  # 将宿主机的 docker和配置挂载到运行的 docker 容器中,那么在容器中运行 docker 命令时,等同于在宿主机中运行该docker 命令
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: images
      path: /images
    - name: docker-daemon
      path: /etc/docker/daemon.json
#加载缓存
- name: restore-cache
  image: drillster/drone-volume-cache
  pull: if-not-exists
  settings:
    restore: true
    mount:
      - ./.npm-cache
      - ./node_modules
  volumes:
    - name: cache
      path: /cache
#node安装
- name: npm-install
  image: node:10
  pull: if-not-exists
  volumes: # 挂载数据卷(此为容器内的目录)
    - name: node_modules # 数据卷名称
      path: /drone/src/node_modules # 容器内目录 绝对路径
    - name: deploy_path
      path: /drone/src/html
  commands:
    - npm config set cache ./.npm-cache --global
    - npm install
#打包
- name: build-dist
  image: node:10
  pull: if-not-exists
  volumes: # 挂载数据卷(此为容器内的目录)
    - name: node_modules # 数据卷名称
      path: /drone/src/node_modules # 容器内目录 绝对路径
    - name: deploy_path
      path: /drone/src/html
  commands:
    - npm run build
#构建缓存
- name: rebuild-cache
  image: drillster/drone-volume-cache
  pull: if-not-exists
  settings:
    rebuild: true
    mount:
      - ./.npm-cache
      - ./node_modules
  volumes:
    - name: cache
      path: /cache
#推送镜像至镜像仓库
- name: publish
  image: plugins/docker
  pull: if-not-exists
  volumes:
    - name: docker
      path: /var/run/docker.sock
    - name: cache
      path: /cache
  mirrors:       #镜像仓库加速地址,不需要加速,可以直接删除
    from_secret: registry_mirrors
  settings:
    purge: false
    registry:   #镜像仓库域名
      from_secret: registry
    repo:        #镜像仓库详细地址
      from_secret: repo
    use_cache: true
    tags:
      - latest
    username:    #镜像仓库账户
      from_secret: registry_user_name
    password:    #镜像仓库密码
      from_secret: registry_password
#部署容器服务
- name: ssh commands
  image: appleboy/drone-ssh
  pull: if-not-exists
  settings:
    host:
      from_secret: ssh_ip
    port: 22
    username:
      from_secret: ssh_user_name
    password:
      from_secret: ssh_password
    script:
      - cd /home/dockerConfig/project/vue-study
      - docker-compose pull && docker-compose up --force-recreate -d
      - docker rmi $(docker images | grep go-fblsj/vue-study | grep none | awk  '{print $3}')
#通知发到telegram
- name: telegram
  pull: if-not-exists
  image: hongzhuangxian/telegram-drone-plugin
  settings:
    proxy_url: "https://telegram.hongzhuangxian.cn"
    token:
      from_secret: telegram_token
    chat_id:
      from_secret: telegram_chat_id
#规定master分支,触发构建
branches: master

篇幅可能有点长,我这里简单跟大家描述下整个过程

build.png

这个就是整个自动化的过程,这里面我们用到了缓存,主要是为了加快每次的构建,我们需要提前在Drone运行服务器里提前建好缓存目录,我这里用的是/home/drone/cache/vue-studys目录,大家根据自己情况建,同时需要到Drone管理面板开启缓存

1.png

如果没开启的话,会失败。

       配置里的一些配置由于为了防止泄露出去,我们可以配置在drone管理面板,在这里我跟大家说一下每个密钥对应什么配置

2.png

这些配置信息在构建配置文档中都会用到,由于为了速度以及稳定,项目镜像我放在阿里云镜像仓库,没有放在自建或者docker hub上,大家可以根据自己情况选择。

       五、构建效果

       以下就是构建的效果图

3.png

 下面这个是通知效果图(用的是我自己写的镜像插件)

4.png

       访问效果图

5.png

       这样我们就成功的完成vue项目自动化部署。

0条评论

发表评论