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

六、创建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运行效果

然后看到邮件通知

可以看到邮件通知。
这样我们就完成了自动化部署。
0条评论