Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

GitLab till Telegram, Kubernetes-testrapporter levererade

Rickard Andersson Partner, Nodenordic.se

Dina Kubernetes-tester ”fungerar på min dator”, men fallerar i CI. Eller så blir de godkända, men rapporten begravs i loggar som ingen öppnar. Efter några varv slutar team lita på pipelinen och börjar lita på magkänslan.

DevOps-ingenjörer dras in i omkörningar och städjobb. QA-ansvariga hamnar med att skärmdumpa resultat till intressenter. Och byråteamet som underhåller flera kundkluster känner det som ren tidsförlust. Den här automatiseringen för GitLab Telegram-tester ger dig repeterbara körningar och ett felfritt, delningsbart testpaket utan barnpassning.

Du får se vad workflowet gör, vad du behöver för att köra det och hur det förvandlar ”CI-brus” till Telegram-klara bevis du kan agera på.

Så fungerar den här automatiseringen

Hela n8n-workflowet, från trigger till slutligt resultat:

n8n Workflow Template: GitLab till Telegram, Kubernetes-testrapporter levererade

Problemet: Kubernetes CI-tester är långsamma, röriga och svåra att dela

End-to-end-tester för Kubernetes-appar ska vara ett skyddsnät. I praktiken blir de ofta en veckovis brandövning. Någon kör tester mot en halvkonfigurerad miljö, klustret driver, beroenden skiljer sig och resultaten blir omöjliga att jämföra. Sedan lägger du tid på att städa portar, ta bort gamla kluster och gräva i output bara för att svara på en enkel fråga: ”Blev det godkänt, och vad var det exakt som failade?” Den mentala belastningen är ärligt talat värre än compute-notan.

Det drar snabbt iväg. Här är var det brukar fallera i det dagliga arbetet.

  • Testmiljöer blir kvar efter en körning, så nästa körning startar med okänt läge och överraskningar.
  • När resultat ligger inne i CI-loggar ber intressenter om skärmdumpar, och QA blir en manuell rapporteringspipeline.
  • Verktygsdrift (Docker, KinD, Helm, ingress) gör ”kör om det” till ytterligare 30–60 minuters uppsättning.
  • Även när tester fallerar av en riktig orsak tappar du tid på att bevisa att det inte var miljön.

Lösningen: starta KinD, kör Robot-tester, skicka ett Telegram-rapportpaket

Det här workflowet ger dig en livscykel i tre faser för Kubernetes CI-testning: INIT, TEST och DESTROY. Det kan starta från en manuell körning i n8n, ett schema eller ett webhook-anrop från GitLab. I INIT förbereder det en fjärrhost i Linux med de beroenden som behövs, skapar ett KinD-kluster (Kubernetes i Docker), installerar Helm plus en ingress controller och driftsätter ArgoCD med ett ApplicationSet från ditt repo. I TEST hämtar det ditt Robot Framework-testskript från GitLab, installerar Robot-verktygen, kör webbläsardrivna tester och paketerar sedan outputen i ett enda arkiv. Till sist tar DESTROY bort HAProxy, raderar klustret, avinstallerar de tyngre komponenterna och postar en klart-notis så att du slipper gissa vilket skick hosten är i.

Workflowet startar när GitLab pingar din n8n-webhook (eller när du kör det enligt schema). Därifrån bygger det en felfri Kubernetes-miljö, kör Robot Framework-tester och komprimerar loggar, skärmdumpar och rapporter till en testing-export-pack.tar.gz. Telegram tar emot arkivet så att resultatet blir synligt och delningsbart på samma ställe som teamet redan följer.

Det här får du: automatisering vs. resultat

Exempel: så här ser det ut

Säg att du kör Kubernetes UI-tester en gång per dag. Manuelt kanske du lägger cirka 20 minuter på att förbereda hosten, runt 20 minuter på att bygga om ett kluster och ingress, och ytterligare 10 minuter på att paketera resultat och posta länkar till teamet. Det är ungefär 50 minuter ”stödarbete” innan du ens börjar felsöka fel. Med det här workflowet triggar du det från GitLab på ungefär en minut och väntar på körningen (ofta 30–60 minuter totalt), medan Telegram i slutet får ett färdigt rapportpaket att ladda ner. Din tidskostnad sjunker till nära noll om inget faktiskt fallerar.

