|
@@ -1,13 +1,12 @@
|
|
|
-
|
|
|
|
|
# Git hook – Jira automatikus frissítés
|
|
# Git hook – Jira automatikus frissítés
|
|
|
|
|
|
|
|
## Mi ez és mire jó?
|
|
## 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, és kilistázza őket a konzolon.
|
|
|
|
|
|
|
+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:
|
|
A commit üzenetek formátuma:
|
|
|
```
|
|
```
|
|
|
-BBUSAPPBE-496 Modulok összeszinkronizálása - Staging környezetben
|
|
|
|
|
|
|
+TP-1 Modulok összeszinkronizálása - Staging környezetben
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
---
|
|
---
|
|
@@ -16,11 +15,14 @@ BBUSAPPBE-496 Modulok összeszinkronizálása - Staging környezetben
|
|
|
|
|
|
|
|
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 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 három lépésben dolgozik:
|
|
|
|
|
|
|
+A script lépései:
|
|
|
|
|
|
|
|
-1. **Lekéri az új commitok üzeneteit** – csak azokat, amelyek a pull során érkeztek be
|
|
|
|
|
-2. **Kiszedi a Jira ticket ID-kat** – nagybetűk + kötőjel + szám formátum alapján (pl. `BBUSAPPBE-496`)
|
|
|
|
|
-3. **Kiírja a konzolra** az érintett ticketeket
|
|
|
|
|
|
|
+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
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
@@ -29,26 +31,94 @@ A script három lépésben dolgozik:
|
|
|
```bash
|
|
```bash
|
|
|
#!/bin/bash
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
-TICKETS=$(git log ORIG_HEAD..HEAD --pretty="%s" | grep -oE '[A-Z]+-[0-9]+' | sort -u)
|
|
|
|
|
|
|
+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}"
|
|
|
|
|
|
|
|
-if [ -z "$TICKETS" ]; then
|
|
|
|
|
- echo "Nem találtam Jira ticket ID-t a commitokban."
|
|
|
|
|
|
|
+# 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
|
|
else
|
|
|
- echo "Érintett Jira ticketek:"
|
|
|
|
|
- for TICKET in $TICKETS; do
|
|
|
|
|
- echo " - $TICKET"
|
|
|
|
|
- done
|
|
|
|
|
|
|
+ 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
|
|
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
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-### A parancsok magyarázata
|
|
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## Transition ID-k (TP projekt)
|
|
|
|
|
|
|
|
-| Parancs | Mit csinál |
|
|
|
|
|
|
|
+| ID | Kanban oszlop |
|
|
|
|---|---|
|
|
|---|---|
|
|
|
-| `git log ORIG_HEAD..HEAD` | A pull által behozott új commitokat listázza |
|
|
|
|
|
-| `--pretty="%s"` | Csak a commit üzenetét adja vissza |
|
|
|
|
|
-| `grep -oE '[A-Z]+-[0-9]+'` | Megkeresi a Jira ticket formátumú szövegeket |
|
|
|
|
|
-| `sort -u` | Rendezi és eltávolítja a duplikátumokat |
|
|
|
|
|
|
|
+| `11` | Backlog |
|
|
|
|
|
+| `21` | Selected for Development |
|
|
|
|
|
+| `31` | In Progress |
|
|
|
|
|
+| `51` | kiadásra_kész |
|
|
|
|
|
+| `41` | Done |
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
@@ -86,11 +156,35 @@ chmod +x .githooks/post-merge
|
|
|
git config core.hooksPath .githooks
|
|
git config core.hooksPath .githooks
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-### 6. Ellenőrzés
|
|
|
|
|
|
|
+### 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
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+echo 'export JIRA_API_TOKEN="ide_a_tokened"' >> ~/.bashrc
|
|
|
|
|
+source ~/.bashrc
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Token lejártakor csak frissítsd az értéket:
|
|
|
|
|
+```bash
|
|
|
|
|
+nano ~/.bashrc # keresd meg a JIRA_API_TOKEN sort és írd felül
|
|
|
|
|
+source ~/.bashrc
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 7. Ellenőrzés
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
git config core.hooksPath # → .githooks
|
|
git config core.hooksPath # → .githooks
|
|
|
ls -l .githooks/ # → post-merge látható
|
|
ls -l .githooks/ # → post-merge látható
|
|
|
|
|
+echo $JIRA_API_TOKEN # → token értéke
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
---
|
|
---
|
|
@@ -99,7 +193,7 @@ ls -l .githooks/ # → post-merge látható
|
|
|
|
|
|
|
|
```bash
|
|
```bash
|
|
|
# Teszt commit létrehozása
|
|
# Teszt commit létrehozása
|
|
|
-git commit --allow-empty -m "BBUSAPPBE-506 teszt commit"
|
|
|
|
|
|
|
+git commit --allow-empty -m "TP-1 teszt commit"
|
|
|
|
|
|
|
|
# Pull futtatása (hook automatikusan lefut)
|
|
# Pull futtatása (hook automatikusan lefut)
|
|
|
git pull
|
|
git pull
|
|
@@ -107,8 +201,12 @@ git pull
|
|
|
|
|
|
|
|
Várt eredmény a konzolon:
|
|
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:
|
|
Érintett Jira ticketek:
|
|
|
- - BBUSAPPBE-506
|
|
|
|
|
|
|
+ - TP-1
|
|
|
|
|
+ ✅ Fix Version: v1.1.1 → kiadásra_kész
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
---
|
|
---
|
|
@@ -116,7 +214,7 @@ Várt eredmény a konzolon:
|
|
|
## Fontos tudnivalók
|
|
## Fontos tudnivalók
|
|
|
|
|
|
|
|
- A `.githooks` mappa **nem szinkronizálódik** automatikusan a remote repóval – minden fejlesztőnek egyenként kell beállítania
|
|
- 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 (hogy a csapat könnyen átvehesse), add hozzá a commithoz:
|
|
|
|
|
|
|
+- Ha a `.githooks` mappát a repóba szeretnéd verziókövetni, add hozzá a commithoz:
|
|
|
```bash
|
|
```bash
|
|
|
git add .githooks/
|
|
git add .githooks/
|
|
|
git commit -m "Git hookok hozzáadása"
|
|
git commit -m "Git hookok hozzáadása"
|
|
@@ -125,9 +223,4 @@ Várt eredmény a konzolon:
|
|
|
```bash
|
|
```bash
|
|
|
git config core.hooksPath .githooks
|
|
git config core.hooksPath .githooks
|
|
|
```
|
|
```
|
|
|
-
|
|
|
|
|
----
|
|
|
|
|
-
|
|
|
|
|
-## Következő lépés (opcionális)
|
|
|
|
|
-
|
|
|
|
|
-A script bővíthető úgy, hogy ne csak kiírja a ticketeket, hanem automatikusan **frissítse is a Jirát** – például átmozgassa a ticketeket a „Kiadásra" oszlopba, vagy beállítsa a Fix Version mezőt. Ehhez Jira API token szükséges.
|
|
|
|
|
|
|
+- 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
|