설명 없음

Krisztian Mezei c5db43aeed README update 3 주 전
README.md c5db43aeed README update 3 주 전
teszt.txt 73247502cb TP-1 first ticket 3 주 전
versions.txt be02f46b06 TP-1 first ticket 3 주 전

README.md

Git hook – Jira automatikus frissítés

Mi ez és mire jó?

Amikor fejlesztés közben git pull parancsot futtatunk, a beérkező commitok üzenetéből automatikusan kiszedi a Jira ticket azonosítókat, beállítja a Fix Version mezőt, és átmozgatja a ticketeket a kiadásra_kész oszlopba.

A commit üzenetek formátuma:

TP-1 Modulok összeszinkronizálása - Staging környezetben

Hogyan működik?

A Git hook egy script, amely automatikusan lefut egy Git művelet előtt vagy után. Ebben az esetben a post-merge hookot használjuk, amely minden git pull után lefut.

A script lépései:

  1. Beolvassa a verziószámot a versions.txt fájlból
  2. Létrehozza a verziót a Jirában ha még nem létezik
  3. Lekéri az új commitok üzeneteit – csak azokat, amelyek a pull során érkeztek be
  4. Kiszedi a Jira ticket ID-kat – a TP projekt ticket azonosítóit (pl. TP-1)
  5. Beállítja a Fix Version mezőt minden érintett ticketen
  6. Átmozgatja a ticketeket a kiadásra_kész oszlopba

A script

#!/bin/bash

JIRA_BASE="https://urbanms.atlassian.net"
JIRA_USER="mezei.krisztian@urbanms.hu"
JIRA_PROJECT="TP"
JIRA_PROJECT_ID="10138"
AUTH="-u ${JIRA_USER}:${JIRA_API_TOKEN}"

# Verziószám beolvasása
VERSIONS_FILE="$(git rev-parse --show-toplevel)/versions.txt"

if [ ! -f "$VERSIONS_FILE" ]; then
  echo "⚠️  Nem található: versions.txt"
  exit 1
fi

VERSION=$(cat "$VERSIONS_FILE" | tr -d '[:space:]')
echo "📦 Verzió: $VERSION"

# Verzió létrehozása ha még nem létezik
echo "🔧 Verzió ellenőrzése a Jirában..."
CREATE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $AUTH \
  -X POST -H "Content-Type: application/json" \
  "${JIRA_BASE}/rest/api/3/version" \
  -d "{
    \"name\": \"${VERSION}\",
    \"projectId\": ${JIRA_PROJECT_ID},
    \"released\": false
  }")

if [ "$CREATE_RESPONSE" = "201" ]; then
  echo "  ✅ Verzió létrehozva: $VERSION"
elif [ "$CREATE_RESPONSE" = "409" ]; then
  echo "  ℹ️  Verzió már létezik: $VERSION"
else
  echo "  ⚠️  Verzió létrehozás hiba ($CREATE_RESPONSE)"
fi

# Ticket ID-k kiszedése (csak TP projekt)
TICKETS=$(git log ORIG_HEAD..HEAD --pretty="%s" | grep -oE 'TP-[0-9]+' | sort -u)

if [ -z "$TICKETS" ]; then
  echo "Nem találtam TP ticket ID-t a commitokban."
  exit 0
fi

echo "Érintett Jira ticketek:"
for TICKET in $TICKETS; do
  echo "  - $TICKET"

  # Fix Version beállítása
  curl -s -o /dev/null $AUTH \
    -X PUT -H "Content-Type: application/json" \
    "${JIRA_BASE}/rest/api/3/issue/${TICKET}" \
    -d "{\"fields\": {\"fixVersions\": [{\"name\": \"${VERSION}\"}]}}"

  # Átállítás → kiadásra_kész (transition ID: 51)
  RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $AUTH \
    -X POST -H "Content-Type: application/json" \
    "${JIRA_BASE}/rest/api/3/issue/${TICKET}/transitions" \
    -d '{"transition": {"id": "51"}}')

  if [ "$RESPONSE" = "204" ]; then
    echo "    ✅ Fix Version: $VERSION → kiadásra_kész"
  else
    echo "    ⚠️  Hiba ($RESPONSE)"
  fi
done

A versions.txt fájl

A repo gyökerében legyen, és csak a verziószámot tartalmazza:

v1.1.1

Transition ID-k (TP projekt)

ID Kanban oszlop
11 Backlog
21 Selected for Development
31 In Progress
51 kiadásra_kész
41 Done

Beállítás lépései

1. Lépj be a git repóba

cd mezeik_teszt

2. Hozd létre a .githooks mappát

mkdir -p .githooks

3. Hozd létre a hook fájlt

nano .githooks/post-merge

Illeszd be a fenti scriptet, majd mentés: Ctrl+O, kilépés: Ctrl+X

4. Tedd futtathatóvá

chmod +x .githooks/post-merge

5. Állítsd be a Git hookpath-t

git config core.hooksPath .githooks

6. API token létrehozása

  1. Menj ide: https://id.atlassian.com/manage-profile/security/api-tokens
  2. Kattints a Create API token gombra
  3. Adj meg egy nevet (pl. git-hook)
  4. Kattints a Create gombra
  5. Másold ki azonnal – később nem lesz látható!

⚠️ Fontos: Az Atlassian API token meghatározott ideig érvényes (alapértelmezetten 1 év), utána lejár. Ha a hook hirtelen 401 vagy 403 hibával tér vissza, valószínűleg lejárt a token – ilyenkor új tokent kell generálni és frissíteni a .bashrc-ben.

7. API token beállítása

echo 'export JIRA_API_TOKEN="ide_a_tokened"' >> ~/.bashrc
source ~/.bashrc

Token lejártakor csak frissítsd az értéket:

nano ~/.bashrc   # keresd meg a JIRA_API_TOKEN sort és írd felül
source ~/.bashrc

7. Ellenőrzés

git config core.hooksPath   # → .githooks
ls -l .githooks/             # → post-merge látható
echo $JIRA_API_TOKEN         # → token értéke

Tesztelés

# Teszt commit létrehozása
git commit --allow-empty -m "TP-1 teszt commit"

# Pull futtatása (hook automatikusan lefut)
git pull

Várt eredmény a konzolon:

📦 Verzió: v1.1.1
🔧 Verzió ellenőrzése a Jirában...
  ℹ️  Verzió már létezik: v1.1.1
Érintett Jira ticketek:
  - TP-1
    ✅ Fix Version: v1.1.1 → kiadásra_kész

Fontos tudnivalók

  • A .githooks mappa nem szinkronizálódik automatikusan a remote repóval – minden fejlesztőnek egyenként kell beállítania
  • Ha a .githooks mappát a repóba szeretnéd verziókövetni, add hozzá a commithoz:

    git add .githooks/
    git commit -m "Git hookok hozzáadása"
    

    Ezután minden fejlesztő csak ennyit futtat a klónozás után:

    git config core.hooksPath .githooks
    
  • A kötelező mezők (pl. custom field) API-n keresztül is ki kell tölteni, különben a ticket frissítés hibával tér vissza