内容摘要:持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)是提高团队协同生产力的关键技术。很多时候一个软件发布后更新和维护是痛点,因为一个版本的迭代和升级往往不是平滑过渡的。但是在互联网时代,跟不上产品迭代节奏往往就要走向失败。在谈完GIT和DevOps理念之后,我们看看具体可以有那些工具可以帮助我们提高生产力。
1、可持续的概念
在当今世界,特别是在科学研究方面,新技术方法层出不穷。但好的技术方法,如果不被人使用,不去做推广,那就永远都是小众游戏。习总书记曾经说过:科学技术必须同社会发展相结合,学得再多,束之高阁,只是一种猎奇,只是一种雅兴,甚至当作奇技淫巧,那就不可能对现实社会产生作用。
有人说:“科研高大上,生产用不上”。面对科研成果没法转化的痛点问题越来越被重视。国家近年来一直期望通过政策引导,打破从基础研究、应用研究到产业化的“死亡之谷”,促进科研成果产业化。
我个人认为:地球科学技术要想服务社会,必须通过IT驱动来加速新方法和数据的流转,提升使用价值,让用户对科研成果更有获得感。
接下来我们就进入主题,谈谈当科研成果推到仓库里面,后续还能干些啥。近年来,基于云设施的互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到GIT仓库之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
持续交付指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。下图是代码推送到Github之后,通过工具可以帮你做的一系列工作:
图中很多词大家可能不认识,但是有些图标应该熟悉吧。最左边的小八爪鱼就是Github的logo,当push到github仓库后,通过webhooks设置,可以让你的项目通过既定测试和集成流程开展后续工作,没问题后打包成docker容器,再通过k8s(kubernetes)等容器编排工具分发到云上。
你不用担心的是,只要配置好,这后续一切都是自动的。解决了那些问题呢?就是以前需要很多人力物力去测试、集成等一系列费力不讨好的工作,交给生产力工具去完成。如果你对图1还不明白,哪首先的就是要好好琢磨理解呦...
2、那些工具可以用
现在的CI/CD工具应该可以用眼花缭乱来形容,各大厂商说提供DevOps工具的广告里面,肯定涉及到到这方面的工作。知道CI/CD的概念和用好这些工具还是两码事,特别是具体到如何配置复杂的脚本,根据不同语言和基础设施来调试、运行,更是比较花费精力的。
但是大体上我觉得可以分为两类,一种是需要你自己部署的,一种是已经在云上可以直接用的。著名的Gitlab CI和Jenkins提供前者,部署到私有云中就可以直接用。而Travis和Azure Pipelines是可以直接在云上用的,特别是Travis 和 Azure Pipeline 对于开源项目可以免费使用。
个人觉得如果是科研还是直接用云上,它们都会构建和测试,免费给你提供虚拟机、网络带宽和各种环境资源,还不用担心稳定性,有啥不好呢?
3、 结合一个实例来看看
在我们团队的GEOIST软件包中也用到了上面两个工具,请看下图:
图中最下面一排小标志,就是项目中用到的一些技术,最左边的是Travis,最右边的是Azure Pipelines。绿色的提示信息代表当前项目的测试状态(如果有问题会出现红色提示)。要配置好这两个工具,需要在工程中使用yml文件进行配置,在geoist根目录下你会发现有.travis.yml和azure-pipelines.yml两个文件,这两个文件里面你可以设置测试环境的一些要求和包依赖。
让我们再看看,如果点开AzurePipelines的图标,直接会出现下面界面:
一般GIT的Push命令执行后,根据项目要测试的内容多少,几分钟就可以完成测试,根据yml中设置的内容,每一阶段的结果如图4所示。
我们这个项目中,仅针对python3.6环境进行了集成测试,通过后就直接发布到Azure的云上面去了,对于用户来讲下次打开浏览器的jupyter就可以开始使用最新版本啦!对于科研人员来讲,算法写好,git push后啥事也不用管了,是不是很方便呢?