Docker自动化部署Go

Docker基于Gitea+Drone自动化部署Go

      上一篇跟大家分享如何在docker上安装部署Gitea+Drone。这一篇跟大家分享基于Gitea+Drone来自动化部署Go项目,并最终发送邮件通知。

      就最近使用Gitea+Drone来构建自动化部署,发现真的太方便,相比较之前本地编译成二进制文件,再覆盖原来,重新启动,每次更新代码,真的太麻烦。

      一、准备Go项目代码

      我们先在Gitea创建一个仓库,然后Drone激活到这个仓库,我直接拿我直接写的Gin项目来做试验,我直接将代码放到仓库根目录下。

      二、准备镜像仓库

      自动化部署过程,我们需要将编译后的Go打包成一个镜像推到我们的镜像仓库,然后拉下来进行部署,这里我用的是阿里云镜像仓库,大家可以到阿里云镜像仓库,来创建私有仓库。

      三、创建构建镜像文件

      我们在仓库根目录下创建一个名为Dockerfile的文件,这是构建镜像文件,代码如下

# Version 1.0
FROM alpine:latest
# 维护者信息
MAINTAINER hzx790254812@gmail.com
# 设置工作目录
WORKDIR /home
COPY project-go-api /home/
# 暴露端口
EXPOSE 9911
# 执行命令
ENTRYPOINT ./project-go-api

这里我暴露的端口是9911,大家根据Gin项目暴露端口而定。

      五、配置私密信息

      Drone后台管理面板支持配置私密信息,这样的好处就是不会将一些重要的信息暴露在脚本里面,这样不会轻易暴露重要信息,我们在管理面板配置以下信息,大家根据自己的情况进行配置

微信截图_20211217143001.png

      六、创建docker部署文件

      为了方便部署以及服务重启,我们直接使用docker-compose进行服务部署,我在服务器目录/home/docker/app/project-go-api下创建名为docker-compose.yml,代码如下

version: "1"
services:
  project_go_api_compose:
    image: 镜像仓库所在地址
    container_name: project_go_api_compose
    restart: always
    ports:
    - 9911:9911

这里我们直接从阿里云镜像仓库拉取我们上传的镜像,然后直接将本地9911端口映射到镜像端口。

      七、编写自动化部署脚本

      完成以上操作后,我们在仓库根目录下创建一个名为.drone.yml的文件,用于触发脚本,代码如下:

kind: pipeline
type: docker
name: project-go-api

#构建步骤
steps:
#构建镜像
- name: build
  image: golang:latest
  pull: if-not-exists
  environment:
    GOPROXY: "https://goproxy.cn,direct" #懂的都懂
  volumes:                  #缓存go mod&pkg,可以大幅度提高速度,避免每次都下载
    - name: pkgdeps
      path: /go/pkg
  commands:
    - CGO_ENABLED=0 go build -o project-go-api
#推送镜像至镜像仓库
- name: publish
  image: plugins/docker
  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
  settings:
    host:
      from_secret: ssh_ip
    port: 22
    username:
      from_secret: ssh_user_name
    password:
      from_secret: ssh_password
    script:
      - cd /home/docker/app/project-go-api
      - docker-compose pull && docker-compose up --force-recreate -d
#通知到邮件
- name: email
  image: drillster/drone-email
  settings:
    recipients_only: true
    recipients:  #收件人
      from_secret: email_recipients
    subject: >
      {{#success build.status}}
          {{ repo.name }} 部署成功
      {{else}}
          {{ repo.name }} 部署失败
      {{/success}}
    host: smtp.qq.com
    port: 465
    from:         #发件人
       from_secret: email_from
    username:          #发件人邮箱名
       from_secret: email_from
    password:          #发件人邮箱密码
       from_secret: email_password

      八、试验结果

      我们本地开发后,git提交代码上去,看看drone运行效果

123.png

然后看到邮件通知

1234.png

可以看到邮件通知。

      这样我们就完成了自动化部署。

0条评论

发表评论