|
Some checks failed
Deploy production / Deploy to production VM (push) Failing after 36s
|
||
|---|---|---|
| .gitea/workflows | ||
| config | ||
| docs | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| cron.js | ||
| ecosystem.config.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Sistema de Integracao ServiceNow <-> GLPI
Middleware Node.js para integrar chamados entre ServiceNow e GLPI, usando PostgreSQL como banco intermediario e acesso ao banco do GLPI.
Estado atual
- Coleta de tickets SN por watermark.
- Criacao/vinculo de tickets no GLPI (grava
external_idno GLPI com o numero do ticket SN). - Sincronizacao de comentarios e tasks em duas direcoes.
- Preenchimento do campo "Ticket Externo" no SN com o ID GLPI.
- Motor de regras unico (
processTicketLifecycleController) para status/fechamento/reabertura:status=5(resolver SN),status=6(encerrar definitivamente no SN), nota no GLPI quando o SN resolve/encerra por conta propria (com aviso e troca de fila no SN), reabertura automatica e regra de fora de escopo.
Fluxo do ciclo
Executado pelo main():
processErrorControllerprocessTicketsControllerprocessTicketLifecycleController(quandoENABLE_GLPI_CLOSE_CRON=true)processCommentsController
Documentacao detalhada
- Fluxo tecnico: docs/fluxo.md
- Regras de negocio completas: docs/regrasdenegocio.md
- Casos de uso: docs/casosdeuso.md
- Manual do usuario (se eu fizer X, acontece Y): docs/manualusuario.md
- Plano e checklist de rollout: docs/checklist.md
Variaveis de ambiente importantes
Feature flags
ENABLE_GLPI_CLOSE_CRONtrue: liga o motor de regras de status/fechamento/reabertura (processTicketLifecycleController)false: desliga o motor inteiro
ServiceNow
SERVICENOW_TABLE_INCIDENT_URLSERVICENOW_TABLE_REQUEST_URLSERVICENOW_TABLE_JOURNAL_URLSERVICENOW_SC_ITEM_OPTION_URLSERVICENOW_DEFAULT_USERSERVICENOW_IGNORE_DEFAULT_USER_JOURNALSERVICENOW_EXTERNAL_TICKET_FIELD(default:u_external_ticket)
GLPI e banco intermediario
GLPI_DB_*SNGLPI_DB_*GLPI_OOS_SOLUTION_TYPE_ID
Desenvolvimento
- Instalar dependencias:
npm install
- Criar env:
copy .env.example .env.development
- Executar:
npm run dev
Producao
Deploy manual na VM
git pull origin master
npm ci --omit=dev
pm2 start ecosystem.config.js --env production
pm2 save
Se o processo ja estiver rodando:
pm2 restart sn-glpi-sync-cron --update-env
Deploy via Gitea Actions
O workflow .gitea/workflows/deploy-production.yml roda no runner com rotulo vm-prod.
- Configure a variavel do repositorio
PROD_DEPLOY_PATHcom o caminho da aplicacao na VM de producao. Se nao configurar, o workflow usa/opt/sn-glpi-sync-new. - Garanta que o arquivo
.env.productionexista nesse caminho na VM e contenhaSERVICENOW_CAOA_TI_GROUP_IDpreenchido. - Faça push na branch
masterou execute o workflow manualmente em Actions. - Acompanhe pelo Gitea Actions ou na VM:
pm2 list
pm2 logs sn-glpi-sync-cron
Onde fica o .env.production
O .env.production nunca e versionado no git — o rsync do deploy exclui .env* de proposito,
exatamente para nunca sobrescrever esse arquivo com o codigo. O proprio workflow ja materializa
esse arquivo a cada deploy a partir do secret ENV_PRODUCTION (Settings > Actions > Secrets no
Gitea), entao a fonte da verdade das credenciais de producao e esse secret, nao um arquivo mantido
a mao na VM. Detalhes:
- Ele existe dentro da propria pasta de deploy (
$PROD_DEPLOY_PATH/.env.production, ex.:/opt/sn-glpi-sync-new/.env.production) — nao na raiz de nenhum usuario (nemdev, nemroot).cron.js/src/app.jsresolvem o caminho do env relativo a propria raiz do repo, entao e ali que ele precisa estar. - O workflow ja aplica
chmod 600nele apos escrever (dono = usuario que roda o PM2), evitando outro usuario local da VM lendo credencial de banco/API em texto puro. - Pra atualizar uma credencial/config de producao, edite o secret
ENV_PRODUCTIONno Gitea e rode o deploy de novo (push emmasterouworkflow_dispatch) — nao precisa mais SSH na VM pra editar arquivo a mao. Como o secret fica guardado no Gitea (fora da VM), tambem resolve o risco de perder a unica copia das credenciais se o disco da VM falhar.
Rollback manual
O deploy guarda a versao anterior em $PROD_DEPLOY_PATH.previous antes de sincronizar o codigo
novo. Se o deploy subir uma versao com problema (o node --check so pega erro de sintaxe, nao de
logica), o rollback e:
rsync -a --delete "$PROD_DEPLOY_PATH.previous"/ "$PROD_DEPLOY_PATH"/
cd "$PROD_DEPLOY_PATH" && pm2 restart ecosystem.config.js --update-env
Observacoes
- O projeto ainda nao tem suite automatizada robusta.
- O rollout recomendado e por fases com feature flags.
- Nao remover schema legado antes de estabilizar o fluxo novo.
- Consulte
docs/checklist.mdantes de cada deploy para validar pre e pos-subida.