通过云效流水线使用K8s YAML文件部署应用至SAE

更新时间:
复制 MD 格式

您可以通过云效流水线从源码仓库构建镜像,并使用K8s YAML文件自动部署SAE应用。本文将通过简单的示例演示上述流程,并引导您将其用于实际业务。

方案概览

实现本方案需要执行以下步骤:

  1. 上传源码

  2. 配置云效流水线

    1. 设置代码源

    2. 镜像构建与上传

    3. 部署SAE应用

  3. 运行云效流水线并验证结果

快速体验

1. 上传源码

您可以将示例代码spring-boot-demo.zip上传到源码仓库中(例如自建Gitlab、Codeup、Github),用于快速体验流程。

示例代码中相关文件的作用如下:

  • Dockerfile:用于从源码构建镜像。

  • manifests/dp.yaml:通过K8s YAML文件指定SAE部署应用时的配置信息。

2. 配置云效流水线

登录云效流水线控制台,单击新建流水线

为了演示完整流程,本文使用空模板来创建流水线。选择空模板.空模板。单击创建

2. 1 设置代码源

流程配置页面,单击添加流水线源。选择代码源为示例代码所在的源码仓库类型,配置示例代码所在的代码仓库和使用的默认分支

初次使用时,需要添加服务连接企业公钥来授权云效流水线访问您的源码仓库。

2. 2 镜像构建与上传

在流水线的下个阶段,添加任务来执行镜像构建与上传:

  1. 单击系统默认创建的空任务节点,在编辑页面配置以下信息:

    • 选择构建集群云效中国香港构建集群,因为示例代码的Dockerfile中包含海外的镜像依赖。

    • 选择构建节点,仅支持Linux/amd64

  2. 单击添加步骤,在构建类别中根据实际情况选择镜像构建并推送至ACR(个人版)镜像构建并推送至ACR(企业版)

    本文假定您已开通容器镜像服务,且已创建个人版实例创建企业版实例

    镜像构建并推送至ACR(个人版)

    初次使用时,需要添加服务连接来授权云效流水线访问容器镜像服务。

    需要配置以下信息:

    • 选择镜像上传的目标地域仓库

    • 设置标签。可以为固定参数例如1.0,或者动态参数例如${DATETIME},表示镜像被推送到ACR后,将会以当前日期时间作为版本名称。

    • 设置Dockerfile路径。由于示例代码的Dockerfile文件位于代码库根目录,因此设置为Dockerfile

    构建集群选择云效中国香港构建集群,构建节点选择Linux/amd64,构建环境选择指定容器环境(容器镜像地址为build-steps/alinux3),下载流水线源选择下载全部流水线源。地域选择华东1(杭州),仓库选择包含spring-boot-demo的目标仓库。

    镜像构建并推送至ACR(企业版)
    重要

    需要ACR企业版目标实例开启镜像仓库公网进行通信,再将Flow构建集群公网出口地址添加到ACR公网白名单里,详见配置公网的访问控制。查看Flow构建集群公网出口地址的方法,请参见构建集群

    初次使用时,需要添加服务连接来授权云效流水线访问容器镜像服务。

    需要配置以下信息:

    • 选择镜像上传的目标地域企业实例命名空间仓库

    • 设置标签。可以为固定参数例如1.0,或者动态参数例如${DATETIME},表示镜像被推送到ACR后,将会以当前日期时间作为版本名称。

    • 设置Dockerfile路径。由于示例代码的Dockerfile文件位于代码库根目录,因此设置为Dockerfile

    在任务编辑面板顶部,将构建集群设置为云效中国香港构建集群指定构建节点设置为Linux/amd64构建环境选择指定容器环境,容器镜像地址为 build-steps/alinux3下载流水线源选择下载全部流水线源使用VPC地址推送镜像保持未勾选。

2. 3 部署SAE应用

在流水线的下个阶段,添加任务来部署SAE应用:

  1. 单击新的任务,选择空白任务模板创建一个任务,在编辑页面配置以下信息:

    • 选择构建节点,仅支持Linux/amd64

  2. 单击添加步骤,在发布类别中选择Kubectl SAE 发布

    初次使用时,需要添加服务连接来授权云效流水线访问SAE。

    需要配置以下信息:

    • 选择SAE目标应用所属的地域命名空间。为简化流程,本示例设置命名空间default,即默认命名空间。

    • 设置YAML路径。由于示例代码的YAML文件位于代码库manifests目录下,因此设置为manifests

    • 设置变量。由于示例代码的YAML文件中引用了变量IMAGE,因此添加如下变量定义IMAGE = 镜像构建并推送至ACR(个人版/企业版).镜像公网地址。在部署应用时,会自动替换变量。

    任务编辑面板中,平台选择 Linux/amd64,构建环境选中指定容器环境,容器镜像地址为 build-steps/alinux3,下载流水线源选择下载全部流水线源地域选择华东1(杭州)