Det du behöver

  • n8n-instans (prova n8n Cloud gratis)
  • Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
  • GitLab för att lagra och hämta testfiler
  • Telegram-bot för att leverera rapporter till en chatt
  • GitLab OAuth2-uppgifter (skapa i GitLab Användarinställningar → Applikationer)

Nivå: Medel. Du kopplar uppgifter, ändrar några parametrar och är bekväm med SSH-åtkomst till en Linux-host.

Vill du inte sätta upp detta själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).

Så fungerar det

En GitLab-webhook, ett schema eller en manuell körning startar det. Du kan köra hela pipelinen eller välja en enskild fas med parametrar som progress och progress_only, vilket är smidigt vid felsökning.

Workflowet hämtar exakt de filer det behöver från GitLab. Det hämtar ditt Robot Framework-skript (test.robot), en KinD-klusterkonfiguration (config.yaml) och ett ArgoCD ApplicationSet-manifest och skriver sedan ut dem på rätt plats för körning.

En temporär Kubernetes-miljö skapas på en fjärrhost. Med SSH-styrda kommandon installerar det beroenden som Docker och KinD, sätter upp ingress och HAProxy-portforwarding och driftsätter ArgoCD så att din app hamnar i klustret på samma sätt varje gång.

Robot Framework körs, sedan får Telegram bevisen. Workflowet kör webbläsartesterna, arkiverar outputen till ett enda tar.gz-paket och skickar det till din Telegram-chatt så att rapporten är ett klick bort.

Du kan enkelt ändra trigger-metod (webhook vs. schema) så att den passar din releaserytm utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.

Steg-för-steg-guide för implementation

Steg 1: Konfigurera trigger-noderna

Det här arbetsflödet kan starta manuellt, enligt ett schema eller via en webhook. Konfigurera alla tre triggers så att ni kan köra tester i olika sammanhang.

  1. Öppna Manual Execution Start och låt den vara som den är för manuella körningar.
  2. Öppna Incoming Webhook Trigger och ställ in HTTP Method till POST och Path till gitlab-commit.
  3. Öppna Scheduled Run Trigger och ställ in schemaregeln så att den körs vid 1 (som konfigurerat i noden).
  4. Säkerställ att alla tre triggers ansluter till Assign Runtime Params som visas i canvasen.

Tips: Använd Manual Execution Start för första valideringen, och aktivera sedan Incoming Webhook Trigger eller Scheduled Run Trigger för produktionskörningar.

Steg 2: Sätt runtime-parametrar och routningslogik

Definiera målmijön och fasroutningen så att arbetsflödet vet om det ska initiera, testa eller ta bort resurser.

  1. I Assign Runtime Params, sätt target_host till target_host_ip, target_port till target_host_ssh_port, target_user till target_host_username och target_password till target_host_password.
  2. Sätt progress till INIT och progress_only till false i Assign Runtime Params.
  3. Sätt KIND_CONFIG till config.yaml, ROBOT_SCRIPT till test.robot och ARGOCD_APPSET till demo-applicationSet.yaml.
  4. Öppna Route by Phase och verifiera att reglerna använder {{ $json.progress }} för att routa till INIT, TEST och DESTROY.
  5. Bekräfta att Mark Init Complete uppdaterar progress till TEST och att Mark Test Complete uppdaterar den till DESTROY.

⚠️ Vanlig fallgrop: Om progress_only inte är false kan Check Init Only och Check Test Only hoppa över hela körningen och routa vidare till No-Op Placeholder.

Steg 3: Anslut GitLab för konfigurationsfiler

Robot Framework-skript och Kubernetes-konfiguration hämtas från GitLab innan de skrivs lokalt.

  1. Öppna Retrieve Robot Script File och ställ in File Path till {{ $('Assign Runtime Params').item.json.ROBOT_SCRIPT }}.
  2. Öppna Retrieve KinD Config File och ställ in File Path till {{ $('Assign Runtime Params').item.json.KIND_CONFIG }}.
  3. Öppna Retrieve ArgoCD AppSet och ställ in File Path till {{ $('Assign Runtime Params').item.json.ARGOCD_APPSET }}.
  4. Inloggningsuppgifter krävs: Anslut era gitlabOAuth2Api-credentials i Retrieve Robot Script File, Retrieve KinD Config File och Retrieve ArgoCD AppSet.

