Skip to content

weirui88888/aliyun-cdn-sdk

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Aliyun Cdn Sdk Github Action

language-typescript aliyun-cdn-api-github-action

简介

一款基于阿里云 CDN API 的 Github Action,几乎支持所有的官方 API 调用,具体的细节请结合CDN API 参考

关于如何使用该 action,你可以参考以下,例如:

aliyun-cdn-sdk基于官方仓库官方模板仓库进行创建

使用步骤

1.明确意图

明确你想要用该 Action 来对你的 CDN 做些什么配置。然后去官方 API 文档找到对应的方法,这里以最简单的DescribeCdnDomainConfigs进行演示

DescribeCdnDomainConfigs

2.使用 Action

在你的 yml 文件中,使用该 Action 并传入正确的配置项即可

- name: DescribeCdnDomainConfigs
  id: getDescribeCdnDomainConfigsConfig
  uses: weirui88888/aliyun-cdn-sdk@v1.0.0
  with:
    accessKeyId: ${{secrets.ALI_ACCESS_KEY_ID}}
    accessKeySecret: ${{secrets.ALI_ACCESS_KEY_SECRET}}
    parameters: '{"action": "DescribeCdnDomainConfigs", "domainName": "your domain name", "functionNames": "filetype_based_ttl_set,set_req_host_header" }'

3.获取 API 返回结果

该 Action 只有一个输出项responseBody,应该也够用了。主要根据该配置项能够获取两个有效信息

  • 1.调用 cdn api 是否成功
  • 2.能够根据responseBody获取一些有用的信息,比如获取配置项的的configId,通过 configId 可以在接下来的步骤中,实现对指定配置的更新和删除

参数说明

入参
  • accessKeyId
  • accessKeySecret
  • parameters

对于前两个参数,直接在阿里云控制台AccessKey管理中获取即可。而parameters参数比较重要,它的类型是字符串对象。形如:

下面的例子是以DescribeCdnDomainConfigs方法做比喻,具体的配置项还需要结合你的使用场景做变更

'{"action": "DescribeCdnDomainConfigs", "domainName": "your domain name", "functionNames": "filetype_based_ttl_set,set_req_host_header" }'

一切配置的信息都在该参数重配置,常见的有

  • action
    • api 方法名,比如上述配置中的DescribeCdnDomainConfigs
  • domainName
    • cdn 域名
  • functionNames
    • 功能函数名称
出参
  • responseBody
    • 调用该 api 的返回结果作为输出项
- name: DescribeCdnDomainConfigs
  # 该步骤的id,后续的步骤可以通过steps.yourid.outputs.responseBody拿到域名配置信息
  id: getDescribeCdnDomainConfigsConfig
  uses: weirui88888/aliyun-cdn-sdk@v1.0.0
  with:
    accessKeyId: ${{secrets.ALI_ACCESS_KEY_ID}}
    accessKeySecret: ${{secrets.ALI_ACCESS_KEY_SECRET}}
    parameters: '{"action": "DescribeCdnDomainConfigs", "domainName": "your domain name", "functionNames": "filetype_based_ttl_set,set_req_host_header" }'

- name: View My Cdn Domain config
  run: |
    echo ${{steps.getDescribeCdnDomainConfigsConfig.outputs.responseBody}}

调试信息

同时为了能够方便使用者知道自己使用该 Action 的操作行为路径,在应用程序中,我对关键步骤进行了日志输出,方便用户明确自己的入参实际调用CDN方法api调用结果

LOG-MESSAGE

对于 parameters 格式的阐述(拓展)

一般开发者不需要过多关注该部分内容,因为大多数使用场景下,我们并不需要高级配置,也就是parameters.runtimeOptions,除非你有一些高级配置需要配置,具体的配置项请参考aliyun/tea-util

对于基本的参数,只用放到字符串对象顶层即可,比如actiondomainNamefunctionNames等,但是对于一些高级的配置项,需要放置于runtimeOptions字段中,且runtimeOptions字段名是不可修改的

'{
  "action": "DescribeCdnDomainConfigs",
  "domainName": "your domain name",
  "functionNames": "filetype_based_ttl_set,set_req_host_header",
  "runtimeOptions": {
    autoretry?: boolean;
    ignoreSSL?: boolean;
    maxAttempts?: number;
    backoffPolicy?: string;
    backoffPeriod?: number;
    readTimeout?: number;
    connectTimeout?: number;
    httpProxy?: string;
    httpsProxy?: string;
    noProxy?: string;
    ...
  }
}'

另外除了runtimeOptions字段,其他项的 value,在我的程序中都会进行判断,如果typeof value === 'object',我都会调用JSON.stringify进行干涉

let {action, runtimeOptions, ...requestOptions} = JSON.parse(parameters)

for (let [optionsKey, optionValue] of Object.entries(requestOptions)) {
  if (typeof optionValue === 'object') {
    requestOptions[optionsKey] = Util.toJSONString(optionValue)
  }
}

这么做的目的是因为据我了解,大部分的配置项类型都是字符串,如果不做任何处理的话,在经过程序中的 JSON.parse(parameters)解析参数过后,可能因为配置字段类型的问题致使运行程序失败

对于我这么做的方式,我也不确定它到底对不对,但是至少看起来能够保证程序正常的运行。

Contributing

Feel free to submit issues or prs to me.