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

更新时间:
复制 MD 格式

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

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

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

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

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

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

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

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

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

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

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

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

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

Jenkins

  1. Jenkins Job配置中启用构建产物归档。构建成功后,确认归档中包含预期制品,例如helloworld-web-0.0.1-SNAPSHOT.jar

  2. 在应用管理的发布管理中新建流水线,并将流水线源设置为Jenkins。新建Jenkins服务连接时,输入Jenkins服务的公网地址、用户名和密码;连接成功后,选择Jenkins构建Job,并使用默认版本部署。由于构建在Jenkins中执行,请修改构建步骤,仅保留构建物上传,使云效流水线直接拉取Jenkins的构建产物。最后,根据制品压缩包的内容调整ECS应用部署步骤。

Github

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