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条评论