Docker容器技术

Drone+Rancher 实现CI/CD

2018-04-27  本文已影响673人  bysir

此文章默认读者已经入门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做的事情有:

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添加名为app应用, 再添加drone-test服务, 这个服务可以为空镜像, 如alpine.

添加成功后如下:


测试

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

祝成功:


drone

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


rancher

参考

上一篇 下一篇

猜你喜欢

热点阅读