从零开始摸索VUE,配合Golang搭建导航网站(十一.Gin容器化部署上线,CI脚本编写)

1,096 阅读2分钟

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

前言

Gin框架的容器话部署并不像前端那样上传静态文件重启Nginx容器就可以生效了,我们需要把在代码在运行环境打包,把代码直接放到镜像里面,然后替换正在运行的镜像。

预先操作

我们部署的环境是树莓派,是arm架构,docker拉取镜像的时候会自动判断系统环境,镜像会对应系统,不会出现问题,但是我们先要把项目拉取到树莓派,进入项目进行打包镜像,运行容器,这样做的目的就是为了再进行CI的时候就会有事先运行的容器进行操作,不会报错。
使用Xshell连接内网的树莓派 使用git clone *****克隆镜像:

image.png

使用一下几条进入项目文件夹,进行打包镜像,运行容器:

cd my-gin-web/
docker build -t my_gin_web .
docker run -d --name my_gin_web  -p 8083:8080  my_gin_web

宿主机的端口改成了8083,因为有其他的容器占用了宿主机的目录。

CI文件编写

这个的项目也分成两个分支一个develop分支,一个master分支,代码只在master分支的时候触发部署任务。
在项目根目录新建gitlab-ci.yaml输入一下内容:

image.png

stages:
  - deploy  #任务阶段顺序,只写了一个deploy部署阶段
  
build_master:
  stage: deploy  #任务阶段

  script:
    - docker build -t my_gin_web:$CI_JOB_ID .  # CI_JOB_ID是一个环境变量,runner任务ID,可以看做成一个数据库的自增ID,每触发一个任务Id加一
    - docker stop my_gin_web
    - docker rm my_gin_web
    - docker run -d --name my_gin_web  -p 8083:8080  my_gin_web:$CI_JOB_ID
  only:
    - master # 指定只在master分支执行这个任务。
  tags: 
    - b4master  #指定执行任务的runner,安装runner的时候会提示填写runner的标签(tag)


把这个CI脚本提交到Gitlab,然后合并到master分支:看看CI/CD菜单看看任务执行具体内容:

image.png

image.png

总结

项目部署成功,三分钟任务完成部署,docker 启动的时候会有几秒的暂停服务,在商业项目更新的时候会使用多个容器采用滚动更新的方式,这里是个人项目就不做了,下一篇使用Docker做一个本地的mysql吧,可以做测试,不用影响线上项目,现在连接的mysql都是线上的数据库~