上一篇跟大家分享如何在docker上安装部署Gitea+Drone。这一篇跟大家分享基于Gitea+Drone来自动化部署Go项目,并最终发送邮件通知。
最近使用Gitea+Drone来构建自动化部署,发现真的太方便,相比较之前本地编译成二进制文件,再覆盖原来,重新启动,每次更新代码,真的太麻烦。
我们先在Gitea创建一个仓库,提交代码到Gitea仓库,截图如下

创建完Gitea仓库之后,我们需要到Drone管理后台上激活仓库,同时开启缓存


自动化部署过程,我们需要将编译后的Go打包成一个镜像推到我们的镜像仓库,然后拉下来进行部署,这里我用的是阿里云镜像仓库,大家可以到阿里云镜像仓库,来创建私有仓库,这里大家可以百度教程。
我们在仓库根目录下创建一个名为Dockerfile的文件,这是构建镜像文件,代码如下
# Version 1.0FROM alpine:latest# 维护者信息MAINTAINER hzx790254812@gmail.com# 设置工作目录WORKDIR /homeCOPY project-go-api home/# 暴露端口EXPOSE 9911# 执行命令ENTRYPOINT ./project-go-api
Drone后台管理面板支持配置私密信息,这样的好处就是不会将一些重要的信息暴露在脚本里面,这样不会轻易暴露重要信息,我们在管理面板配置以下信息,大家根据自己的情况进行配置

为了方便部署以及服务重启,我们直接使用docker-compose进行服务部署,我在服务器目录/home/docker/app/project-go-api下创建名为docker-compose.yml,代码如下
version: "1"services:project_go_api_compose:image: 镜像仓库所在地址container_name: project_go_api_composerestart: alwaysports:- 9911:9911
这里我们直接从阿里云镜像仓库拉取我们上传的镜像,然后直接将本地9911端口映射到镜像端口。
完成以上操作后,我们在仓库根目录下创建一个名为.drone.yml的文件,用于触发脚本,代码如下:
kind: pipelinetype: dockername: project-go-api#构建步骤steps:#构建镜像- name: buildimage: golang:latestpull: if-not-existsenvironment:GOPROXY: "https://goproxy.cn,direct" #懂的都懂volumes: #缓存go mod&pkg,可以大幅度提高速度,避免每次都下载- name: pkgdepspath: /go/pkgcommands:- CGO_ENABLED=0 go build -o project-go-api#推送镜像至镜像仓库- name: publishimage: plugins/dockermirrors: #镜像仓库加速地址,不需要加速,可以直接删除from_secret: registry_mirrorssettings:purge: falseregistry: #镜像仓库域名from_secret: registryrepo: #镜像仓库详细地址from_secret: repouse_cache: truetags:- latestusername: #镜像仓库账户from_secret: registry_user_namepassword: #镜像仓库密码from_secret: registry_password#部署服务- name: ssh commandsimage: appleboy/drone-sshsettings:host:from_secret: ssh_ipport: 22username:from_secret: ssh_user_namepassword:from_secret: ssh_passwordscript:- cd /home/docker/app/project-go-api- docker-compose pull && docker-compose up --force-recreate -d#通知到邮件- name: emailimage: drillster/drone-emailsettings:recipients_only: truerecipients: #收件人from_secret: email_recipientssubject: >{{#success build.status}}{{ repo.name }} 部署成功{{else}}{{ repo.name }} 部署失败{{/success}}host: smtp.qq.comport: 465from: #发件人from_secret: email_fromusername: #发件人邮箱名from_secret: email_frompassword: #发件人邮箱密码from_secret: email_password
我们本地开发后,git提交代码上去,看看drone运行效果

然后看到邮件通知

这样我们就完成了自动化部署。
文章转载自程序员技术笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。





