Como obter dados de Jenkins para Confluence (Cloud)

1

Estou tentando escrever a partir de jenkins para a confluência, mas estou tendo alguns problemas para fazer com que uma solução específica funcione (configuração? bugs de plug-in?) ou problemas para encontrar informações apropriadas a serem implementadas.

Exemplo de resultado final:

  • Um trabalho do Jenkins consulta a API do Cloudflare e gera uma tabela de entradas do DNS para entrar na confluência.
  • O Confluence rastreia alterações e fornece um histórico (o cloudflare não parece ter nenhuma funcionalidade de auditoria

Solução potencial 1 - Plugin do Confluence Publisher

  • Eu tentei este plugin, mas ele parece ser extremamente antigo (não atualizado em 4 anos, e o desenvolvedor do plugin não mostrou nenhuma atividade notável em talvez 3 anos).
  • Usamos Atlassians Cloud Confluence, mas a tentativa de fazer a configuração global e testar o login aciona um erro genérico de "nome de usuário / senha não aceito" ao testar com minhas próprias credenciais.
  • Após várias tentativas, a mensagem foi alterada para muitas tentativas e a execução das etapas listadas não altera a mensagem de erro (fazendo o login novamente na interface da Web padrão)

(o bloco de código abaixo não será exibido, a menos que exista algo entre a lista acima e o bloco de código ... bug de formatação do serverfault?)

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.

Potencial Solução 2 - Publica o Jenkins no host arbitrário e usa a macro iframe da confluência

  • EDITAR - Posso realmente conseguir que essa solução funcione. Eu posso ser um idiota por pensar que algo aqui seria um desafio.
  • link
  • Finalmente, eu ainda precisaria hackear uma solução para rastrear mudanças (push to git?)

Solução potencial 3 - Descobri que provavelmente posso usar a API REST diretamente. O desafio é garantir que a chamada curl esteja perfeitamente formatada (conteúdo json + html)

Solução potencial N - Eu perdi alguma coisa?

    
por Ryan 12.07.2017 / 19:41

1 resposta

1

Acabei indo pela rota da API REST, usando jq para analisar o JSON de entrada

Primeiro, pegue o ID da página:

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

Em seguida, obtenha a versão (o número da versão deve ser fornecido e incrementado ou a chamada de atualização falhará!)

pageVersion=$(curl -u $Confluence_UserID:$Confluence_Password \
    "https://redacted.atlassian.net/wiki/rest/api/content/$pageID?expand=version" \
    | jq .version.number \
    )
((pageVersion++))

Anteriormente no job do jenkins, ele gerava o HTML da página de confluência em um arquivo no espaço de trabalho. Carregue isso para usar abaixo

htmlOutput=$(<myHTMLSnippet.txt)

E a parte final, enviando a atualização da página

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
    
por 14.07.2017 / 00:50