3. 运行云效流水线并验证结果

  1. 保存并运行流水线。

  2. 运行完成后,可以点击各节点的日志,查看任务的执行过程和结果。部署SAE应用的节点日志中包含所有扫描到的YAML文件、通过K8s部署应用的标准输出、资源概要信息。

    [11:38:24] [INFO] +--------|-----------------------------------------------------------+
    [11:38:24] [INFO] | VARIABLE |                    VALUE                              |
    [11:38:24] [INFO] +--------|-----------------------------------------------------------+
    [11:38:24] [INFO] | IMAGE    | registry.cn-hangzhou.aliyuncs.com/xxx/xxx:xxx          |
    [11:38:24] [INFO] +--------|-----------------------------------------------------------+
    [11:38:24] [INFO] Generate /root/workspace/.../.manifest/dp.yaml
    [11:38:24] [INFO] YAML 模板处理成功 manifests -> .manifest
    [11:38:24] [INFO] 所有部署资源:
    [11:38:24] [INFO] total 4
    [11:38:24] [INFO] ----------- 1 root root 384 Dec  6 11:38 dp.yaml
    [11:38:24] [INFO] 即将发布到 SAE 的资源列表
    [11:38:24] [INFO] exec command: kubectl-sae --namespace=default apply -f .../.manifest --dry-run=client
    [11:38:27] [INFO] deployment.apps/test-deployment
    [11:38:27] [INFO] 部署变更到 SAE kubectl-sae apply -f .../.manifest
    [11:38:28] [WARNING] Warning: [ChangeOrder]: f5dcf928-8042-41db-92c3-7930bd569f5d
    [11:38:28] [INFO] deployment.apps/test-deployment configured
    [11:38:28] [INFO] 打印当前任务执行结果
    [11:38:29] [INFO] NAME               READY   AVAILABLE   TYPE    STATE        LANGUAGE   AGE
    [11:38:29] [INFO] test-deployment    2/2     2           Image   PUBLISHING   other      21d
    [11:38:29] [INFO] SAE 资源详情
    [11:38:29] [INFO] apiVersion: apps/v1
    [11:38:29] [INFO] kind: Deployment
    [11:38:29] [INFO] metadata:
    [11:38:29] [INFO]   annotations:
  3. 登录SAE控制台,在左侧导航栏选择应用管理 > 应用列表,然后选择目标地域和目标命名空间。可以查看已部署的应用,应用名称为test-deployment

4. 清理资源

单击已部署的应用,在基础信息页面,单击更多 > 删除应用。根据页面提示,完成应用的删除。

了解更多

工作原理

云效流水线利用kubectl-sae工具,根据代码源包含的YAML文件操作SAE应用底层的Kubernetes集群资源,实现 SAE 上的应用部署与资源管理。

如果您希望了解如何在本地或云服务器ECS中使用kubectl-sae工具,请参见saectl工具快速入门

在您的生产环境中使用

编写YAML文件

如果您希望了解如何编写YAML文件,请参见saectl工具目录下的相关文档。

示例代码中使用manifests/dp.yaml指定SAE部署应用时的配置信息。生产环境中,您也可以在manifests路径下包含多个YAML文件,管理SAE的多种资源。根据多个YAML文件执行资源部署时不能保证执行顺序,如果您对执行顺序有要求,建议拆分成多个流水线按照您期望的顺序手动执行。

设置正确的文件路径

生产环境中,代码源的Dockerfile文件、YAML文件的路径可能与示例代码不同。配置云效流水线时,需要设置正确的路径。

  • 设置Dockerfile路径:Dockerfile相对于代码库根目录的路径,如META/config/DockerfileDockerfile

  • 设置YAML路径:YAML文件的父目录相对于代码库根目录的路径,例如manifests路径下包含YAML文件,则设置为manifests

自定义流水线

根据业务需求,您可以在流水线中添加代码扫描、测试等任务节点。

代码源自动触发流水线

如果您希望上传代码等操作可以自动触发流水线的执行,请参见代码源触发