Назад | Перейти на главную страницу

Как получить данные из Jenkins в Confluence (Cloud)

Я пытаюсь писать из jenkins в слияние, но у меня возникают некоторые проблемы: либо заставить работать конкретное решение (конфигурация? Ошибки плагина?), Либо возникают проблемы с поиском соответствующей информации для реализации.

Конечный результат образца:

Возможное решение 1 - Плагин Confluence Publisher

(блок кода ниже не появится, если между приведенным выше списком и блоком кода нет чего-то ... ошибка форматирования serverfault?)

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: com.atlassian.confluence.rpc.AuthenticationFailedException: Attempt to log in user 'redacted@redacted.com' 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 'redacted@redacted.com' 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 на произвольном хосте и используйте макрос iframe из слияния

Возможное решение 3 - Я обнаружил, что могу использовать REST API напрямую. Задача состоит в том, чтобы убедиться, что вызов curl идеально отформатирован (содержимое json + html)

Возможное решение N - Я что-то упустил?

В итоге я пошел по маршруту REST API, используя jq для анализа входящего JSON.

Сначала получите идентификатор страницы:

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++))

Ранее в работе Дженкинса он сгенерировал 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