在使用DaoCloud的过程中,我们已经发现一些问题使得在开发-部署的过程中并没有很好的连贯。 也在此时,DaoCloud宣布了对个人免费账户停止构建发布服务:

尊敬的 DaoCloud 用户,如之前通知,我们将于2017年11月30日23点(明晚11点)进行套餐升级变更,届时公有云平台将暂停服务,此次变更将停止对个人用户提供“云端测试环境”,包括:应用托管、服务集成和volume。请您提前备份导出重要数据和配置。

介于此,我们决定做出一些改变,以更好的服务于开发者,并遵循我们自己定制的开发流程。

这篇文章是介绍我们最新交付的成果:使用Github作为代码管理,Drone作为CI工具,Harbor作为Docker Image Private Registry,Rancher(Cattle)作为编排平台,使得在我们编写完git的commit message后,只需要『git push』,就可以自动运行任何脚本,自动构建Docker Image,自动push到我们自建的Harbor仓库或者阿里云(http://dev.aliyun.com)免费仓库,完成image push动作后,自动进行rancher的service upgrade。在这个的同时,我们还可以将构建信息实时反应到Slack、Rocket Chat或企业微信里。

与以前项目不同的是,我们需要一个新的.drone.yml文件,这个文件告诉我们在push代码之后,我们请求drone做哪些CI操作:

img

在.drone.yml文件中,我们可以根据项目不同,自定义不同的构建步骤:

pipeline:
  test:
    group: build
    image: golang
    commands:
      - go build
      - go test
  build:
    group: build
    image: node
    commands:
      - npm install
      - npm run test
      - npm run build
  publish:
    image: plugins/docker
    repo: octocat/hello-world

每一个pipeline节点,你也可以设定trigger的条件,比如branch为master,event为push的时候出触发:

pipeline:
  test:
    group: build
    image: golang
    when:
      branch: master
      event: push

这样就使得我们的构建步骤可以定制,可以根据项目的不同,触发时机的不同,有不同pipeline。 所有有关Drone的文档都在这里:

http://docs.drone.io/getting-started/

同时,我们也做了一个Github Repository,是使用Koa.js做了一个简单的网站,然后每一次提交代码,都会实时反应到企业微信,并自动部署到Rancher,项目的地址是:

https://github.com/iHealthStrategy/drone-demo-koajs

各位能在开发的过程中应思考如何定制自己的流程,同样作为使用Drone的新手,我们也期待您的分享。

img

Tips:

  • @Clem109 为了流程更加接地气,放弃使用Slack,自己编写了企业微信的Drone CI插件,并开源到Github上。
  • 测试的同学或许也可以编辑这个文件,以定制自己的CI/CD流程
  • Harbor目前在使用中可能有潜在的问题,但速度惊人。我们建议在把Image推送到Harbor时,同时推送到阿里云免费的镜像仓库,以确保数据有双重备份。