k8s与CICD--一个完整的drone demo

前言

在上一篇文章中,我们只是简单介绍了一下drone的部署。接下来会逐步深入介绍,后期也会翻译一些官方的文档以及我在实际工作中用到的插件的介绍。这篇文章,主要是一个完整的drone demo。pipeline中,包括了git clone 拉取代码,go build 构建,生成docker镜像并推送到harbor,notify 通知。关于通知这块,官方提供的插件都是一些西方喜欢用的即时通讯或是协作工具,比如telegram,slack,line等。所以在后期,我计划写一个微信或是钉钉的插件。

.drone.yml

先上配置文件,有一个大概的认识,再逐一解读。

workspace:
  base: /go
  path: src/gogs.xxx.com/baa-cicd
pipeline:
  build:
    image: golang:latest
    commands:
      - go build -o baa-cicd
  publish:
    image: plugins/docker
    registry: registry.xxx.com
    repo: registry.xxx.com/test/baa-cicd
    tags: latest
    secrets: [ docker_username, docker_password ]
    insecure: true
  notify:
    image: plugins/slack
    webhook: https://hooks.slack.com/services/xxx/xxx/xxx
    channel: dev
    template: >
      {{#success build.status}}
        build {{build.number}} succeeded. Good job.
      {{else}}
        build {{build.number}} failed. Fix me please.
      {{/success}}

workspace

工作空间,就是一个可以被pipeline各个阶段共享volume和工作路径的东东,好处就是避免了各种cd和拷贝。由于该demo项目使用golang。所以设置路径是/go/src/gogs.xxx.com/baa-cicd。

clone

git plugin 是一个默认的插件,即使不配置,drone会自动配置,用来拉取代码。

build

由于是golang项目。一个命令go build即可。当然由于项目比较小,所以我提前用glide将依赖的包安装到vendor目录下了。否则应该定制自己安装好glide的镜像,或是在go build命令之前,执行 glide install 命令。当然此处也可以增加go test 对项目进行测试。

build:
    image: golang:latest
    commands:
      - glide install
      - go build -o baa-cicd
      - go test -v

docker build

构建docker镜像阶段,我们这边用harbor搭建了自己的私有registry。此处需要注意的是secrets: [ docker_username, docker_password ]这里的设置。实际上有一些场景是,为了安全考虑,不想把用户名和密码暴露在配置文件中,drone提供了secret ref的用法。在drone ui界面配置secret,如下:

k8s与CICD--一个完整的drone demo_第1张图片

然后在.drone.yml 里通过secrets选项进行关联即可。

当然这一步前提是要提供一个Dockerfile文件。

FROM alpine
RUN apk add -U tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
COPY baa-cicd  /usr/local/bin/baa-cicd

EXPOSE 13123

ENTRYPOINT  ["baa-cicd","--port=13123"]

notify

在通知这块,我没有使用email插件,恰好之前加入了istio的slack,所以自己建立了slack中的workspace,然后在其中建立一个channal,命名dev。
此处需要说明的是webhook的设置。具体可以查看slack官方文档。设置成功以后,
然后拷贝 Webhookurl即可。当然可以定制自己的头像以及app名。我这边都是默认的。

k8s与CICD--一个完整的drone demo_第2张图片

最后实际收到通知效果:

k8s与CICD--一个完整的drone demo_第3张图片

demo 源码

具体代码,我放到了github上。大家直接git clone 下来即可。
最后放一张整个build的图。

k8s与CICD--一个完整的drone demo_第4张图片

你可能感兴趣的:(kubernetes,docker,ci,golang,slack)