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

如何通过curl等待201响应码并保存Confluence异步任务结果至日志

实现Confluence Scroll Versions空间发布的自动化轮询流程

我来帮你搞定这个完整的自动化流程——用一段shell脚本就能把「触发发布→轮询任务→保存结果」全串起来,下面是分步说明和可直接复用的代码:

一、核心流程拆解

整个流程分三步:

  • 触发发布请求,拿到任务ID
  • 循环轮询任务状态,直到完成
  • 任务完成后保存结果到日志

二、完整Shell脚本实现

先确保你的环境安装了jq(用来解析JSON响应,大部分Linux发行版可以用apt install jq或yum install jq安装),然后把下面的代码保存成publish_confluence_space.sh:

#!/bin/bash

# 配置参数,记得替换成你的实际值
SERVER="http://your-confluence-server-url"
SOURCE_SPACE_KEY="your-source-space-key"
USERNAME="your-username"
PASSWORD="your-password-or-api-token"
LOG_FILE="confluence_publish.log"

# 1. 触发发布请求,获取任务ID
echo "触发Confluence空间发布请求..."
RESPONSE=$(curl -v -s -w "%{http_code}" -H "Accept:application/json" -H "Content-Type:application/json" \
  -X POST "${SERVER}/rest/scroll-versions/1.0/publish/${SOURCE_SPACE_KEY}/to_new/publish?os_username=${USERNAME}&os_password=${PASSWORD}" \
  --data '{
    "versionId":"9C8CC11601610D3E794E334A746E61SD",
    "targetSpaceKey":"pro60",
    "targetSpaceName":"Pro 60",
    "treeProviderName":"Pro 2017",
    "languageKey":"all",
    "copyLabels":"false",
    "keepAuthorsAndDates":"false",
    "removeAttachments":"false",
    "sendEmail":"false",
    "keepPermalinks":"false",
    "onlyPagesInFinalState":"false",
    "onlyPagesInFinalStateProcessChildren":"false",
    "publishHierarchy":"false"
  }')

# 分离响应体和状态码
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
RESPONSE_BODY=$(echo "$RESPONSE" | sed '$d')

if [ "$HTTP_CODE" != "202" ]; then
  echo "发布请求失败!状态码:$HTTP_CODE,响应内容:$RESPONSE_BODY"
  exit 1
fi

# 解析任务ID
TASK_ID=$(echo "$RESPONSE_BODY" | jq -r '.taskId')
echo "发布任务已触发,任务ID:$TASK_ID"

# 2. 轮询任务状态
echo "开始轮询任务状态..."
while true; do
  TASK_RESPONSE=$(curl -s -w "%{http_code}" -H "Accept:application/json" \
    "${SERVER}/rest/scroll-versions/1.0/async-tasks/${TASK_ID}?os_username=${USERNAME}&os_password=${PASSWORD}")
  
  TASK_HTTP_CODE=$(echo "$TASK_RESPONSE" | tail -n1)
  TASK_RESPONSE_BODY=$(echo "$TASK_RESPONSE" | sed '$d')

  if [ "$TASK_HTTP_CODE" == "201" ]; then
    echo "任务完成!结果已保存到${LOG_FILE}"
    echo "$TASK_RESPONSE_BODY" > "${LOG_FILE}"
    break
  elif [ "$TASK_HTTP_CODE" != "202" ]; then
    echo "任务执行出错!状态码:$TASK_HTTP_CODE,响应内容:$TASK_RESPONSE_BODY"
    exit 1
  fi

  echo "任务仍在执行中,10秒后重试..."
  sleep 10
done

三、关键注意事项

  • 参数替换:一定要把脚本开头的SERVER、SOURCE_SPACE_KEY等参数换成你自己的Confluence服务器信息和账号信息
  • JSON格式:原来的curl命令里--data后面的JSON没有加引号,这在shell里会报错,脚本里用单引号把整个JSON包起来解决了这个问题
  • 密码安全:如果你的Confluence是新版(7.10+),建议用API Token代替明文密码,避免泄露风险
  • 轮询间隔:脚本里设置的是10秒重试一次,你可以根据任务耗时调整sleep的时间
  • 日志路径:默认日志保存在当前目录的confluence_publish.log,你可以修改LOG_FILE变量指定其他路径

四、使用方法

  1. 给脚本添加执行权限:chmod +x publish_confluence_space.sh
  2. 运行脚本:./publish_confluence_space.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:40