Du pushar kod, och sedan börjar den riktiga tidstjuven. Skapa en PR, leta upp Jira-ärendet, flytta det till rätt status och pinga sedan Slack (och ibland Notion) så att ingen frågar ”är det här klart än?”
Engineering managers ser det som fastnad transparens. Tech leads känner av den ständiga kontextväxlingen. Och projektledare vill bara att Jira ska spegla verkligheten. Den här Jira-statusautomationen kopplar dina commits till dina ärenden så att uppdateringar sker automatiskt, precis när arbetet förändras.
Nedan ser du exakt vad workflowet gör, vad du behöver koppla ihop och hur det förvandlar en push-händelse till korrekt formaterade Jira-uppdateringar och teamnotiser.
Så fungerar automationen
Här är hela workflowet du kommer att sätta upp:
n8n Workflow Template: GitHub + Jira: PR:er uppdaterar ticketstatus automatiskt
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Commit Message Breakdown"]
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for PR commands", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Request to create PR"]
n3@{ icon: "mdi:location-exit", form: "rounded", label: "Invalid commit message", pos: "b", h: 48 }
n4@{ icon: "mdi:location-exit", form: "rounded", label: "JIRA Task does not exist", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for task completed com..", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/jira.svg' width='40' height='40' /></div><br/>Get task details for PR"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/jira.svg' width='40' height='40' /></div><br/>Get Task Details without PR."]
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if task exist", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/jira.svg' width='40' height='40' /></div><br/>Update task status after PR"]
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check whether a PR already e..", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/jira.svg' width='40' height='40' /></div><br/>Update the task status witho.."]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Check if PR exists"]
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if task exists", pos: "b", h: 48 }
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send message in slack with PR"]
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send message in slack withou.."]
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Append a block in notion wit.."]
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Append a block in notion wit.."]
n14 --> n10
n15 --> n2
n16 --> n0
n12 --> n14
n12 --> n15
n8 --> n9
n8 --> n4
n13 --> n11
n13 --> n4
n2 --> n8
n1 --> n6
n1 --> n5
n6 --> n12
n0 --> n1
n9 --> n17
n9 --> n19
n7 --> n13
n5 --> n7
n5 --> n3
n10 --> n8
n10 --> n15
n11 --> n18
n11 --> n20
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n1,n5,n8,n10,n13 decision
class n19,n20 database
class n2,n12,n16 api
class n0,n14 code
classDef customIcon fill:none,stroke:none
class n0,n2,n6,n7,n9,n11,n12,n14,n15,n16,n17,n18,n19,n20 customIcon
Varför det här spelar roll: PR:er uppdaterar inte arbetet
De flesta team tappar inte tid på ”stora” administrativa uppgifter. De tappar den på små avbrott som slår till 20 gånger per dag. Du gör klart en ändring, pushar den, och sedan måste du komma ihåg Jira-nyckeln, öppna Jira, flytta ärendet, klistra in en PR-länk och sedan annonsera det någonstans så att granskningar faktiskt händer. Missar du ett steg ljuger tavlan. Gör du det inkonsekvent slutar folk lita på tavlan helt. Då får du det sämsta utfallet: statusmöten som bara finns för att återskapa sanningen.
Friktionen byggs på. Här brukar det ofta fallera.
- PR:er skapas, men Jira fastnar i ”In Progress”, så rapportering och prognoser glider.
- Granskningsförfrågningar sker i folks huvuden, vilket betyder att Slack-pingar kommer sent eller inte alls.
- Commit-meddelanden varierar mellan personer, så automation blir svårt och processen blir ”bästa försök”.
- I team med flera repo multipliceras overhead snabbt eftersom varje repo kräver samma uppföljningssteg.
Det du bygger: push-till-PR-till-Jira-uppdateringar (med teamnotiser)
Det här workflowet lyssnar på GitHub push-händelser, läser ditt commit-meddelande efter ett Jira-ärende-ID och några enkla ”instruktioner”, och avgör sedan vad som ska hända härnäst. Om commiten indikerar att en PR ska skapas, skapar den pull requesten i rätt repository, kontrollerar att Jira-ärendet finns och flyttar ärendet till den status du väljer (till exempel ”Done” eller ”Dev Done”). Om din commit indikerar att det inte finns någon PR (eller att en redan finns), uppdaterar den ändå Jira-ärendet så att tavlan förblir korrekt. Till sist postar den ett tydligt meddelande i Slack och lägger till en uppdatering i Notion så att resten av teamet kan se vad som ändrats utan att jaga dig.
Workflowet startar med en GitHub-webhook för en push-händelse. Därifrån tolkar den commit-meddelandet, förgrenar baserat på dina flaggor och använder Jira + Slack (och Notion) för att hålla alla synkade. Slutresultatet är enkelt: din kodaktivitet uppdaterar ditt leveranssystem automatiskt.
Det du bygger
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att ditt team levererar 10 ändringar per dag över några repo, och varje ändring kräver tre manuella steg: skapa eller hitta PR:en (cirka 5 minuter), uppdatera Jira-statusen (cirka 2 minuter) och sedan skriva i Slack (cirka 1 minut). Det är ungefär 80 minuter per dag av småadmin. Med det här workflowet är ”tiden du lägger” i princip att skriva commit-meddelandet korrekt, vilket ändå är samma push. Du väntar mest på att PR-skapandet ska bli klart, och teamet ser uppdateringen automatiskt.
Innan du börjar
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- GitHub för push-webhooks och PR-skapande.
- Jira för att validera ärenden och uppdatera statusar.
- Slack för att notifiera teamet med PR/ingen-PR-uppdateringar.
- Notion för att lägga till en permanent aktivitetslogg (valfritt).
- Jira API-token (hämta den från Atlassian-kontosäkerhet).
Kunskapsnivå: Medel. Du är bekväm med att lägga till GitHub-webhooks och välja rätt Jira status-ID:n.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
En GitHub push drar igång allt. Du lägger till workflowets webhook-URL i varje repository du vill inkludera, med händelsen ”push” så att varje relevant commit når n8n.
Commit-meddelandet översätts till åtgärder. Ett tolkningssteg läser commit-texten, plockar ut Jira-ärendenyckeln och letar efter flaggor som anger om en PR ska skapas eller om arbetet är ”klart”. Om commiten inte följer er konvention stoppar workflowet tidigt så att du inte får halvdana uppdateringar.
PR-skapande och ärendekontroller sker därefter. När ”skapa PR”-spåret är giltigt anropar n8n GitHub via en HTTP-förfrågan, hämtar relaterad PR-info för att undvika dubbletter och hämtar sedan Jira-ärendedata för att bekräfta att ärendet finns innan något ändras.
Statusuppdateringar och notiser postas. Jira flyttar ärendet till den status du mappat, sedan postar Slack ett meddelande med PR-länken (eller en uppdatering om ”ingen PR”). Parallellt kan Notion ta emot samma information så att uppdateringen går att söka upp senare.
Du kan enkelt justera reglerna för commit-nyckelord så att de matchar teamets konventioner, eller byta ut Notion mot en annan destination som e-post. Se hela implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: konfigurera webhook-triggern
Konfigurera webhooken som tar emot GitHub push-händelser och startar arbetsflödet.
- Lägg till och öppna Incoming Webhook Trigger.
- Ställ in HTTP Method på
POST. - Ställ in Path på
github-push. - I GitHub skapar ni en webhook som pekar till n8n-webhook-URL:en för Incoming Webhook Trigger.
Steg 2: anslut Jira och GitHub
Konfigurera Jira- och GitHub-noderna som hämtar ärenden och skapar eller identifierar pull requests.
- Öppna Retrieve Task Info for PR och ställ in Issue Key till
={{ $('Validate PR Flags').item.json.jiraKey }}. - Öppna Retrieve Task Info No PR och ställ in Issue Key till
={{ $json.jiraKey }}. - Öppna Set Task Status After PR och ställ in Issue Key till
={{ $('Retrieve Task Info for PR').item.json.key}}samt Status tillDevelopment Done(statusId61). - Öppna Set Task Status No PR och ställ in Issue Key till
={{ $json.key }}samt Status tillDevelopment Done(statusId61). - Öppna Create Pull Request och bekräfta att URL är
=https://api.github.com/repos/{{ $('Incoming Webhook Trigger').item.json.body.repository.owner.name }}/{{ $('Incoming Webhook Trigger').item.json.body.repository.name }}/pulls. - Öppna Lookup PR Presence och bekräfta att URL är
=https://api.github.com/repos/{{ $('Incoming Webhook Trigger').item.json.body.repository.owner.name }}/{{ $('Incoming Webhook Trigger').item.json.body.repository.name }}/pulls?head={{ $('Incoming Webhook Trigger').item.json.body.repository.owner.name }}:{{ $('Parse Commit Instructions').item.json.pushBranch }}. - Inloggning krävs: Anslut era Jira-inloggningsuppgifter till Retrieve Task Info for PR, Retrieve Task Info No PR, Set Task Status After PR och Set Task Status No PR.
- Inloggning krävs: Anslut era GitHub API-inloggningsuppgifter till Create Pull Request och Lookup PR Presence.
Steg 3: sätt upp logik för commit-parsning och validering
Parsa commit-meddelandet för att extrahera Jira-nyckel, PR-flaggor och branch-info, och routa därefter baserat på flaggorna.
- Öppna Parse Commit Instructions och bekräfta att Mode är
runOnceForEachItemsamt att JavaScript-koden extraherarjiraKey,commitDescription,baseBranch,autoPRochtaskCompleted. - I Validate PR Flags bekräftar ni att villkoret kontrollerar att
={{ $json.autoPR.toString() }}är lika medtrue. - I Verify Task Done Flag bekräftar ni att villkoret kontrollerar att
={{ $json.taskCompleted.toString() }}är lika medtrue. - I Confirm Task Exists PR bekräftar ni att villkoren kontrollerar att
={{$('Retrieve Task Info for PR').item.json.id}}finns och att={{ $('Parse Commit Instructions').item.json.taskCompleted.toString() }}är lika medtrue. - I Confirm Task Exists No PR bekräftar ni att villkoren kontrollerar att
={{ $json.id }}finns och att={{ $('Parse Commit Instructions').item.json.taskCompleted.toString() }}är lika medtrue.
ABC-123 Fix login issue [auto-pr, main, taskcompleted].Steg 4: konfigurera PR-detektering, skapande och routing
Hantera logiken för PR-branchen, detektera befintliga PR:er och skapa nya PR:er vid behov.
- Gå igenom Transform PR Lookup Data för att säkerställa att den returnerar
prExistssomtrueellerfalsebaserat på GitHub-resultat. - Bekräfta att Detect Existing PR kontrollerar att
={{ $json.prExists.toString()}}är lika medtrue. - Öppna Combine PR Streams och ställ in Mode till
chooseBranchför att routa antingen grenen med befintlig PR eller flödet för att skapa en ny PR. - I Create Pull Request bekräftar ni att JSON Body använder:
- title:
{{$('Parse Commit Instructions').item.json.jiraKey}} {{$('Parse Commit Instructions').item.json.commitDescription}} - head:
{{$('Parse Commit Instructions').item.json.pushBranch}} - base:
{{$('Parse Commit Instructions').item.json.baseBranch}} - body:
Auto Generated PR for Jira Task {{$('Parse Commit Instructions').item.json.jiraKey}}
- title:
- Lookup PR Presence skickar utdata parallellt till både Transform PR Lookup Data och Combine PR Streams.
Steg 5: konfigurera aviseringar i Slack och Notion
Skicka uppdateringar till Slack och lägg till uppdateringar i Notion efter att Jira-status har ändrats.
- I Post Slack With PR ställer ni in Text till
=PR has been created for the repository '{{ $('Incoming Webhook Trigger').item.json.body.repository.name }}' and task status of the task {{ $('Retrieve Task Info for PR').item.json.key }} has been changed to development doneoch väljer er Channel. - I Post Slack Without PR ställer ni in Text till
=Task status of the task {{ $('Retrieve Task Info No PR').item.json.key }} has been changed to development doneoch väljer er Channel. - I Append Notion With PR ställer ni in Block ID till er Notion-URL och bekräftar att texten innehåller
{{ $('Incoming Webhook Trigger').item.json.body.repository.name }}och{{ $('Retrieve Task Info for PR').item.json.fields.parent.key }}. - I Append Notion Without PR ställer ni in Block ID till er Notion-URL och bekräftar att texten innehåller
{{ $('Retrieve Task Info No PR').item.json.key }}. - Set Task Status After PR skickar utdata parallellt till både Post Slack With PR och Append Notion With PR.
- Set Task Status No PR skickar utdata parallellt till både Post Slack Without PR och Append Notion Without PR.
- Inloggning krävs: Anslut era Slack OAuth2-inloggningsuppgifter till Post Slack With PR och Post Slack Without PR.
- Inloggning krävs: Anslut era Notion-inloggningsuppgifter till Append Notion With PR och Append Notion Without PR.
Steg 6: lägg till felhantering
Stoppa exekveringen kontrollerat när commit-meddelandet eller ärendeflaggorna är ogiltiga.
- Säkerställ att Stop on Invalid Commit är ansluten till false-utgången från Verify Task Done Flag.
- Säkerställ att Halt on Missing Task är ansluten till false-utgångarna från Confirm Task Exists PR och Confirm Task Exists No PR.
- Granska felmeddelandena i Stop on Invalid Commit och Halt on Missing Task för att bekräfta att de matchar den felutdata ni vill ha.
Steg 7: testa och aktivera ert arbetsflöde
Verifiera end-to-end-flödet och slå på arbetsflödet för produktion.
- Klicka på Execute Workflow och skicka en GitHub push-händelse till URL:en för Incoming Webhook Trigger.
- Bekräfta att arbetsflödet routar korrekt: Parse Commit Instructions parsar meddelandet och Validate PR Flags/Verify Task Done Flag väljer rätt gren.
- Verifiera att det fungerar: om en PR skapas så lyckas Create Pull Request och Jira-uppdateringarna körs i Set Task Status After PR; om ingen PR skapas så uppdaterar Set Task Status No PR Jira.
- Kontrollera aviseringarna i Slack och Notion för att bekräfta meddelanden från Post Slack With PR/Post Slack Without PR och Append Notion With PR/Append Notion Without PR.
- När ni är nöjda, växla arbetsflödet till Active för produktionsanvändning.
Felsökningstips
- GitHub-autentisering behöver behörigheter på repo-nivå för att skapa PR:er. Om PR:er inte går att skapa, kontrollera först token-scopes i din n8n GitHub-auth.
- Jira-statusuppdateringar misslyckas oftast för att status-ID:t inte matchar projektets workflow. Öppna noderna ”Set Task Status” i Jira och välj statusen på nytt i dropdownen så att ID:t uppdateras.
- Slack-meddelanden kan misslyckas utan att det syns om appen inte får posta i vald kanal. Verifiera kanalvalet i Slack-noderna och bekräfta att appen är inbjuden till kanalen.
Snabba svar
Räkna med cirka 45 minuter om du redan har åtkomst till GitHub, Jira och Slack.
Nej. Du kopplar mest konton, klistrar in en webhook-URL i GitHub och väljer rätt Jira-statusar.
Ja. n8n har ett gratis self-hosted-alternativ 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å ta hänsyn till begränsningar i Jira/GitHub/Slack-planer, men det här workflowet lägger inte till AI-kostnader per förfrågan.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serveradministration.
Ja, och det borde du förmodligen. Du kan justera reglerna i steget ”Parse Commit Instructions” för att matcha era commit-konventioner, och du kan ändra PR-beteendet genom att redigera HTTP-request-body för ”Create Pull Request”. Vanliga justeringar är att tvinga en enda bas-branch (som develop), att hoppa över PR-skapande helt för hotfix-commits och att byta ut Notion-uppdateringar mot e-post eller Microsoft Teams.
För det mesta beror det på saknade behörigheter. Säkerställ att din GitHub-token (eller OAuth-anslutning) kan läsa repot och skapa pull requests, och testa sedan om ”Create Pull Request”-förfrågan. Om det fungerar i ett repo men inte i ett annat, kontrollera att webhooken är installerad på rätt repo och att eventet är satt till ”push”. Rate limiting kan också dyka upp i aktiva orgs, så att glesa ut körningar eller minska dubblett-uppslag av PR:er hjälper.
På n8n Cloud Starter kan du räkna med att det hanterar typisk småteam-volym utan problem, och högre planer täcker fler körningar. Om du self-hostar finns ingen körningsgräns (det beror på din server). I praktiken blir varje push oftast en körning, så ett team som gör några hundra pushar per dag är fortfarande lugnt så länge Jira- och Slack-API:erna inte blir strypta.
Ofta, ja. Det här workflowet bygger på förgreningslogik (PR-spår vs inget PR-spår, ”done” vs ”invalid commit”), flera valideringar och några skyddsräcken som blir klumpiga i tvåstegs-automationer. n8n ger dig också self-hosting med obegränsade körningar, vilket spelar roll när du kopplar detta till många repo. Zapier eller Make kan vara enklare för en grundläggande ”push → Slack-meddelande”, men de blir tröga när du behöver Jira status-ID:n, kontroller att ärenden finns och detektering av dubblett-PR:er. Om du är osäker, prata med en automationsexpert och beskriv antal repo och ert Jira-workflow.
När detta väl rullar slutar Jira-uppdateringar att vara en ”någon borde göra det”-uppgift. Teamet levererar kod, workflowet sköter admin, och du får bättre överblick utan extra brus.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.