fix(staging): add DOUBAO_API_KEY to CI env render (fix 502 AI unavailable)
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 42s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m26s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m45s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m3s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m22s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m45s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m47s
AI Code Review / AI Code Review (pull_request) Successful in 6m36s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 9m52s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 11m10s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 4s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 10m54s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 14s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 36s

Root cause: Doubao (ARK) AI client configuration was missing from staging .env
template and CI render pipeline. The DOUBAO_API_KEY/MODEL/BASE_URL variables
were added to packages/config/api_settings.py but never wired through
deploy/configs/.env.staging, render_env.sh shared secrets, or ci-pipeline.yml.

After recent PRs that added AI endpoints (ai-rewrite, extract-from-douyin,
lipsync/digital-human) calling get_doubao_client(), is_available returned False
because settings.doubao_api_key was empty → all AI routes returned 502.

Fix:
1. deploy/configs/.env.staging: add DOUBAO_API_KEY/MODEL/BASE_URL/TIMEOUT/MAX_RETRIES
2. deploy/configs/.env.production: same (for prod parity)
3. scripts/render_env.sh: add DOUBAO_API_KEY/MODEL/BASE_URL to SHARED_SECRETS
4. .gitea/workflows/ci-pipeline.yml: pass DOUBAO secrets to deploy-staging env
5. Gitea Actions secrets: DOUBAO_API_KEY/MODEL/BASE_URL added (already set)

Verified render_env.sh produces correct .env.rendered with all 19 vars substituted.
Full unit test suite: 15523 passed.
This commit is contained in:
xiaoxia-agent
2026-09-16 11:54:44 +08:00
parent bb47e89a47
commit 300f4b2abd
4 changed files with 42 additions and 1 deletions
+3
View File
@@ -1205,6 +1205,9 @@ jobs:
COSYVOICE_API_KEY: ${{ secrets.COSYVOICE_API_KEY }}
DASHSCOPE_API_KEY: ${{ secrets.DASHSCOPE_API_KEY }}
MEDIAKIT_API_KEY: ${{ secrets.MEDIAKIT_API_KEY }}
DOUBAO_API_KEY: ${{ secrets.DOUBAO_API_KEY }}
DOUBAO_MODEL: ${{ secrets.DOUBAO_MODEL }}
DOUBAO_BASE_URL: ${{ secrets.DOUBAO_BASE_URL }}
WECHAT_APP_ID: ${{ secrets.WECHAT_APP_ID }}
WECHAT_APP_SECRET: ${{ secrets.WECHAT_APP_SECRET }}
run: |
+19
View File
@@ -216,6 +216,25 @@ MEDIAKIT_TIMEOUT=60
# SENTRY_DSN=${SENTRY_DSN}
# ==================== 豆包大模型 (火山引擎 ARK) ====================
# 豆包大模型 API Key(ARK 平台颁发)
# ${DOUBAO_API_KEY} — 替换为实际的 ARK API Key
DOUBAO_API_KEY=${DOUBAO_API_KEY}
# 模型 Endpoint ID
DOUBAO_MODEL=${DOUBAO_MODEL}
# API Base URL
DOUBAO_BASE_URL=${DOUBAO_BASE_URL}
# 请求超时(秒)
DOUBAO_TIMEOUT=60
# 最大重试次数
DOUBAO_MAX_RETRIES=2
# ==================== 微信开放平台 OAuth(网页扫码登录)====================
# 回调域名:xiaoxiajianji.com(微信开放平台已配置)
WECHAT_OPEN_APP_ID=${WECHAT_APP_ID}
+19
View File
@@ -233,6 +233,25 @@ MEDIAKIT_BASE_URL=https://mediakit.cn-beijing.volces.com/api/v1
MEDIAKIT_TIMEOUT=60
# ==================== 豆包大模型 (火山引擎 ARK) ====================
# 豆包大模型 API Key(ARK 平台颁发)
# ${DOUBAO_API_KEY} — 替换为实际的 ARK API Key
DOUBAO_API_KEY=${DOUBAO_API_KEY}
# 模型 Endpoint ID(在 ARK 控制台创建推理接入点后获得)
DOUBAO_MODEL=${DOUBAO_MODEL}
# API Base URL
DOUBAO_BASE_URL=${DOUBAO_BASE_URL}
# 请求超时(秒)
DOUBAO_TIMEOUT=60
# 最大重试次数
DOUBAO_MAX_RETRIES=2
# ==================== 微信开放平台 OAuth(网页扫码登录)====================
# 回调域名:xiaoxiajianji.com(微信开放平台已配置)
WECHAT_OPEN_APP_ID=${WECHAT_APP_ID}
+1 -1
View File
@@ -57,7 +57,7 @@ if [ "$TARGET_ENV" = "staging" ]; then
fi
# 共用 secrets 直接导出(如果存在)
SHARED_SECRETS="OSS_ACCESS_KEY_ID OSS_ACCESS_KEY_SECRET COSYVOICE_API_KEY DASHSCOPE_API_KEY MEDIAKIT_API_KEY WECHAT_APP_ID WECHAT_APP_SECRET"
SHARED_SECRETS="OSS_ACCESS_KEY_ID OSS_ACCESS_KEY_SECRET COSYVOICE_API_KEY DASHSCOPE_API_KEY MEDIAKIT_API_KEY DOUBAO_API_KEY DOUBAO_MODEL DOUBAO_BASE_URL WECHAT_APP_ID WECHAT_APP_SECRET"
for var in $SHARED_SECRETS; do
value="${!var:-}"
# 已经在环境中了,无需额外操作