Steg 4: Konfigurera lokal filhantering och körning av Robot-tester

Dessa noder skriver hämtade filer till disk, förbereder Robot Framework-runtime och kör testsviten.

  1. I Write Robot Script File, ställ in File Name till /tmp/process_it.robot och Data Property Name till process_it.robot.
  2. I Load Robot Script File, ställ in File Selector till {{ $('Write Robot Script File').item.json.fileName }}.
  3. I Open Robot Script Content, ställ in Command till =cat {{ $json.fileName }}.
  4. I Install Robot & Browser Tools, behåll hela installationsskriptet som det är för att installera Python, Chromium och Robot Framework-bibliotek.
  5. I Execute Robot Framework, ställ in Robot Script till {{ $json.stdout }} och aktivera Include Log HTML.

Tips: Arbetsflödet använder flera readWriteFile-noder (totalt 5) för konfiguration och utdatafiler. Säkerställ att n8n-värden har åtkomst till /tmp.

Steg 5: Provisionera KinD, ArgoCD och ingress på fjärrvärden

Dessa steg installerar Docker och KinD på distans, skapar klustret, konfigurerar ingress och driftsätter ArgoCD med ett ApplicationSet.

  1. Gå igenom fjärrkontrollerna i Check sshpass Local, Check Docker Remote och Check KinD Remote; de använder SSH-uttryck som {{ $('Assign Runtime Params').item.json.target_host }}.
  2. Låt den villkorsstyrda valideringslogiken i Validate sshpass Local, Validate Docker Remote och Validate KinD Remote vara som den är konfigurerad.
  3. Bekräfta att installationsnoderna (Install sshpass Locally, Install Docker Remote, Install KinD Remote) använder de medföljande skripten för att säkerställa att förutsättningarna finns.
  4. I Create KinD Cluster Remote, behåll kommandot som injicerar {{ $json.stdout }} i klusterkonfigurationen och kör kind create cluster --name automate-tst.
  5. I Install Helm & Ingress och Setup HAProxy Port Proxy, behåll skripten som konfigurerar ingress och HAProxy-routning.
  6. Slutför ArgoCD-setup med Install ArgoCD in KinD och applicera ApplicationSet via Apply ArgoCD AppSet efter Open ArgoCD AppSet.

⚠️ Vanlig fallgrop: Det här arbetsflödet använder 27+ executeCommand-noder med SSH-kommandon. Säkerställ att målvärden tillåter lösenordsbaserad SSH och att sshpass är installerat lokalt.

Steg 6: Konfigurera resultatarkivering och leverans via Telegram

Robot-loggar komprimeras och levereras till en Telegram-chatt efter att testerna är klara.

  1. I Archive Robot Results, behåll kommandot som skapar /tmp/testing-export-pack.tar.gz och skriver ut sökvägen till arkivet.
  2. I Load Results Archive, ställ in File Selector till {{ $json.stdout }} och säkerställ att binär-egenskapsnamnet är testing-export-pack.tar.gz.
  3. I Send Results Archive, ställ in Chat ID till [YOUR_ID] och behåll Operation som sendDocument.
  4. Inloggningsuppgifter krävs: Anslut era telegramApi-credentials i Send Results Archive.

Steg 7: Konfigurera städning och notifieringar vid slutförande

Efter testerna tar arbetsflödet bort kluster, städar beroenden och skickar slutliga aviseringar.

  1. Bekräfta att städningen körs via Check sshpass Local DValidate sshpass Local DRemove HAProxy Remote.
  2. Säkerställ att klusterstädning utförs av Remove KinD Cluster Remote och valideras av Check KinD Remote DValidate KinD Remote D.
  3. Bekräfta att Docker tas bort av Uninstall Docker Remote, och därefter värdstädning av Remove Target Host Entry.
  4. I Send Completion Alerts, ersätt [CONFIGURE_YOUR_TOKEN], [YOUR_ID] och [YOUR_PHONE] med riktiga värden.
  5. Verifiera att Mark Cleanup Done uppdaterar progress till CLEAR och triggar Send Completion Alerts.

Tips: No-Op Placeholder finns för felsökning av grenar och påverkar inte produktionslogiken.

