使用`Drone`构建`Docker`镜像一键发布并推送电报通知

书接上回,上文已经搭建好了Drone CI环境,本文就搭建一个Golang + Docker的Demo。
具体代码见:示例代码

准备工作

  1. 一个电报机器人,文档请点我查看(需要一把梯子)
  2. 一个项目,可以直接用上文的实例Demo

食用方式

  1. Gitea创建一个空项目,本过程不赘述。
  2. 打开Drone CI后台,点击右上角SYNC按钮更新项目目录,更新完毕之后点击项目右侧ACTIVAVE按钮,然后点击ACTIVATE REPOSITORY按钮启用自动化
  3. 初始化项目
    1
    # clone项目,我这只是个例子
    2
    git clone https://gitee.ltd/lxh/drone-ci-golang
    1
    # 初始化
    2
    cd drone-ci-golang
    3
    go mod init drone-ci-golang
    1
    // 创建 main.go 文件
    2
    package main
    3
    4
    import (
    5
      "net/http"
    6
    7
      "github.com/gin-gonic/gin"
    8
      "github.com/sirupsen/logrus"
    9
    )
    10
    11
    func main() {
    12
      r := gin.Default()
    13
    14
      r.GET("/health", func(c *gin.Context) {
    15
        c.JSON(http.StatusOK, gin.H {
    16
          "health": true,
    17
        })
    18
      })
    19
    20
      if err := r.Run(":8080"); err != nil {
    21
        logrus.WithError(err).Fatal("Couldn't listen")
    22
      }
    23
    24
    }
  4. 编写.drone.yml文件,可参考下文
    1
    kind: pipeline
    2
    name: golang-docker-ci
    3
    4
    steps:
    5
      - name: 执行代码检查
    6
        image: golang:latest
    7
        commands:
    8
          - go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
    9
          - golangci-lint run
    10
    11
      - name: 编译二进制文件
    12
        image: golang:latest
    13
        environment:
    14
          GOOS: linux
    15
          GOARCH: amd64
    16
          CGO_ENABLED: 0
    17
        # 编译生成二进制文件,我这儿叫 go-app,酌情修改
    18
        commands:
    19
          - go build -o go-app
    20
    21
      - name: 打包Docker镜像并推送
    22
        image: plugins/docker
    23
        settings:
    24
          registry: 需要推送的Docker私服服务器地址
    25
          repo: 需要打包的镜像名称
    26
          use_cache: true
    27
          username: 私服登录用户名
    28
          password: 私服登录密码
    29
          auto_tag: true # 自动打tag
    30
          # 也可以用下面这个手动指定
    31
          # tags:
    32
            # - latest
    33
            # - 0.0.1
    34
        when:
    35
          event: push
    36
          branch: master
    37
    38
      - name: 发送电报通知消息
    39
        image: appleboy/drone-telegram
    40
        settings:
    41
          token: 电报机器人的token
    42
          to: 需要接收的用户的userid,可在电报机器人 `@userinfobot`得到
    43
          message: >
    44
            {{#success build.status}}
    45
               {{build.number}} 次构建已完成,状态:构建成功
    46
            {{else}}
    47
               {{build.number}} 次构建已完成,状态:构建失败
    48
            {{/success}}
    49
            提交记录:{{commit.author}} - {{commit.message}}
  5. 编写Dockerfile文件
    1
    FROM alpine
    2
    MAINTAINER LiXunHuan(lxh@cxh.cn)
    3
    4
    # 创建工作目录,修改alpine源为中科大的源,安装必要工具
    5
    RUN mkdir -p /app && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
    6
      apk update && \
    7
      apk upgrade && \
    8
      apk add ca-certificates && update-ca-certificates && \
    9
      apk add --update tzdata && \
    10
      rm -rf /var/cache/apk/*
    11
    12
    WORKDIR /app
    13
    14
    # 这个go-app 是上面.drone.yml里面编译生成的文件,酌情修改
    15
    COPY go-app ./
    16
    ENV TZ=Asia/Shanghai
    17
    18
    EXPOSE 8080
    19
    20
    ENTRYPOINT ./go-app
  6. 推送项目到Gitea私服,Drone会自动处理
  7. 打包完成之后,随便找个服务器pull镜像,然后运行测试效果

效果预览

  • Drone运行截图1
    l6t37V.png

  • Drone运行截图2
    l6t100.png

  • Nexus私服镜像图
    l6tlmq.png

李寻欢 wechat
扫码关注公众号
0%