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

准备工作

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

食用方式

  1. Gitea创建一个空项目,本过程不赘述。
  2. 打开Drone CI后台,点击右上角SYNC按钮更新项目目录,更新完毕之后点击项目右侧ACTIVAVE按钮,然后点击ACTIVATE REPOSITORY按钮启用自动化
  3. 初始化项目
# clone项目,我这只是个例子
git clone https://gitee.ltd/lxh/drone-ci-golang
# 初始化
cd drone-ci-golang
go mod init drone-ci-golang
// 创建 main.go 文件
package main

import (
  "net/http"

  "github.com/gin-gonic/gin"
  "github.com/sirupsen/logrus"
)

func main() {
  r := gin.Default()

  r.GET("/health", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H {
      "health": true,
    })
  })

  if err := r.Run(":8080"); err != nil {
    logrus.WithError(err).Fatal("Couldn't listen")
  }

}
  1. 编写.drone.yml文件,可参考下文
kind: pipeline
name: golang-docker-ci

steps:
  - name: 执行代码检查
    image: golang:latest
    commands:
      - go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
      - golangci-lint run

  - name: 编译二进制文件
    image: golang:latest
    environment:
      GOOS: linux
      GOARCH: amd64
      CGO_ENABLED: 0
    # 编译生成二进制文件,我这儿叫 go-app,酌情修改
    commands:
      - go build -o go-app

  - name: 打包Docker镜像并推送
    image: plugins/docker
    settings:
      registry: 需要推送的Docker私服服务器地址
      repo: 需要打包的镜像名称
      use_cache: true
      username: 私服登录用户名
      password: 私服登录密码
      auto_tag: true # 自动打tag
      # 也可以用下面这个手动指定
      # tags:
        # - latest
        # - 0.0.1
    when:
      event: push
      branch: master

  - name: 发送电报通知消息
    image: appleboy/drone-telegram
    settings:
      token: 电报机器人的token
      to: 需要接收的用户的userid,可在电报机器人 `@userinfobot`得到
      message: >
        {{#success build.status}}
          第 {{build.number}} 次构建已完成,状态:构建成功
        {{else}}
          第 {{build.number}} 次构建已完成,状态:构建失败
        {{/success}}
        提交记录:{{commit.author}} - {{commit.message}}        
  1. 编写Dockerfile文件
FROM alpine
MAINTAINER LiXunHuan([email protected])

# 创建工作目录,修改alpine源为中科大的源,安装必要工具
RUN mkdir -p /app && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
  apk update && \
  apk upgrade && \
  apk add ca-certificates && update-ca-certificates && \
  apk add --update tzdata && \
  rm -rf /var/cache/apk/*

WORKDIR /app

# 这个go-app 是上面.drone.yml里面编译生成的文件,酌情修改
COPY go-app ./
ENV TZ=Asia/Shanghai

EXPOSE 8080

ENTRYPOINT ./go-app
  1. 推送项目到Gitea私服,Drone会自动处理
  2. 打包完成之后,随便找个服务器pull镜像,然后运行测试效果

效果预览

  • Drone运行截图1 l6t37V.png

  • Drone运行截图2 l6t100.png

  • Nexus私服镜像图 l6tlmq.png