Steg 8: Testa och aktivera ert arbetsflöde

Validera hela exekveringsflödet innan ni slår på schemalagda körningar eller webhook-körningar.

  1. Klicka på Execute Workflow och kör Manual Execution Start för att testa flödet end-to-end.
  2. Bekräfta lyckade progress-övergångar i Route by Phase från INITTESTDESTROY.
  3. Verifiera att ett Telegram-dokument levereras av Send Results Archive och att slutförandemeddelandet skickas av Send Completion Alerts.
  4. När ni är redo, aktivera arbetsflödet så att Incoming Webhook Trigger och Scheduled Run Trigger kan köras i produktion.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Vanliga fallgropar

  • GitLab OAuth2-uppgifter kan gå ut eller sakna scopes. Om saker slutar fungera, kontrollera först scopes för din GitLab-applikation (read_api, read_repository, read_user) och n8n-anslutningen för uppgifterna.
  • Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
  • Telegram-leverans misslyckas oftast av enkla skäl: fel Chat ID, en bot som inte lades till i gruppen, eller en token som återskapats. Testa boten med ett enkelt meddelande innan du litar på rapportuppladdningen.

Vanliga frågor

Hur lång tid tar det att sätta upp den här automatiseringen för GitLab Telegram-tester?

Cirka en timme om dina GitLab- och Telegram-uppgifter är klara och du redan har en Linux-host att köra på.

Behöver jag kunna koda för att automatisera GitLab Telegram-tester?

Nej. Du klistrar mest in uppgifter och uppdaterar några parametrar som host-IP, repo-sökvägar och vilken fas som ska köras.

Är n8n gratis att använda för det här workflowet för GitLab Telegram-tester?

Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för din Linux-host och CI-minuter, plus normal bandbredd för att ladda upp Telegram-rapportarkivet.

Var kan jag hosta n8n för att köra den här automatiseringen?

Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärd och hanterar n8n bra. Egen drift ger obegränsade exekveringar men kräver grundläggande serverhantering.

Kan jag anpassa det här workflowet för GitLab Telegram-tester så att det bara kör INIT eller bara DESTROY?

Ja, och det bör du. Du styr det via set-noden ”Assign Runtime Params” (fälten progress och progress_only), och därefter avgör switch-noden ”Route by Phase” vad som körs härnäst. Vanliga anpassningar är att köra INIT en gång per dag, köra TEST på varje commit och hålla DESTROY separat så att städning kan köras om säkert.

Varför misslyckas min GitLab-anslutning i det här workflowet?

Oftast är det ett OAuth2-scope-problem eller en utgången auktorisering. Återanslut GitLab OAuth2-uppgiften i n8n, bekräfta att din GitLab-applikation har read_api och read_repository, och dubbelkolla repo-ägare, branch-referens och filsökvägar (test.robot, config.yaml och ApplicationSet YAML). Om du kör GitLab i egen drift måste server-URL:en i uppgiften matcha exakt, inklusive https.

Hur många testkörningar klarar den här automatiseringen för GitLab Telegram-tester?

Med ett vanligt upplägg (till exempel nattligt) klarar den många; den verkliga gränsen är din n8n-exekveringskvot och hur mycket CPU/RAM målhosten har för KinD och webbläsartester.

Är den här automatiseringen för GitLab Telegram-tester bättre än att använda Zapier eller Make?

För Kubernetes-testning: oftast ja. Zapier och Make är bra för app-till-app-förflyttning av data, men de är inte byggda för att orkestrera en flerfasig fjärrsetup med SSH-kommandon, klusterskapande och paketering av artefakter. n8n passar bättre när du behöver förgreningslogik (INIT vs TEST vs DESTROY), retries och möjligheten att köra samma workflow enligt schema eller via en webhook från GitLab. Om du bara vill ”skicka ett Telegram-meddelande när GitLab-pipeline fallerar”, använd Zapier och gå vidare. Prata med en automatiseringsexpert om du vill ha hjälp att välja.

När detta väl rullar slutar teamet bråka om miljöer och börjar titta på riktiga resultat. Workflowet tar hand om repetitiv städning och paketering så att du kan fokusera på att åtgärda det som testerna faktiskt säger.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Launch login modal Launch register modal