美文网首页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

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

  • GitLab CI/CD实现

    安装gitlab runner 注册shared runner 用admin账户登录,在admin/runners...

  • gitlab 实现 CI/CD

    自从进入现在的公司,托管代码的仓库就开始采用 gitlab , 前期通过配合使用 git 的,实现了对工程代码随心...

  • Prepare

    CI/CD The adoption of CI/CD has changed how developers an...

  • Jenkins 介绍

    Jenkins构建CI/CD CI/CD是什么? CI(Continuous integration,中文意思是持...

  • CI/CD/CD

    CI 持续集成CONTINUOUS INTEGRATION持续集成的环境中,开发人员会频繁提交代码到主干。持续集成...

  • Linux系统环境基于Docker搭建Jenkins实战

    关于CI,CD&CD CI->Continuous Integration:持续集成 CD->Continuous...

  • Auto DevOps之gitlab CI/CD

    @[toc] CI/CD介绍 CI(Continuous Integration)跟CD(Continuous D...

  • 5. GitLab CI/CD实践 - .gitlab-ci.y

    GitLab CI/CD功能基于每个项目根目录下的.gitlab-ci.yml配置文件来实现。 注意:.gitla...

  • Jenkins构建-CI/CD实现

    一、参数化构建 1、我们实现的构建是gitlab更新代码就获取构建,但有时候版本不对,需要指定某个tag版本构建,...

网友评论

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

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