Table of Contents generated with DocToc
这份文档提供给想为 Cyclone 贡献代码或者文档的用户。
因为 Cyclone 是在 Github 上开源的,因此我们使用 Github Flow 作为协作的工作流,你可以花五分钟的时间来了解下它 :)
我们已经写了一些 bash 脚本来帮助你搭建开发环境。如果你想在本地运行一个 Cyclone 服务,可以通过:
./scripts/setup.sh
来实现,这段脚本会在容器中启动所有的依赖服务,在本地编译和运行 Cyclone server,相比于把全部服务都运行在容器中的方式,在本地运行 Cyclone server 更容易开发与调试。
请注意,如果你的 docker daemon 是运行在一个 docker machine 中的,那么你可能需要做一些额外的工作,比如端口映射等等。
我们有单元测试和端到端的测试用例,当你想为 Cyclone 贡献时可以使用它们来进行代码的测试。
你可以通过:
./scripts/unittest.sh
来进行单元测试,与此同时目前我们的 Travis 也会进行这样的单元测试,因此你也可以在 Travis 的构建日志中查看测试结果。在之后我们会使用 Cyclone 来对 Cyclone 进行单元测试。
目前 Cyclone 的端到端测试会先启动一个 Cyclone server,然后在另外一个独立的进程中通过发送 RESTful 请求的方式对其进行测试,并验证结果。
我们可以使用 Cyclone 来对 Cyclone 进行端到端的测试。 如果你以docker方式部署,你可以通过:
./scripts/e2e-docker.sh
如果你以k8s方式部署,你可以通过:
./scripts/e2e-k8s.sh
我们使用 swagger ui 来生成 API 文档,如果你的工作影响了 Cyclone 的 API,你可以在 http://<your cyclone server host>:7099/apidocs
查看最新的 API 文档,或者你可以通过我们的在线文档来进行开发与贡献。
虚线框表示规划中的特性
Cyclone提供了丰富的API供web应用调用(详见API说明)
- 通过调用cyclone-serser的API创建一个基于软件配置管理(SCM)系统中某代码库的流水线,在流水线中定义要执行的各个阶段的操作
- 直接手动触发,或者通过SCM的提交、发布等动作以webhook的形式触发Cyclone-Server
- Cyclone-Server启动一个基于Docker in Docker技术的Cyclone-Worker容器,在该容器中,按照pipeline的配置,依次执行:
- codeCheckout:从指定代码库中拉取源码
- package:启动用户配置的镜像,执行用户配置命令构建代码
- imageBuild:根据用户指定的Dockerfile制作镜像
- integrationTest:运行持续集成所依赖的微服务,启动一个容器对
imageBuild
阶段构建成功的镜像执行集成测试 - imageRelease:将构建成功的镜像发布到镜像仓库中
- deploy:使用发布的镜像部署应用到kubernetes等容器集群Paas平台(敬请期待)
- 构建过程日志可以通过Websocket从Cyclone-Server拉取
- 构建结束后Cyclone-Server将构建结果和完整构建日志通过邮件通知用户(敬请期待)
工作流示例可参考快速开始
每个立方体代表一个容器
- Cyclone-Server中Api-Server组件提供Restful API服务,被调用后需要较长时间处理的任务生成一个待处理事件写入mongoDB
- Scheduler定期从mongoDB任务队列中获取任务,然后调度worker运行
- Cyclone-Worker启动后,从server获取任务信息,然后执行pipeline的各个stage,在执行的同时,将日志实时输出到server
- Log-Server负责收集Worker发送过来的实时日志,并持久化到日志文件中
- 需要持久化的数据存入mongo