Microsoft Teams como a ferramenta de comunicação, a integração não é muito difícil; só não está muito bem documentada. Vamos lá:
CI_PIPELINE_ID
e CI_PIPELINE_URL
contém o número e a URL do pipelineCI_JOB_STAGE
contém o stage do jobCI_JOB_NAME
contém o nome do job.gitlab-ci.yml
do projeto no GitLab em dois pontos.URL_WEBHOOK_TEAMS
, para a URL do webhook (lembre-se de modificar para a URL fornecida pelo Teams!):variables:
(suas variáveis)
URL_WEBHOOK_TEAMS:"https://minhaorganizacao.webhook.office.com/webhookb2/URL-completa-do-webhook-do-canal-Teams"
CI_JOB_STATUS
com o valor failed), usaremos after_script na seção default para, em caso de erro, disparar o envio do card para o canal:default:
after_script:
- |
generate_post_data()
{
cat << EOF
{
"@context": "https://schema.org/extensions",
"@type": "MessageCard",
"themeColor": "810000",
"title": "Pipeline $CI_PIPELINE_ID executado com ERRO!",
"summary": "Pipeline executado com ERRO!",
"sections": [
{
"activityTitle": "Erro na execução do pipeline $CI_PIPELINE_ID.\n\nJob: $CI_JOB_NAME\n\n Stage: $CI_JOB_STAGE"
}
],
"potentialAction": [
{
"@type": "OpenUri",
"name": "Verificar o pipeline",
"targets": [
{
"os": "default",
"uri": "$CI_PIPELINE_URL"
}
]
},
{
"@type": "OpenUri",
"name": "Job com erro",
"targets": [
{
"os": "default",
"uri": "$CI_JOB_URL"
}
]
}
]
}
EOF
}
- |
if [ "$CI_JOB_STATUS" = "failed" ]
then
curl -H "Content-Type:application/json" -d "$(generate_post_data)" $URL_WEBHOOK_TEAMS
fi
Ao rodar o script, acontece o seguinte fluxo:
after_script
.generate_post_data
com o JSON do card e as variáveis a serem substituídascurl
fazendo uma requisição HTTP POST para a URL do webhook, com os dados criados a partir de generate_post_data
; o próprio Bash substitui as variáveis.Caso o leitor prefira usar o HTTPie em vez do curl, troque a linha correspondente por echo $(generate_post_data) | http POST $URL_WEBHOOK_TEAMS
.
2022-08-26