HTML5技术

CI-持续集成(2)-软件工业“流水线”技术实现 - 一点一滴的Beer(2)

字号+ 作者:H5之家 来源:H5之家 2016-02-21 11:00 我要评论( )

前面提到的内网系统的解决方案,主要原因是: 基于git的webhook无法对需要认证的构建触发器接口请求发起有效构建请求 将构建触发器接口设置为不需要认证,会导致匿名用户的权限过大 如果部署到公网,则需要解决如上

前面提到的内网系统的解决方案,主要原因是:

  • 基于git的webhook无法对需要认证的 构建触发器 接口请求发起有效构建请求
  • 将 构建触发器 接口设置为不需要认证,会导致匿名用户的权限过大
  • 如果部署到公网,则需要解决如上的矛盾之处。一个比较好的思路就是:

  • 按照要求配置好相应的用户权限(见公网权限配置方案)
  • 开发中间件来完成 构建API 的用户登录认证
  • 6.2   构建触发器

    在兼顾Git的webhook的特点和Jenkins构建特性的情况下,可以提出如下所描述的解决方案:

    使用web服务作为中间件,来模拟用户登录:将本来需要多个请求组成的会话变成单一的Http请求(可以在单次请求的url里面加入授权的token),这样就可以被Git的webhook所调用。

    基本原理图如下:

    主要的通讯过程为:

    当然,由于 Jenkins 提供了Pyhon语言的SDK,所以以上 步骤2和3其实可以简化为对其SDK的调用了。

    安装方法:

    pip install python-jenkins

    最简单的使用示例如下:

    # coding:utf-8 """ jenkins相关的工具函数及配置 """ from dtlib.dtlog import dlog import jenkins __author__ = 'harmo' jenkins_url = 'http://jenkins.xxxx.com' jenkins_user = 'jenkins_user' jenkins_passwd = 'jenkins_user_password' def build_job(project_name): """ 构建项目 :param project_name: 项目名称 :return: """ jen = jenkins.Jenkins(jenkins_url, username=jenkins_user, password=jenkins_passwd) jen.build_job(project_name) print("build %s succeed" % project_name) if __name__ == '__main__': build_job("your-project-name")

    开发人员只需要在自己的web程序里面集成此SDK,并进行参数化,即可完成webhook和jenkins的中间件。

    6.3   最终效果

    可以达到如下效果:

    使用中间件的好处是,对构建的事件有很好的订制性,包括分支监控,提交人权限等等。当然,也可以只使用最简单的功能:只要有人向 release 分支提交了代码,那么就会触发自动构建流程,这样就完成了整个流程了。

    当然,构建成功之后到发布还有一些后续的流程,比如:

  • 开发人员完成代码,自测完毕后,推送代码到 release 分支

  • 触发自动构建,构建成功,并生成构建产物

  • 将构建产物发布到 测试服务器

  • 触发自动化测试脚本
  • 如果测试不通过,发送消息给相关人员,终止后续流程
  • 如果测试通过,通知 自动化发布系统
  • 由 自动化发布系统 完成构建产物向生产服务器发布的过程

  • 6.4   其它说明

    在得知Jenkins有Python语言的SDK之前,其实还有个其它方法也能够完成登录授权并调用构建接口。直接通过接口来模拟用户登录行为(因为Jenkins登录处不需要验证码),然后获取登录成功的sessionid ,以此作为授权token来调用构建的接口。

    具体的技术实现的代码细节不在本文的讨论内容中出现,只要了解登录的原理,很容易就开发出来。

    此处做一些说明的目的是,其实只要了解原理,即使官方没有提供一些工具,仍然也是有办法完成想要的功能的。

    7   持续集成的应用场景

    持续集成的平台搭建完毕后,关于其可应用的项目也进行一些简单的介绍。

    基本上任何的软件项目,从生产到最终发布都可以划分为如下几个过程:

    不同类型项目,无非就是构建过程不同而已,本文也简单的列举一下几类项目的应用方式的流程,关于具体的技术手段就由各人根据各自的项目去做相应的订制开发了。

    7.1   脚本类服务端项目

    主要的代表有:Php,Python等等。

    它们的构建产物就本身的源代码,所以整个持续集成的过程如下:

    7.2   需要编译的服务端项目

    主要的代表有:Java等。

    过程如下:

    7.3   Web前端项目

    主要代表有:Javascript,css等。

    过程如下:

    7.4   移动端App项目

    主要代表有:Android等。

    过程如下:

  • 开发人员发布代码到Git仓库

  • Jenkins同步代码到本地,并使用构建工具生成构建产物Apk

  • 将构建产物统一备份到相应目录,做好发布产物的备份,方便回滚

  • 安装到设备,执行测试

  • 测试
  • 如果测试通过,发布到各大应用市场
  • 如果测试未通过,发现bug后驳回
  • 8   运行效果

    Jenkins系统运行界面:

    Jenkins本身可以实现如下功能:

    再通过文章前半部分提到的系统,团队就可以达到 持续交付 和 持续部署 的目的,从而实现项目的 快速迭代 。

    持续交付:

    持续部署:

    当然,还有后续的更多的扩展功能,就需要测试开发人员去实现了。

    9   小结

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 - 在路在的张

      随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 -

      2017-04-22 08:04

    • 移动端WEBAPP开发遇到的坑,以及填坑方案!持续更新~~~~ - ygjoe

      移动端WEBAPP开发遇到的坑,以及填坑方案!持续更新~~~~ - ygjoe

      2017-04-16 11:00

    • IT生涯, 我的常用软件清单 - SkySeraph

      IT生涯, 我的常用软件清单 - SkySeraph

      2017-03-27 08:01

    • Visual Studio 20周年软件趋势随想 - 张善友

      Visual Studio 20周年软件趋势随想 - 张善友

      2017-03-10 18:01

    网友点评
    "