A integração foi feita utilizando Azure Functions como o webhooks do Github. Para entender melhor o porque de adotarmos essa integração, clique aqui.
Para desenvolvimento local
- Instale o "Azure Core Tools".
- Se não tiver conta na Azure para uso do Storage, instale o "Azure Storage Emulator".
- Instale o "ngrok", para expor externamente as API's.
- Configure o "local.settings.json":
- AzureWebJobsStorage: string de conexão do Azure Storage
- JIRA_API_HOST: endereço do API manager
- JIRA_CONSUMER_KEY: consumer key do API Manager
- JIRA_CONSUMER_SECRET: consumer secredt do API Manager
- JIRA_USER: usuário para autenticação no Jira, será o assignee da issue
- JIRA_PASSWORD: senha do usuário do Jira
- JIRA_TOKEN_PATH: path da API de token do API Manager
- JIRA_API_PATH: path comum para chamada das APIs
- JIRA_ID_COMPONENT: lista de components do Jira
- JIRA_ID_ISSUETYPE: id do tipo de issue
- JIRA_ID_PROJECT: id do projeto
- JIRA_ISSUE_PREFIX: prefixo das issues do projeto
- GITHUB_USER: usuário para autenticação no Github
- GITHUB_PASSWORD: senha do usuário do Github
Exemplo:
{
"IsEncrypted": false,
"Values": {
"JIRA_API_HOST": "apimprod.totvs.com.br",
"JIRA_CONSUMER_KEY": "****************",
"JIRA_CONSUMER_SECRET": "*************",
"JIRA_USER": "integracao.jira.gith",
"JIRA_PASSWORD": "********",
"JIRA_TOKEN_PATH": "/api-homologacao/token",
"JIRA_API_PATH": "/api-homologacao/jira/2.0.0",
"JIRA_ID_COMPONENT": "1 - THF_ATENDIMENTO,2 - THF_GITHUB",
"JIRA_ID_ISSUETYPE": "12700",
"JIRA_ID_PROJECT": "15417",
"JIRA_ISSUE_PREFIX": "DTHF1-",
"GITHUB_USER": "devtotvs",
"GITHUB_PASSWORD": "*****"
}
}
- criar as filas no Azure Storage:
- githubissuecomments: comentários que devem ser incluídos a issue do Jira
- githubissuestoupdate: issues do Github que deve ser atualizadas com label contendo a chave da issue do Jira
- githubopenedissues: issues que devem ser incluídas no Jira
Configuração
- Adicionar nas configurações dos repositórios do Github os webhooks
- /githubissue: configurado para ser ativado por eventos individuais e selecionado Issues
- /githubissuecomment: configurado para ser ativado por eventos individuais e selecionado Issues comments
Fluxo da integração
Issue do Github
A issue criada ou alterada no Github dispara a chamada do endpont /githubissue
A função githubissue inclui a issue do Github na fila githubopenedissues com as informações:
Ação (criado, alterado, fechado, ...)
Título
Descrição
URL da api direta
URL da issue
- A função jiraopenissue é disparada pela fila githubopenedissues que inclui a issue no Jira e na fila githubissuestoupdate com as informações:
título do Github
descrição do Github
URL da API direta do Github
URL da issue do Github
id da issue no Jira
chave da issue no Jira
A função githubupdateissue é disparada pela fila githubopenedissues que adiciona a issue do Github um label com a chave da issue o Jira
Novo comentário na issue do Github
- O comentário adicionado ou alterado na issue no Github dispara a chamada do endpont /githubissuecomment
- A função githubissuecomment inclui a issue do Github na fila githubissuecomments com as informações:
- ação (criado, alterado, excluído, ...)
- título
- descrição
- URL da api direta
- URL da issue
- labels
- A função jiraaddcomment é disparada pela fila githubissuecomments que adiciona a o comentário a issue do Jira utilizando o label com a key para encontra-la
Observações
- todo erro é tratado para retornar o item para a fila, garantindo que toda issue seja incluída no Jira. Mas caso o erro não seja corrigido a fila ficará travada.