我正在尝试将内容从 jenkins 写入 confluence,但是在获取特定解决方案时遇到一些问题(配置?插件错误?),或者在查找合适的信息来实施时遇到问题。
最终结果样例:
- Jenkins 作业查询 Cloudflare API 并生成 DNS 条目表以输入到 Confluence。
- Confluence 跟踪更改并提供历史记录(CloudFlare 似乎没有任何审计功能
潜在解决方案 1- Confluence 发布器插件
- 我尝试过这个插件,但是它看起来非常老旧(4 年没有更新,而且插件开发人员大概 3 年没有表现出任何明显的活动)。
- 我们使用 Atlassians Cloud Confluence,但是尝试进行全局配置并测试登录时,使用我自己的凭据进行测试会触发通用的“用户名/密码不接受”错误。
- 经过多次尝试后,消息已变为尝试次数过多,并且采取列出的步骤并不能改变错误消息(重新登录标准 Web UI)
(除非上面的列表和代码块之间存在某些内容,否则下面的代码块不会显示......服务器故障格式错误?)
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: com.atlassian.confluence.rpc.AuthenticationFailedException: Attempt to log in user '[email protected]' failed. The maximum number of failed login attempts has been reached. Please log into the web application through the web interface to reset the number of failed login attempts.
faultActor:
faultNode:
faultDetail:
{}com.atlassian.confluence.rpc.AuthenticationFailedException:null
{http://xml.apache.org/axis/}hostname:redacted.atlassian.net
com.atlassian.confluence.rpc.AuthenticationFailedException: Attempt to log in user '[email protected]' failed. The maximum number of failed login attempts has been reached. Please log into the web application through the web interface to reset the number of failed login attempts.
潜在解决方案 2- 将 Jenkins 发布到任意主机并使用来自 confluence 的 iframe 宏
- 编辑 - 我可能真的能让这个解决方案奏效。我可能是一个白痴,竟然认为这里的某些东西会带来挑战。
- https://ip-ranges.amazonaws.com/ip-ranges.json
- 最后,我仍然需要破解解决方案来跟踪变化(推送到 git?)
潜在解决方案 3- 我发现我可以直接使用 REST API。挑战在于确保 curl 调用格式正确(json + html 内容)
潜在解决方案 N - 我是否遗漏了什么?
答案1
我最终选择了 REST API 路线,使用 jq 来解析传入的 JSON
首先获取页面 id:
pageID=$(curl -u $Confluence_UserID:$Confluence_Password -X GET \
"https://redacted.atlassian.net/wiki/rest/api/content?title=$PageTitle&spaceKey=$Space" \
| jq -r .results[].id \
)
然后获取版本(必须提供版本号并增加,否则更新调用失败!)
pageVersion=$(curl -u $Confluence_UserID:$Confluence_Password \
"https://redacted.atlassian.net/wiki/rest/api/content/$pageID?expand=version" \
| jq .version.number \
)
((pageVersion++))
之前在 jenkins 作业中,它将 confluence 页面的 HTML 生成到工作区中的文件中。加载该文件以供下面使用
htmlOutput=$(<myHTMLSnippet.txt)
最后一部分,发送页面更新
curl -u $Confluence_UserID:$Confluence_Password \
-X PUT -H 'Content-Type: application/json' \
https://redacted.atlassian.net/wiki/rest/api/content/$pageID \
--data @- <<END;
{
"id": "$pageID",
"type": "page",
"title": "$PageTitle",
"space": {
"key": "$Space"
},
"body": {
"storage": {
"value": "$htmlOutput",
"representation": "storage"
}
},
"version": {
"number": $pageVersion,
"minorEdit": true
}
}
END