如何将数据从 Jenkins 传输到 Confluence(云)

如何将数据从 Jenkins 传输到 Confluence(云)

我正在尝试将内容从 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

相关内容