Spring Cloud Gateway 网关 Redis 代理 GitLab 项目 Releases

Spring Cloud Gateway 网关 Redis 代理 GitLab 项目 Releases

说明

  1. Spring Cloud Gateway 使用 Redis 配置路由,其他配置方式同理
  2. 由于 GitLab 的项目是非公开的,所以 GitLab 项目的 发布 Releases 访问时必须需要凭证,但是又需要匿名用户可以访问
    GitLab Releases 等接口,下载、自动更新程序,具体见:Android 项目 GitLab Runner release-cli 发布、自动更新

配置

  • 配置代理时,一定要匹配到项目的具体功能路径
  • 配置代理时,一定要匹配到项目的具体功能路径
  • 配置代理时,一定要匹配到项目的具体功能路径

允许匿名访问 GitLab Releases 发布接口

  • id:唯一即可
  • predicates[0].nameHost:基于域名匹配
  • predicates[0].args.args1:域名配置
  • predicates[1].namePath:基于路径匹配
  • predicates[1].args.args1:路径配置。项目发布接口地址。此处的 551 代表项目ID
  • filters[0].nameAddRequestHeader:添加请求头 过滤器
  • filters[0].args.name:请求头名称,GitLab 凭证应该填写 PRIVATE-TOKEN
  • filters[0].args.value:请求头值,填写 GitLab API Token,必须只使用 read_api 权限,否则会有数据泄漏风险
  • filters[1].nameAddRequestParameter:添加请求参数 过滤器
  • filters[1].args.nameper_pageGitLab 分页参数名,
  • filters[1].args.valueGitLab 分页参数每页条数
  • uri:目标服务器地址,不要配置具体路径(因为配置了也无效)
  • metadata:元数据
  • order:优先级
{
  "id": "apk.xuxiaowei.com.cn-releases",
  "predicates": [
    {
      "name": "Host",
      "args": {
        "args1": "apk.xuxiaowei.com.cn:*"
      }
    },
    {
      "name": "Path",
      "args": {
        "args1": "/api/v4/projects/551/releases"
      }
    }
  ],
  "filters": [
    {
      "name": "AddRequestHeader",
      "args": {
        "name": "PRIVATE-TOKEN",
        "value": "填写 GitLab API Token,必须只使用 read_api 权限,否则会有数据泄漏风险"
      }
    },
    {
      "name": "AddRequestParameter",
      "args": {
        "name": "per_page",
        "value": "1"
      }
    }
  ],
  "uri": "https://gitlab.xuxiaowei.com.cn",
  "metadata": {},
  "order": 0
}

允许匿名访问 GitLab Package 通用软件包仓库接口

  • id:唯一即可
  • predicates[0].nameHost:基于域名匹配
  • predicates[0].args.args1:域名配置
  • predicates[1].namePath:基于路径匹配
  • predicates[1].args.args1:路径配置。项目通用软件包仓库地址。此处的 551 代表项目ID
  • filters[0].nameAddRequestHeader:添加请求头 过滤器
  • filters[0].args.name:请求头名称,GitLab 凭证应该填写 PRIVATE-TOKEN
  • filters[0].args.value:请求头值,填写 GitLab API Token,必须只使用 read_api 权限,否则会有数据泄漏风险
  • uri:目标服务器地址,不要配置具体路径(因为配置了也无效)
  • metadata:元数据
  • order:优先级
{
  "id": "apk.xuxiaowei.com.cn-packages-generic",
  "predicates": [
    {
      "name": "Host",
      "args": {
        "args1": "apk.xuxiaowei.com.cn:*"
      }
    },
    {
      "name": "Path",
      "args": {
        "args1": "/api/v4/projects/551/packages/generic/**"
      }
    }
  ],
  "filters": [
    {
      "args": {
        "name": "PRIVATE-TOKEN",
        "value": "填写 GitLab API Token,必须只使用 read_api 权限,否则会有数据泄漏风险"
      },
      "name": "AddRequestHeader"
    }
  ],
  "uri": "https://gitlab.xuxiaowei.com.cn",
  "metadata": {},
  "order": 0
}

GitLab Releases 发布接口返回值替换

  • 由于 GitLab Releases 发布接口返回的地址 URL 还是 GitLab 域名,而 GitLab 域名需要凭证才能访问,所以要对数据进行一点处理
  • 处理方案如下:
    1. 在 APP 内进行硬编码,获取到 GitLab Releases 接口返回值后,替换为可以下载的地址
    2. 直接修改 代理 GitLab Releases 接口的返回值,如:登录 · 极狐GitLab

GitLab 最新版固定下载链接

  1. 第一步:调用 GitLab GitLab Releases 发布接口,获取最新的发布
  2. 第二步:找到 发布下载链接
  3. 第三步:返回 一个可以匿名下载的链接
  4. 参考:登录 · 极狐GitLab