应用管理集成了云效的流水线发布能力,用户可以配置CICD流水线,完成从源代码的编译、测试至部署到应用分组的过程。当前的流水线模板都是从源代码编译开始,要求用户允许云效访问源代码。如果用户现在已经有CICD流程和工具,如何从已有工具部署到阿里云应用管理环境上?本文以Jenkins和Github Actions为例,提出两种解决方案。
通过SSH部署到应用分组环境
大部分构建部署工具都支持通过SSH部署远程主机。因此可以采用以下通用的步骤来对接到应用管理。
在ECS控制台创建一个远程部署专用的密钥对,并导出私钥文件到本地。
在ECS控制台->密钥对,批量绑定应用分组环境下的ECS实例到部署专有密钥对,并重启实例使之生效。
从应用管理->资源管理里找到所有ECS实例的公网IP。
在Jenkins/Github Actions中配置ECS实例的公网IP、SSH私钥,通过SSH远程部署。以下列举两个可以支持通过SSH传输文件并执行命令的插件:
此Github Action支持使用SSH私钥部署文件到远程服务器,并支持在部署文件之前或之后执行命令。
此Jenkins插件支持SSH私钥部署文件到远程服务器并执行命令。
这种方案的好处是对现有研发流程影响很小。Jenkins能访问公网即可,不一定需要有独立公网IP。
坏处是无法利用应用管理的动态分组和弹性能力,分组里的资源变动后,要进行相应的修改工具的配置。
将现有CICD工具作为云效流水线源
云效支持集成Jenkins和Github。这要求用户授权云效访问自己的Jenkins和Github,其中Jenkins必须要有公网IP。
Jenkins
Jenkins侧的配置,在Jenkins job配置里,需要将构建产物归档。Jenkins的成功构建产生了文件helloworld-web-0.0.1-SNAPSHOT.jar
应用管理的发布配置,从应用管理->发布管理中新建一条流水线。然后配置Jenkins流水线源,添加好Jenkins服务连接后,可以选择Jenkins构建Job和使用默认版本来部署。Jenkins流水线源需要新建一个Jenkins服务连接,需要输入Jenkins服务的公网地址和用户名、密码。修改构建步骤,只保留构建物上传的部分,因为构建是在Jenkins里执行的,云效流水线是直接拉取Jenkins的构建产物。ECS应用部署的步骤根据制品压缩包的内容进行相应修改即可。
Github
云效流水线支持将Github代码作为流水线的代码源,按云效文档进行配置即可,流水线将从Github下载代码进行构建和部署。