You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure DevOps Pipeline中通过YAML配置Kong服务与路由

实现Kong资源批量创建的方案

一、使用Kong官方CLI工具Deck(推荐)

Deck是Kong官方提供的配置管理工具,专门用于批量同步、导入导出Kong的服务、路由、插件等资源,适配CI/CD流水线场景的稳定性和效率需求。

步骤1:在Azure DevOps流水线中安装Deck

根据流水线代理的操作系统,添加对应的安装步骤:

- script: |
    curl -sL https://github.com/Kong/deck/releases/latest/download/deck_$(uname -s)_$(uname -m).tar.gz -o deck.tar.gz
    tar -xf deck.tar.gz
    sudo mv deck /usr/local/bin/
    deck version
  displayName: 'Install Kong Deck (Linux)'
  condition: eq(variables['Agent.OS'], 'Linux')

步骤2:调整现有YAML为Deck兼容格式

Deck的配置YAML有固定结构,若你现有文件格式不符,需调整为如下示例结构(已有类似结构可直接复用):

_format_version: "1.1"
services:
- name: example-service
  url: http://example-api:8080
  routes:
  - name: example-route
    paths:
    - /example
  plugins:
  - name: rate-limiting
    config:
      minute: 100
      hour: 1000

如果现有YAML是零散的资源集合,也可以用deck file add命令逐步构建合规配置文件。

步骤3:在流水线中执行批量同步

使用deck sync命令将YAML配置同步到Kong实例,该命令会自动对比现有资源,完成创建/更新/删除的差异操作;若仅需新增资源不删除现有内容,可改用deck import --mode create:

- script: |
    deck sync --kong-uri $(KONG_ADMIN_URL) --config kong-config.yaml
  displayName: 'Sync Kong Config with Deck'
  env:
    KONG_ADMIN_URL: $(KongAdminUrl) # 从Azure DevOps变量组中读取Kong Admin地址

若Kong启用了Admin Token认证,需添加--kong-token参数传入凭证:

deck sync --kong-uri $(KONG_ADMIN_URL) --kong-token $(KongAdminToken) --config kong-config.yaml

二、不使用Deck的备选方案(直接调用API批量处理)

如果不想引入新工具,可借助yq解析YAML文件,结合curl批量发送请求:

步骤1:安装yq(YAML解析工具)

- script: |
    sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq
    sudo chmod +x /usr/bin/yq
  displayName: 'Install yq (Linux)'

步骤2:编写脚本遍历YAML并创建资源

假设你的YAML文件以services数组为顶层结构,每个服务包含routes和plugins节点,可编写如下bash脚本:

#!/bin/bash
KONG_URI=$KONG_ADMIN_URL

# 遍历创建服务
yq e '.services[]' kong-config.yaml | while read -r service; do
  SERVICE_NAME=$(echo "$service" | yq e '.name')
  SERVICE_URL=$(echo "$service" | yq e '.url')
  curl -X POST "$KONG_URI/services" -H "Content-Type: application/json" -d "{\"name\":\"$SERVICE_NAME\",\"url\":\"$SERVICE_URL\"}"

  # 遍历创建当前服务的路由
  echo "$service" | yq e '.routes[]' | while read -r route; do
    ROUTE_NAME=$(echo "$route" | yq e '.name')
    ROUTE_PATH=$(echo "$route" | yq e '.paths[0]')
    curl -X POST "$KONG_URI/services/$SERVICE_NAME/routes" -H "Content-Type: application/json" -d "{\"name\":\"$ROUTE_NAME\",\"paths\":[\"$ROUTE_PATH\"]}"
  done

  # 遍历创建当前服务的插件
  echo "$service" | yq e '.plugins[]' | while read -r plugin; do
    PLUGIN_NAME=$(echo "$plugin" | yq e '.name')
    PLUGIN_CONFIG=$(echo "$plugin" | yq e '.config | tojson')
    curl -X POST "$KONG_URI/services/$SERVICE_NAME/plugins" -H "Content-Type: application/json" -d "{\"name\":\"$PLUGIN_NAME\",\"config\":$PLUGIN_CONFIG}"
  done
done

随后在流水线中执行该脚本:

- script: |
    chmod +x import-kong-resources.sh
    ./import-kong-resources.sh
  displayName: 'Import Kong Resources via curl and yq'
  env:
    KONG_ADMIN_URL: $(KongAdminUrl)

注意事项

  • Kong Admin API的地址、认证凭证需存储在Azure DevOps安全变量组中,禁止硬编码。
  • 使用deck sync前建议先在测试环境验证,避免误操作生产环境资源。
  • 若你的YAML结构与示例不符,需对应调整yq的解析路径或Deck的配置结构。

内容的提问来源于stack exchange,提问作者Paula Gouveia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:45:48