Skip to content

Latest commit

 

History

History
107 lines (71 loc) · 5.13 KB

developer-guide_zh-CN.md

File metadata and controls

107 lines (71 loc) · 5.13 KB

Table of Contents generated with DocToc

开发者指南

这份文档提供给想为 Cyclone 贡献代码或者文档的用户。

向 Cyclone 进行贡献的工作流

因为 Cyclone 是在 Github 上开源的,因此我们使用 Github Flow 作为协作的工作流,你可以花五分钟的时间来了解下它 :)

搭建你的开发环境

我们已经写了一些 bash 脚本来帮助你搭建开发环境。如果你想在本地运行一个 Cyclone 服务,可以通过:

./scripts/setup.sh

来实现,这段脚本会在容器中启动所有的依赖服务,在本地编译和运行 Cyclone server,相比于把全部服务都运行在容器中的方式,在本地运行 Cyclone server 更容易开发与调试。

请注意,如果你的 docker daemon 是运行在一个 docker machine 中的,那么你可能需要做一些额外的工作,比如端口映射等等。

测试 Cyclone

我们有单元测试和端到端的测试用例,当你想为 Cyclone 贡献时可以使用它们来进行代码的测试。

单元测试

你可以通过:

./scripts/unittest.sh

来进行单元测试,与此同时目前我们的 Travis 也会进行这样的单元测试,因此你也可以在 Travis 的构建日志中查看测试结果。在之后我们会使用 Cyclone 来对 Cyclone 进行单元测试。

端到端测试

目前 Cyclone 的端到端测试会先启动一个 Cyclone server,然后在另外一个独立的进程中通过发送 RESTful 请求的方式对其进行测试,并验证结果。

我们可以使用 Cyclone 来对 Cyclone 进行端到端的测试。 如果你以docker方式部署,你可以通过:

./scripts/e2e-docker.sh

如果你以k8s方式部署,你可以通过:

./scripts/e2e-k8s.sh

API 文档

我们使用 swagger ui 来生成 API 文档,如果你的工作影响了 Cyclone 的 API,你可以在 http://<your cyclone server host>:7099/apidocs 查看最新的 API 文档,或者你可以通过我们的在线文档来进行开发与贡献。

Cyclone 架构以及工作流

工作流

flow

虚线框表示规划中的特性

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将构建结果和完整构建日志通过邮件通知用户(敬请期待)

工作流示例可参考快速开始

软件架构

architecture

每个立方体代表一个容器

  • Cyclone-Server中Api-Server组件提供Restful API服务,被调用后需要较长时间处理的任务生成一个待处理事件写入mongoDB
  • Scheduler定期从mongoDB任务队列中获取任务,然后调度worker运行
  • Cyclone-Worker启动后,从server获取任务信息,然后执行pipeline的各个stage,在执行的同时,将日志实时输出到server
  • Log-Server负责收集Worker发送过来的实时日志,并持久化到日志文件中
  • 需要持久化的数据存入mongo