美文网首页Docker容器技术
Drone+Rancher 实现CI/CD

Drone+Rancher 实现CI/CD

作者: bysir | 来源:发表于2018-04-27 22:20 被阅读673次

    此文章默认读者已经入门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.

    添加成功后如下:


    测试

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

    祝成功:


    drone

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


    rancher

    参考

    相关文章

      网友评论

        本文标题:Drone+Rancher 实现CI/CD

        本文链接:https://www.haomeiwen.com/subject/imvvlftx.html