使用Drone
构建Docker
镜像一键发布并推送电报通知
书接上回,上文已经搭建好了
Drone CI
环境,本文就搭建一个Golang + Docker的Demo。
具体代码见:示例代码
准备工作⌗
- 一个电报机器人,文档请点我查看(需要一把梯子)
- 一个项目,可以直接用上文的实例Demo
食用方式⌗
- 在
Gitea
创建一个空项目,本过程不赘述。 - 打开
Drone CI
后台,点击右上角SYNC
按钮更新项目目录,更新完毕之后点击项目右侧ACTIVAVE
按钮,然后点击ACTIVATE REPOSITORY
按钮启用自动化 - 初始化项目
# 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")
}
}
- 编写
.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}}
- 编写
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
- 推送项目到
Gitea
私服,Drone
会自动处理 - 打包完成之后,随便找个服务器pull镜像,然后运行测试效果
效果预览⌗
Drone
运行截图1Drone
运行截图2Nexus
私服镜像图