应用管理是面向开发和运维人员的应用管理平台,以应用视角集成资源管理、运维、发布、监控、安全等功能为一体。在应用管理您可以按照云上最佳实践,充分发挥云平台的优势,提高效率、稳定性、安全性。
需求背景
应用管理集成了云效的流水线发布能力,用户可以配置CICD流水线,完成从源代码的编译、测试到部署到应用分组的过程。当前的流水线模板都是从源代码编译开始,要求用户允许云效访问源代码。
用户A计划在应用管理平台部署用户B提供的软件。但B公司的数据安全要求不允许将代码托管到云上,但可以提供编译后的软件包。对于这种场景,如果实现持续部署呢?本文提出一种解决方案,结合云下持续集成和云上持续部署,具有一定灵活性。
总体架构
主要步骤:
- 用户A需要创建好一个OSS bucket用来存储部署物,并创建一个最小权限的AK给用户B使用。
- 用户B需要在已有的构建工作流中增加一个步骤,将构建出的部署物(比如jar包、war包、压缩包等等)上传到到用户A的阿里云OSS bucket。构建出的部署物文件名称要能够体现出部署物版本(比如加上版本号、代码分支信息、commit id等等)
- 用户A在应用管理->发布管理里,创建一条发布流水线,将源代码编译的步骤去掉,改成从OSS下载构建好的部署物。
- 如果用户A希望手工部署,可以在应用管理->发布管理中手工启动流水线。
- 如果用户A、用户B希望CI和CD整体自动化执行,可以在构建工作流加上一步,通过调用云效流水线的web hook自动触发执行部署流水线。
详细方案
构建工作流部分需要根据不同的构建系统进行定制。以Jenkins为例,用户需要首先在Jenkins机器上安装oosutil并配置好oosutil的访问凭证(AK等)。然后在pipeline在构建结束后增加一步,执行oosutil将部署物上传到oss bucket上。
本文主要详述应用管理平台上的发布配置。
- 创建云效流水线
在发布管理里新建流水线。前提是已经绑定了云效企业和授权云效发布ECS。
以Java项目为例,可以选择Java构建部署的模板
- 在流水线编辑页面,修改流水线步骤。
● 将Java构建任务删除,增加OSS下载任务。从保存部署物的bucket下载指定文件。文件路径可以带变量,从而可以部署指定版本的部署物。构建物上传部分不变。
● 在ECS应用部署步骤里,部署脚本中解压包后,启动应用。图中的脚本仅做演示,应替换成自己的应用启停脚本。
- 执行流水线。会要求提供变量值,这里我们提供了部署物版本号。
可以看到成功执行了。
- 如果想通过线下的工作流触发云效流水线,可以启用云效流水线的Webhook触发,通过webhook即可触发流水线。详情参考文档通过Webhook触发流水线
总结
通过这种方式,实现了云下CI和云上CD的解耦,既可以分开运行,也可以结合在一起。通过使用云效部署应用,可以充分利用到应用管理的动态分组和弹性伸缩的能力,比如分组中新增或者删除了ECS实例,不会影响下一次发布。