| 阅读 |,阅读约 4 分钟
| 复制链接:

蓝鲸全家桶介绍

项目名称 项目代号 对标产品 简介 特性 开发语言
持续集成平台 Bk-ci jenkins 是一个免费并开源的 CI 服务,可助你自动化构建-测试-发布工作流,持续、快速、高质量地交付你的产品。它是企业 IT 管理体系的核心,通过提供配置管理服务,以数据和模型相结合映射应用间的关系,保证数据的准确和一致性; 工程编译 静态代码检查 运行测试用例,及时发现 BUG 部署与发布。提供了流水线、代码库、凭证管理、环境管理、研发商店 5 大核心服务
配置平台 CMDB 阿里云 构建其它流程的基石,而在蓝鲸智云体系里,配置平台就扮演着基石的角色,为应用提供了各种运维场景的配置数据服务。 自定义配置模型(CI)管理 Web 可视化的业务拓扑 全面的 API 服务 自动发现和主机快照 支持跨云管理 动态查询分组 对外开源 Golang
容器管理平台 rancher 同华为云的ccs容器管理控制台 集群创建、集群管理、容器编排配置模板、容器视图、容器操作、镜像管理、网络管理
作业平台 Job 基于蓝鲸智云管控平台 Agent 管道之上,提供基础操作的原子平台;具备上万台并发处理能力,除了支持脚本执行、文件拉取 / 分发、定时任务等一系列基础运维场景以外,还支持通过流程调度能力将零碎的单个任务组装成一个自动化作业流程;而每个任务都可做为一个原子节点,提供给上层或周边系统/平台使用,实现跨系统调度自动化。 执行脚本,分发文件
标准运维平台 SOPS 通过可视化的图形界面进行任务流程编排和执行的系统 标准运维有两大核心服务。一个是流程编排服务,另一个是自助化服务 python、vue
PaaS平台 PaaS 开放式的开发平台,让开发者可以方便快捷地创建、开发、部署和管理SaaS应用。包括PaaS(python)、PaasAgent(go) python-django、golang-echo

运维平台搭建

 1# 安装mysql
 2docker run --name=mysql \
 3-e MYSQL_DATABASE=bk_sops \
 4-e MYSQL_USER=bk_sops \
 5-e MYSQL_PASSWORD=bk_sops \
 6-e MYSQL_ROOT_PASSWORD=root \
 7-p 3306:3306 \
 8-d mysql:5.7
 9
10
11# 安装依赖包
12pip install python-magic-bin
13pip install -r requriments.txt
14# 数据初始化
15python manage.py migrate
16python manage.py createcachetable django_cache

源码分析

  • 过spf13/viper管理配置文件,配置文件路径:agent启动路径/etc/ ,配置文件格式

     1# 日志路径
     2settings.AGENT_LOG_PATH
     3# 服务端地址
     4settings.CONTROLLER_SERVER_URL
     5# sid
     6auth.sid
     7# token
     8auth.token
     9# 端口
    10port
    11# ip
    12ip
    13# 构建路径
    14settings.BUILD_PATH
    15# 执行时间限制
    16settings.EXECUTE_TIME_LIMIT
    17  
    18settings.BASE_APP_PATH
    19settings.TEMPLATE_PATH
    
  • 初始化日志路径

  • 启动服务

    • 调用服务端的/v1/healthz接口,判断是否能联通,用到的http框架:parnurzeal/gorequest
      • 请求头中带上sid和token,key为X-ID,value为X-TOKEN
    • 注册服务端url对应的handler,用到的框架:echo,提供了四个接口
      • /v1/app/online,post请求,
      • /v1/app/offline,post请求,
      • /v1/app/healthz,get请求,
      • /v1/healthz,get请求。判断agent是否活着
    • 启动服务,并监听端口

测试环境会在请求头中添加特殊标识:headers[“x-use-test-env”] = “1”

  • http请求统一处理,统一记录日志和出错信息

appJobHandler

  • 校验权限:从请求头和请求体中获取X-ID和X-TOKEN的值,并和配置文件做对比
  • 请求体绑定DeployData对象
  • 将data转成job
  • 根据“off“字段,执行以下操作
    • 根据下发的任务的执行入口(BUILD_ENTRY),启动命令行执行
    • 启动一个协程获取标准输出,并调用postEventLog发送日志,日志接口:"/v1/apps/" + appCode + “/events/” + eventID
      • 发送的信息包括:app_code,event_id,event_log(status, log)
    • select配合time.After限制执行超时时间,超时就kill进程
 1  type DeployData struct {
 2    AppCode      string                 `json:"app_code"`
 3    Mode         string                 `json:"mode"`
 4    Envs         map[string]interface{} `json:"envs"`
 5    EventID      string                 `json:"event_id"`
 6    DeployToken  string                 `json:"deploy_token"`
 7    DeployVars   map[string]interface{} `json:"deploy_vars"`
 8    SaaSSettings map[string]interface{} `json:"saas_settings"`
 9  }
10  AppJob struct {
11    AppCode      string
12    Mode         string
13    EventID      string
14    Handle       string
15    DeployToken  string
16    Envs         map[string]interface{}
17    DeployVars   map[string]interface{}
18    SaaSSettings map[string]interface{}
19  }
  • 根据”on“字段,执行以下操作
    • 生成配置
      • 创建以下路径:baseAppPath, “apps/projects/"+appJob.AppCode+"/conf”
      • 渲染一堆模板文件
    • 判断是否是saas部署,决定是否下载文件
      • 下载文件
      • 计算文件的md5值
    • 执行命令行

healthzHandler

  • 校验权限
  • 获取机器mac地址,并返回

healthzCheckHandler

  • 直接返回字符串:“paasagent is alive”

版本更新记录

  • 通过一定格式保存在指定路径,通过restful接口,读取md文件,并转换为html格式
  • 比如:v1.0.0_2021-01-01.md

pipeline

插件机制

源码位置:bk-sops/pipeline/component_framework/runner.py