CICD流水线

流程介绍

flow

  • Cyclone提供了丰富的 API 供 web 应用调用
  • 通过 API 建立版本控制系统中代码库与Cyclone服务关联关系后,版本控制系统的提交、发布等动作会通过 webhook 通知到 Cyclone-Server
  • Cyclone-Server 启动一个基于 Docker in Docker 技术的 Cyclone-Worker 容器,在该容器中从代码库中拉取源码,按照源码中 caicloud.yml 配置文件,依次执行:
    • PreBuild:在指定编译环境中编译可执行文件
    • Build:将可执行文件拷到运行环境容器中,打成镜像发布到镜像仓库中
    • Integration:运行持续集成所依赖的微服务,启动一个容器执行集成测试,如果微服务镜像名配置为“BUILT_IAMGE”,则使用 Build 阶段新构建的镜像
    • PostBuild:启动一个容器执行一些脚本命令,实现镜像发布后的一些关联操作
    • Deploy:使用发布的镜像部署应用到 kubernetes 等容器集群 Paas 平台
  • 构建过程日志可以通过 Websocket 从 Cyclone-Server 拉取
  • 构建结束后 Cyclone-Server 将构建结果和完整构建日志通过邮件通知用户

流水线配置

PreBuild

在执行构建前阶段时,Cyclone 会根据定义的镜像和命令去执行,最后,与其他环节不同的是,构建前环节需要指定 outputs 字段,在构建结束后,被定义在 outputs 字段中的文件或目录会被拷贝出容器,供构建环节构建镜像时使用。

pre_build:
  image: golang:v1.5.3
    volumes:
      - .:/root
    environment:
      - key = value
    commands:
      - ls
      - pwd
    outputs:
        - file1
        - dir2

Build

如果要启用 caicloud.yml 中的构建环节,需要定义 context\_dirdockerfile_name 其中的至少一个。

build:
  context_dir: publish
  dockerfile_name: Dockerfile_publish

Cyclone会在 <root_dir>/<context_dir> 目录下,根据文件 <root_dir>/<context_dir>/<dockerfile_name> 来进行镜像的构建。如果镜像被成功构建,就会将其推送到镜像仓库中。

Integration

Cyclone 在进行持续集成时,会使用Build阶段构建的镜像运行一个 docker 容器。与此同时,Cyclone 支持在执行持续集成时同时运行多个 service。这些 service 是以独立容器的方式运行的,与持续集成容器之间可以以 links 的方式直接地通信。比如,当持续集成需要进行数据库访问时,可以将数据库以 service 的方式启动,持续集成容器通过添加 link 的方式访问该容器。

Service 容器和持续集成容器是在 docker 默认的网络模式下的,所以在持续集成容器中,通过 links 的方式),根据服务名和端口,就可以直接访问到服务容器。当service的镜像名配置为“BUILT_IMAGE”时,会使用Build阶段新构建的镜像。

integration:
  services:
    postgres:
      image: postgres:9.4.5
      enviroment:
        - key = value
      commands:
        - cmd1
        - cmd2
    app:
      image: BUILT_IMAGE
      enviroment:
        - key = value
      commands:
        - cmd1
        - cmd2
  environment:
    - key = value
  links: 
    - postgres
  commands:
    - ls
    - pwd
    - ping postgress

PostBuild

Cyclone 支持构建后阶段,构建后阶段会运行在一个单独的容器中,代码会被以 volume 的形式挂载在容器中。我们推荐你可以将需要用到的二进制等等都打包在镜像中,而把构建后需要执行的逻辑写在 commands 字段中。

post_build:
  image: golang:v1.5.3
  environment:
    - key = value
  commands:
    - ls
    - pwd

Deploy

Cyclone 可以把最新发布到镜像仓的镜像部署更新到指定的多个应用上。Cyclone 还可以将镜像部署到 Caicloud CubernetesGoogle Kubernetes 上。

Caicloud Cubernetes

#deploy段
deploy:
  - deployment: redis-master
    cluster: cluster1_id
    namespace: namespace1_id
    containers:
      - container1
      - container2
  - deployment: redis-slave
    cluster: cluster2_id
    namespace: namespace2_id
    containers:
      - container1
      - container2

Google Kubernetes

#deploy段
deploy:
  - type: kubernetes 
    host: <cluster host>
    token: <cluster access token>
    cluster: cluster1_id
    namespace: namespace1_id
    deployment: redis-master
    containers:
      - container1
      - container2
  - type: kubernetes 
    host: <cluster host>
    token: <cluster access token>
    cluster: cluster2_id
    namespace: namespace2_id
    deployment: redis-slave
    containers:
      - container1
      - container2

results matching ""

    No results matching ""