从已有CICD工具(Jenkins/Github Actions)部署到应用管理

应用管理集成了云效的流水线发布能力,用户可以配置CICD流水线,完成从源代码的编译、测试至部署到应用分组的过程。当前的流水线模板都是从源代码编译开始,要求用户允许云效访问源代码。如果用户现在已经有CICD流程和工具,如何从已有工具部署到阿里云应用管理环境上?本文以Jenkins和Github Actions为例,提出两种解决方案。

通过SSH部署到应用分组环境

大部分构建部署工具都支持通过SSH部署远程主机。因此可以采用以下通用的步骤来对接到应用管理。

  1. 在ECS控制台创建一个远程部署专用的密钥对,并导出私钥文件到本地。

  2. 在ECS控制台->密钥对,批量绑定应用分组环境下的ECS实例到部署专有密钥对,并重启实例使之生效。

  3. 从应用管理->资源管理里找到所有ECS实例的公网IP。

  4. 在Jenkins/Github Actions中配置ECS实例的公网IP、SSH私钥,通过SSH远程部署。以下列举两个可以支持通过SSH传输文件并执行命令的插件:

    1. Github Action支持使用SSH私钥部署文件到远程服务器,并支持在部署文件之前或之后执行命令。image.png

    2. Jenkins插件支持SSH私钥部署文件到远程服务器并执行命令。image.png

这种方案的好处是对现有研发流程影响很小。Jenkins能访问公网即可,不一定需要有独立公网IP。

坏处是无法利用应用管理的动态分组和弹性能力,分组里的资源变动后,要进行相应的修改工具的配置。

将现有CICD工具作为云效流水线源

云效支持集成Jenkins和Github。这要求用户授权云效访问自己的Jenkins和Github,其中Jenkins必须要有公网IP。

Jenkins

  1. Jenkins侧的配置,在Jenkins job配置里,需要将构建产物归档。image.pngJenkins的成功构建产生了文件helloworld-web-0.0.1-SNAPSHOT.jarimage.png

  1. 应用管理的发布配置,从应用管理->发布管理中新建一条流水线。然后配置Jenkins流水线源,添加好Jenkins服务连接后,可以选择Jenkins构建Job和使用默认版本来部署。image.pngimage.pngJenkins流水线源需要新建一个Jenkins服务连接,需要输入Jenkins服务的公网地址和用户名、密码。image.png修改构建步骤,只保留构建物上传的部分,因为构建是在Jenkins里执行的,云效流水线是直接拉取Jenkins的构建产物。image.pngECS应用部署的步骤根据制品压缩包的内容进行相应修改即可。image.pngimage.png

Github

云效流水线支持将Github代码作为流水线的代码源,按云效文档进行配置即可,流水线将从Github下载代码进行构建和部署。