Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save bboalimoe/de46d2cad9483b5258a5 to your computer and use it in GitHub Desktop.
Save bboalimoe/de46d2cad9483b5258a5 to your computer and use it in GitHub Desktop.

Senz CI 帮助文档

工作环境

  • Jenkins 持续集成系统工具
  • LeanCloud 测试和生产部署环境
  • DaoCloud 测试和生产部署环境
  • Github 代码库以及版本控制工具

基本概念

Jenkins

一个持续集成环境需要包括三个方面要素:代码存储库、构建过程和持续集成服务器。这里代码存储库我们采用的Github,持续集成服务器是Senz项目下的AliYun 服务器,你可以登陆Senz项目[Jenkins管理端][]来查看和管理当前的Jenkins Job(每一个job都是一连串的交互操作,需要在管理端进行相应的配置,以实现项目自动化测试和部署),构建过程即为部署在持续集成服务器上的开源工具 Jenkins。 Jenkins提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

LeanCloud

[LeanCloud][]是国内针对移动应用的一站式BaaS云端服务。在可见的未来,我们大部分的NodeJS后端服务和部分独立的Python(django或者flask)后端服务都会部署在LeanCloud环境下。LeanCloud为我们的移动应用产品提供完整的数据存储、代码测试环境、生产环境(docker容器)等服务,并且提供了一键式的deploy和publish项目API。 [LeanCloud]: https://leancloud.cn/

DaoCloud

[DaoCloud][]是国内首个Docker Hub镜像服务,提供互联网应用的持续集成、镜像构建、发布管理、容器托管解决方案。 目前,我们所有大计算量的算法子服务均会部署在DaoCloud环境上。DaoCloud的优点是界面友好,操作简单,容易上手,因此即使是不懂docker的新手来操作也能分分钟搞定。 [DaoCloud]: https://www.daocloud.io/

Github代码管理建议

我们推荐任何一个开发项目都持有两个branch,分别是master和dev,日常的项目开发和bug调试都在dev下进行,只有当代码可以运行,需要进行测试的时候才merge到master branch上。 当然你也可以直接在master上进行开发,但是我们并不推荐这么做,因为每次master branch上的代码发生变化都会触发Jenkins的testJob执行。 同样的,每当项目阶段性的开发结束后,需要发布release版,要求(不是推荐)git tag vX.X.X,因为每次git tag都会触发Jenkins的publishJob执行。

整体流程

NodeJS后端服务(数据流操作)

  • 使用LeanCloud提供的最新LeanEngine环境开发;
  • 在github上创建代码库,每当需要发布最新的release版本时,使用git tag + 版本号(版本号统一使用vX.X.X的形式);
  • 在[Jenkins管理端][]创建testJob,每当代码库git push到master分支时,自动触发该项目test事件,执行test脚本,报告测试结果;
  • 在[Jenkins管理端][]创建publishJob,每当git tag发布最新release版本时,自动触发该项目的publish事件,首先会执行所有的test脚本,测试通过后再请求LeanCloud的deploy和publish API,启动项目部署到开发环境中。 [Jenkins管理端]: http://182.92.72.69:8080/

Python后端服务(算法模块)

如何创建testJob

首先需要登录到我们的Senz Jenkins管理端,账号和密码见trello的Account Card

  • testJob本质上是一个Jenkins Job,登录后首先点击左上角的New Item,来创建一个新的Jenkins Job;

  • 输入Item name,以格式

    senz.xxx.xxx_Test 
    

    选择freestyle project

  • 进入configure页面,项目名即为刚刚设定的Item name;

  • 输入github对应代码库url,来指定项目代码库;

  • 勾选Restrict where this project can be run,以限定该job最终运行环境为我们指定的机器,因为是testJob,所以部署在我们的aliyun 1服务器上,Label Expression内填python_main_server。你可以在主页左下方上查看Senz项目的主机情况,每个主机都有一个对应的label;

  • Source Code Management选择github,并填写相应的信息,Branch Specifier内填写*/master,以指定只检查master branch下的变化;

  • Build Triggers选择Build when a change is pushed to GitHub,每次master branch上的代码发生变化时触发build下的操作;

  • Build下的Excute shell中填写执行测试用例的shell脚本,例如:

    pip install -r ./flask_app/requirements.txt
    nosetests ./flask_app/test.py 
  • 点击save和apply来保存和生效配置信息

  • 配置完成后如果你想立即运行,可以点击左侧的Build Now来立即执行一遍生效的Job,同时在console output查看服务器的运行输出

如何创建publishJob

publishJob本质上是两个JenkinsJob,第一个Job和testJob几乎一样,除了:

  • 项目名为:
    senz.xxx.xxx_Pretest 
    ```;
    
  • Branch Specifier内填写refs/tags/*,以指定一旦有新的tag产生则触发build操作;
  • 以及Post-build Actions的Build other projects中Projects to build填写第二个Job的项目名,并选择Trigger only if build is stable,以指定该Job完成后执行Publish Job。

第二个Job用来在生产环境部署代码,操作也很简单,主要区别如下:

  • 第二个项目名称为:
    senz.xxx.xxx_Publish
    
  • 指定项目的代码库,和master branch
  • Restrict where this project can be runBuild Triggers均不用选择。需要说明的是publishJob的build操作仅用向LeanCloud发送很轻量的HTTP请求即可,因此不用指定具体哪一台机器来执行这个Job,其次;而build的触发由上一个pretestJob来触发,因此不由其他触发源触发,因此也不用特殊指定。
  • Build下的Excute shell里填写请求LeanCloud后台的脚本,用curl即可。
  • fuck
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment