在使用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操作:

在.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的新手,我们也期待您的分享。

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