继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Drone+Rancher 实现CI/CD

慕哥9229398
关注TA
已关注
手记 1241
粉丝 199
获赞 913

此文章默认读者已经入门Drone和Rancher. 还没入门的同学可以看我另外的文章, 在底部有链接

Drone是一个极度简单的CI工具, 学习成本极低. shell 是什么? 为什么要用shell?

Rancher也是一个傻瓜化的容器管理平台.

它们真的是不爱瞎折腾的人的首选.

集成

集成就是将程序打包成docker镜像

这里使用drone来实现, 需要在项目跟目录下编写.drone.ymlDockerfile

.drone.yml

workspace:
  base: /go  # 指定git clone到的地方, 应该放在gopath下, 才能正常编译
  path: src/git.bysir.store/bysir/${DRONE_REPO_NAME}pipeline:
  build:
    image: golang:1.9    # 对于依赖包,可以通过挂载到宿主机上实现加速(墙外的包根本拉不下来)
    volumes:
      - /workspace/ci/gopath:/gopath
    commands:
      - export GOPATH=$GOPATH:/gopath      # 如果要在alpine上运行编译后文件则必须添加这些参数, 参见http://docs.drone.io/creating-custom-plugins-golang/
      - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o app
      - cp -f config.test.yml config.yml
    when:
      branch: develop  # 需要在drone填写secrets: docker_username, docker_password
  publish:
    image: plugins/docker
    mirror: https://docker.mirrors.ustc.edu.cn
    registry: registry-internal.cn-hangzhou.aliyuncs.com # 仓库
    repo: registry-internal.cn-hangzhou.aliyuncs.com/zhuzi/drone-test # docker仓库地址
    secrets: [ docker_username, docker_password ]
    tags:
      - test
    when:
      branch: develop

需要注意的地方在上面已经写了注释.

这个pipeline做的事情有:

  • build: 编译go项目为可执行文件

  • publish: 将可执行文件通过Dockerfile打包并发布到仓库

Dockerfile

FROM alpine

COPY app /
COPY config.yml /

ENTRYPOINT ["./app"]

alpine很强大.

部署

在之前的文章简单讲过如何简单的运行打包好的容器, 而这里将使用Rancher管理容器.

只需要使用到peloton/drone-rancher这个插件就可以了.

继续在.drone.yml添加一个pipeline步骤

  # 插件会干两件事情, 1. upgrade 2. finish upgrade
  # 注意如果这个服务不在Active状态就不能正常升级, 需要登录rancher修改状态, 正常情况下不会发生这个错误.
  rancher:
    image: peloton/drone-rancher
    url: http://rancher.bysir.store/v1
    access_key: "xxx"
    secret_key: "xxx"
    service: app/drone-test    # 为了使rancher能拉取到私有镜像, 需要在rancher控制面板"基础架构->镜像库"添加这个私有镜像库
    docker_image: registry-internal.cn-hangzhou.aliyuncs.com/zhuzi/drone-test:test
    start_first: true # 先启动新服务, 后停止原服务. 如果为false则先关闭原服务再启动
    confirm: true
    timeout: 100 # 如果rancher没在这个时间内升级成功则报错, 服务大小等差异会导致升级时间不一样, 可根据自己业务修改超时时间.
    when:
      branch: develop
  • rancher: 调用rancher的api实现一个应用的升级. 使用到了一个第三方插件peloton/drone-rancher, 可以在这里找到它的文档.

在升级服务之前, 需要有服务才行. 所以我们需要在rancher添加名为app应用, 再添加drone-test服务, 这个服务可以为空镜像, 如alpine.

添加成功后如下:


webp

测试

现在就配置好了, 超级简单, 开始push一个develop分支用来测试吧

祝成功:


webp

drone

可以看到rancher这个服务的docker镜像已经改变


webp

rancher



作者:bysir
链接:https://www.jianshu.com/p/e580ac2a389b


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP