如果您没有持续交付流程,您可以参考本文快速搭建用于测试的持续交付环境,并通过执行docker push {image}命令就能免费将镜像部署到SAE。如果您正在建设持续交付流程,也可以参考本文,自定义自动触发部署镜像到SAE的方案。

前提条件

  • 开通SAE产品,并部署一个镜像类型的应用。目前SAE支持部署所有技术栈的镜像,并针对其中的Java与PHP技术栈,做了深度增强。如果您有兴趣体验SAE产品,您可以在SAE控制台创建SAE应用。具体操作,请参见在SAE控制台创建应用
  • 开通容器镜像服务,并创建一个命名空间以及镜像仓库。命名空间以及镜像仓库建议是私有的,尤其是生产环境,保证您的代码不会泄露。阿里云容器镜像服务提供免费的默认实例,可以免费创建命名空间以及镜像仓库,并储存镜像。具体操作,请参见构建仓库与镜像
  • 开通函数计算,阿里云函数计算产品是一个收费产品,但每月有100万次的免费调用额度,您可以使用免费额度触发部署应用,无需支付其他费用。

背景信息

本文以搭建一个简单的事件驱动的持续交付函数为例,全程不需要编写一行代码,实现捕获镜像提交事件,并触发云函数,将镜像部署到SAE等操作,耗时不到10分钟。

Java函数的下载地址,请参见函数;源代码的下载地址,请参见源代码

步骤一:创建部署应用的云函数DeployTrigger

  1. 创建函数。
    1. 登录函数计算控制台
    2. 在左侧导航栏单击服务及函数,在顶部菜单栏选择地域。
    3. 服务列表页面,单击目标服务,然后单击页面左上角的创建函数
    4. 创建函数页面,选择从零开始创建,在基本设置区域配置相关参数,然后单击创建
      fc_sc_create_function_v2.png参数说明如下。
      参数 是否必填 操作
      名称 填写DeployTrigger。必须以字母开头,可包含数字、字母(区分大小写)、下划线(_)和短划线(-),不超过64个字符。
      运行环境 选择Java8
      函数触发方式 选择通过HTTP请求触发
      实例类型 选择弹性实例
      内存规格 设置函数执行内存。
      • 选择输入:在下拉列表中选择所需内存。
      • 手动输入:单击手动输入内存大小,可自定义函数执行内存。取值范围[128, 3072],单位为MB。输入的内存必须为64 MB的倍数。
      创建完成后,页面会自动跳转至该函数的详情页面。
  2. 在函数详情页面,配置代码与触发器信息。
    1. 单击函数代码页签,选择上传代码 > 上传JAR包,在通过ZIP、JAR包或者WAR包上传代码对话框内单击选择文件并上传函数文件,然后单击保存
      Java函数的下载地址,请参见函数
    2. 单击触发器管理页签,在默认触发器的操作列单击编辑,在编辑触发器面板设置信息并单击确定fc_sc_edit_trigger_v2
      参数说明如下。
      参数 是否必填 操作
      触发器类型 HTTP触发器只能在创建函数时创建。
      版本或别名 默认为LATEST。

      如果您需要创建其他版本或别名的触发器,首先您需要在函数详情页的右上角切换到该版本或别名,然后再点击创建触发器按钮。

      是否需要认证 选择,即设置为任何人都可以调用。
      请求方式 选择POST。镜像服务的触发器发送的HTTP请求方式为POST。
      说明 一个版本或别名的函数,最多只能创建一个HTTP类型的触发器。
  3. 修改角色配置,添加调用SAE产品的权限。
    1. 服务及函数页面找到目标服务,在操作列单击配置,在角色配置区域,单击创建新的服务角色,配置相关参数。fc_sc_role_management
    2. 跳转至RAM控制台,添加SAE产品的调用权限AliyunSAEFullAccess。具体操作,请参见授予函数计算访问其他云产品的权限

      如果您需要进一步精细化授权,您可以给角色授予部分需要部署的应用的修改权限。更多信息,请参见权限策略和示例

  4. 在函数详情页面,配置环境信息与环境变量。
    1. 单击函数配置页签,在环境信息区域单击编辑,设置相关参数,然后单击保存fc_sc_edit_environment_information
      参数说明如下。
      参数 是否必填 操作
      运行环境 选择Java 8
      函数入口 填写com.aliyun.serverless.DeployTrigger::handleRequest
      执行超时时间 设置超时时间。默认超时时间为60秒,最长为600秒。
      说明 超过设置的超时时间,函数将以执行失败结束。
      单实例并发数 单个实例能够并发处理的请求数。设置为10
    2. 展开环境变量区域,选择使用表单编辑,单击添加变量,添加环境变量键值对。
      添加ACCESS_TOKEN环境变量,输入函数访问鉴权的自定义Token。您可以使用uuidgen命令(oxs系统)或在互联网上寻找生成UUID的网页生成Token。fc_sc_add_enviroment_variable_v2
    3. 单击保存
  5. 获取函数的访问地址。
    1. 服务及函数页面找到目标函数,单击函数名称。
    2. 单击触发器管理页签,在触发器的配置信息区域复制函数的请求地址。
      fc_sc_view_domain_v2.png
    说明 为了节约成本,您可以直接使用函数计算提供的域名。函数计算每天提供1000次的域名额度,能够满足您测试环境部署场景的需求。

步骤二:创建镜像推送触发器

  1. 登录容器镜像服务控制台
  2. 在顶部菜单栏,选择所需地域。
  3. 在左侧导航栏,选择实例列表
  4. 在左侧导航栏选择仓库管理 > 镜像仓库,在镜像仓库页面单击目标镜像仓库。
  5. 在仓库详情页面的左侧导航栏单击触发器,在触发器页面左上角单击 创建
  6. 创建触发器对话框中输入名称触发器URL,选择触发方式全部触发,单击确认
    创建触发器
    注意 触发器URL中要包含鉴权的Token以及要部署的SAE应用ID。

步骤三:验证部署结果

本文的验证步骤以企业版容器镜像为例。更多信息,请参见以下文档:

  1. 执行以下命令,登录镜像仓库。
    docker login --username=<镜像仓库登录名> <企业版实例名称>-registry.cn-<企业版实例所在的地域>.cr.aliyuncs.com
  2. 推送镜像。
    1. 执行以下命令,查询镜像ID。
      docker images
      预期输出。示例如下:
      REPOSITORY                                         TAG                 IMAGE ID            CREATED             SIZE
      expresscart                                        latest              d6228399****        2 weeks ago         387 MB
    2. 执行以下命令,给镜像打标签。
      docker tag <镜像ID> <企业版实例名称>-registry.cn-<企业版实例所在的地域>.cr.aliyuncs.com/<命名空间的名称>/<镜像仓库的名称>:<镜像版本号>
    3. 执行以下命令,推送镜像至企业版实例。
      docker push <企业版实例名称>-registry.cn-<企业版实例所在的地域>.cr.aliyuncs.com/<命名空间的名称>/<镜像仓库的名称>:<镜像版本号>
      您可以观察到SAE应用会产生一条变更记录,推送的镜像被重新部署到了SAE。系统显示如下结果。镜像推送
  3. 结果验证。

    您可以登录SAE控制台,在变更记录页面查看变更详情。

    SAE应用记录

关于Docker操作的更多信息,请参见Docker镜像基本操作