暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker自动化部署Go

586

 

   

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

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

 

准备Go项目代码

我们先在Gitea创建一个仓库,提交代码到Gitea仓库,截图如下


 

 Drone激活Gitea仓库

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

 

 

 

准备镜像仓库

自动化部署过程,我们需要将编译后的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

     

    当配置私密信息

    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运行效果

        然后看到邮件通知

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


        【图】来源于网络

        【文】https://hongzx.cn/home/blogShow/20

        Follow

        佛布朗斯基博客

        (佛布朗斯基)我是一只热爱编程的码农,已从事后端开发5年以上,也正因此,在日常工作学习中,会遇到蛮多问题需要解决,我希望透过记录,真实地将问题以及解决方法保存下来,更为高效地解决问题是我的初衷。


         

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

        评论