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

Kubernetes+Gitea+Drone自动化部署Go

1033

 

上一篇跟大家分享如何使用Drone制作镜像,然后上传镜像到镜像仓库,后面我又捣鼓尝试在这个流程的基础上部署服务,今天跟大家分享这个过程。

 

准备Go程序代码
在这里我直接用我之前基于Gin开发的API程序作为实验代码,将这份代码直接复制到Git仓库根目录里。

 

制作镜像
我们直接在Git仓库目录下创建一个文件,名字为Dockerfile,用来制作镜像,配置如下
    # Version 1.0
    FROM alpine:latest
    # 维护者信息
    MAINTAINER hzx790254812@gmail.com
    # 设置工作目录
    WORKDIR home
    COPY drone-go home/
    # 暴露端口
    EXPOSE 9999
    # 执行命令
    ENTRYPOINT ./drone-go

    这里我们设定一个工作目录,将编译好后的Go二进制文件复制到容器文件里,并暴露9999端口,同时运行二进制文件。

     

    设置密钥信息
    由于涉及到一些重要信息,我并不想放在.drone.yml文件里,直接在drone管理面板设置,将镜像仓库账号密码、服务器账号密码都不写到该文件里,配置如下,大家根据情况进行配置

     

    编写.drone.yml

    还是拿我们上一篇教程的.drone.yml文件,我们同样在git仓库根目录下创建一个文件名为.drone.yml,里面包含了通知到电报的代码,如果不需要,可以删掉整个notification,配置如下

      kind: pipeline
      type: kubernetes
      name: project-go


      #构建步骤
      steps:
      #构建镜像
      - name: build
      image: golang:latest
      pull: if-not-exists
      commands:
      - CGO_ENABLED=0 go build -o drone-go
      #推送镜像至镜像仓库
      - name: publish
      image: plugins/docker
      settings:
      purge: false
      registry: 镜像仓库域名
      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/k8s/app
      - kubectl apply -f drone-go.yaml
      - kubectl rollout restart deployment drone-go-deployment


      #通知到telegram
      - name: notification
      image: appleboy/drone-telegram
      settings:
      token:
      from_secret: telegram_token
      to:
      from_secret: telegram_user_id
      message: >
      {{#success build.status}}
      {{repo.name}}


      第{{build.number}} 次自动部署成功


      耗时 {{since build.started}}


      提交分支 {{commit.branch}}


      详情 {{ build.link }}
      {{else}}
      {{repo.name}}


      第{{build.number}} 次自动部署失败


      耗时{{since build.started}}


      提交分支 {{commit.branch}}


      详情 {{ build.link }}
      {{/success}}

       

      编写k8s部署服务文件
      我们在服务器的/home/k8s/app目录下创建一个名为drone-go.yaml文件,在上一篇教程里我们部署服务用到了这两个变量,大家可以根据的情况进行修改。
        apiVersion: apps/v1
        kind: Deployment
        metadata:
        name: drone-go-deployment
        spec:
        selector:
        matchLabels:
        app: drone-go
        replicas: 2
        strategy:
        type: RollingUpdate
        rollingUpdate:
        maxSurge: 1
        maxUnavailable: 1
        template:
        metadata:
        labels:
        app: drone-go
        spec:
        containers:
        - name: drone-go
        image: 我们编译的镜像详细地址
        imagePullPolicy: Always
        ports:
        - containerPort: 9999


        ---


        apiVersion: v1
        kind: Service
        metadata:
        name: drone-go-service
        labels:
        app: drone-go
        spec:
        type: NodePort
        selector:
        app: drone-go
        ports:
        - port: 9999
        targetPort: 9999
        nodePort: 30099

        这里的镜像地址就直接用我们前面自己构建的镜像,同时设置服务平滑重启,这样我们每次更新代码,触发更新,都可以实现平滑重启。

         

        提交测试
        我们修改代码,然后提交,测试整个流程,最终效果如下

        这样我们就成功自动化部署go程序。    


        【图】来源于网络

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

        Follow

        佛布朗斯基博客

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


         

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

        评论