Tworzenie projektów, projektowanie flows, skryptowanie i administracja to na pewno jedne z ulubionych czynności wielu administratorów Jira. Ale od czasu do czasu każda instancja potrzebuje również porządków. Aby mieć pewność, że aplikacja ma się dobrze, zaplanuj rutynowe zadania administracyjne. W niniejszym poście przedstawiam checklistę, z którą cykliczne sprzątanie stanie się łatwiejsze.
Podczas przygotowywania listy natknąłem się na świetny artykuł na ten sam temat. Oddaje zatem w Wasze ręce mieszankę wiedzy ekspertów Atlassiana oraz mojego doświadczenia. Jeśli natomiast macie swoje sposoby na dbanie o kondycję Jira, podzielcie się w komentarzu!
1. Integrity checker
2. Mail queue
3. Resolutions
4. Nieużywane projekty
5. Nieaktywni użytkownicy
6. Nieużywane elementy
7. Nieużywane customfieldy
8. Upgrade
Przygotowania
- umieść Annoucement Banner. Jeśli Twoje prace będą miały wpływ na środowisko produkcyjne, należy poinformować użytkowników.
- dodaj swój adres do listy odbiorców na YOUR_JIRA_URL/plugins/servlet/troubleshooting/view/ -> Log Analyzer -> Periodic scan. Od tej pory będziesz dostawać raporty na podstawie cyklicznych skanów logów Jira<./li>
- twórz cykliczne zadanie na prace rutynowe w Jira (możesz tą czynność zautomatyzować np. za pomocą skryptu).
1. Integrity checker
W miarę używania Jira, niektóre elementy będą wymagały sprawdzenia pod kątem spójności. Pomogą tu tzw. Integrity Checkers, które zweryfikują m.in. takie obszary jak statusy, workflows, permissions etc. Przy większych instancjach warto uruchomić checkery osobno, aby uniknąć błędów typu timeout.
2. Mail (errors) queue
Jeśli nie monitorujesz kolejki mailowej Jira, powinieneś od czasu do czasu sprawdzić ją ręcznie. W przypadku gdy znajdują się w niej jakieś wiadomości, może to być objaw błędnej konfiguracji. Kolejkę możesz podejrzeć otwierając menu administratora („.” lub „gg” na klawiaturze) i wpisując „mail queue” -> „errors”.
3. Resolutions
Pamiętaj, że dopóki wartość pola Resolution jest pusta dla zadania, jest ono traktowane jako otwarte. Należy tu sprawdzić następujące przypadki.
- Pole Resolution jest puste mimo, że zadanie jest zakończone. Aby namierzyć taką anomalię, możesz użyć następującego jql’a:
statusCategory = Done and resolution is EMPTY
Jeśli w Twojej Jira istnieje kilka statusów w kategorii „Done”, a nie wszystkie z nich są ostatnimi w workflow, należy w jql użyć konkretnych nazw, np:
status = Closed and resolution is EMPTY
Jeśli filtr zwróci jakieś zadania, znaczy to, że workflows potrzebują poprawki. Ostatnia ich tranzycja powinna ustawiać wartość pola Resolution za pomocą Resolve Issue Screen albo postfunkcji.
- Pole Resolution jest ustawione mimo, iż zadanie jest otwarte.
resolution is not EMPTY and statusCategory in ("To Do", "In Progress")
Ja to naprawić? Za każdym razem, gdy zadanie jest otwierane (wychodzi ze statusu kończącego), pole Resolution powinno być czyszczone (np. za pomocą postfunkcji).
4. Nieużywane projekty
Kolejnym sposobem na utrzymanie Jira w dobrej formie jest archiwizacja nieużywanych projektów. O ile taka opcja dostępna jest z definicji w Jira Cloud, o tyle Jira Server wymaga przygotowania. Możesz na przykład utworzyć specjalny Permission scheme, który ogranicza dostęp do zarchiwizowanego projektu jedynie do grona administratorów. Wówczas zadania z takich projektów nie będą pojawiać się w wynikach wyszukiwania dla innych użytkowników. Warto również utworzyć osobną kategorię projektową, np. „Archived Projects”. Załóżmy, że oba kroki zostały już wykonane. Jak zdecydować który projekt ma być zarchiwizowany jako kolejny?
"Project category" != "Archived projects" ORDER BY key ASC, updated DESC
Jeśli ostatnia aktualizacja w zadaniach (Updated) w danym projekcie była, powiedzmy, rok temu, jest to dobry kandydat do zarchiwizowania.
Pluginy, które mogą pomóc
Project Archiver for Jira
Cleaner for Jira
5. Nieaktywni użytkownicy
Oszczędzaj licencje! Zwykle nie ma powodu, aby przechowywać nieużywane konta jako aktywne. Poniższy SQL wyświetli wszystkich aktywnych użytkowników posortowanych po dacie ostatniego logowania.
SELECT d.directory_name AS "Directory", u.user_name AS "Username", u.active AS "Active", u.email_address AS "E-mail", to_timestamp(CAST(attribute_value AS BIGINT)/1000) AS "Last Login" FROM cwd_user u JOIN ( SELECT DISTINCT child_name FROM cwd_membership m JOIN licenserolesgroup gp ON m.parent_name = gp.GROUP_ID ) AS m ON m.child_name = u.user_name JOIN ( SELECT * FROM cwd_user_attributes ca WHERE attribute_name = 'login.lastLoginMillis' ) AS a ON a.user_id = u.id JOIN cwd_directory d ON u.directory_id = d.id where u.active=1 ORDER BY "Last Login" ASC;
Więcej szczegółów oraz zapytań SQL w tym temacie znajdziecie tu.
Pluginy, które mogą pomóc
User Deactivator for Jira
Active User Filter
User Management for Jira
Cleaner for Jira
6. Nieużywane elementy
Zapomniane ekrany? Porzucone workflow`y? Każdy schemat posiada sekcję „inactive”, gdzie możesz znaleźć elementy, które nie są powiązane z żadnym projektem. Jeśli nie czekają one na wykorzystanie w lepszych czasach, zwykle można je bezpiecznie usunąć. Przejdź do menu administratora i wpisz schemat, który Cię interesuje. Elementy, które warto sprawdzić:
- Workflows & Workflow Schemes
- Screens, Screen Schemes & Issue Type Screen Schemes
- Issue type schemes
- Permission schemes
- Notification Schemes
Zauważ, że aby usunąć screen nie może on być powiązany z żadnym Screen Scheme. Ten z kolei nie może być częścią Issue Type Screen Scheme, a ten ostatni nie może być przypisany do projektu. Dla workflows konfiguracja wygląda podobnie.
7. Nieużywane customfieldy
Poniższy filtr zwróci parametry customfieldów (names, ids, amount), przy czy ostatnie pole to ilość zadań, gdzie dany customfield ma przypisaną wartość.
SELECT CF.cfname, CF.id, count(CV.ISSUE) FROM customfield CF join customfieldvalue CV on CF.ID = CV.CUSTOMFIELD group by CF.id order by count;
Możemy wybrać te, które nie mają uzupełnionej żadnej wartości w Jira i usunąć je. Pamiętaj, aby sprawdzić czy pole nie jest wykorzystywane w miejscach takich, jak Dashboards, JQL Filters, Screens i Workflows (a także w skryptach). Załóżmy, że pole które chcemy usunąć nazywa się Team i ma id=10000. Zapytania JQL będą wyglądały następująco:
Dashboards and gadgets
SELECT * FROM gadgetuserpreference INNER JOIN portletconfiguration ON portletconfiguration.id = gadgetuserpreference.portletconfiguration INNER JOIN portalpage ON portalpage.id = portletconfiguration.portalpage WHERE userprefvalue LIKE '%10000'
Filters
select * from searchrequest s where s.reqcontent like '%Team%' or s.reqcontent like '%cf[100000]%'
Screens
SELECT cf.id, fsli.fieldidentifier, cf.cfname, fs.name, fst.name FROM fieldscreenlayoutitem fsli INNER JOIN fieldscreentab fst ON fsli.fieldscreentab = fst.id INNER JOIN fieldscreen fs ON fst.fieldscreen = fs.id INNER JOIN customfield cf ON fsli.fieldidentifier = 'customfield_' || cf.id::text WHERE fsli.fieldidentifier LIKE '%customfield_100000%'
Workflows
select * from jiraworkflows wf where wf.descriptor like '%customfield_100000%';
Pluginy, które mogą pomóc
Custom Fields Usage for Jira
Admin Tools for Jira
Cleaner for Jira
8. Upgrade
Upgrade aplikacji
Przejdź do sekcji Manage Apps i sprawdź które pluginy wymagają aktualizacji. Twoja checklista:
- sprawdź ważność licencji
- zapoznaj się z upgrade/release notes aplikacji
- (opcjonalnie) usuń cache pluginów po aktualizacji
- Zatrzymaj Jira
- Usuń katalogi JIRA_HOME/plugins/.bundled-plugins oraz JIRA_HOME/plugins/.osgi-plugins
- Włącz Jira
Upgrade Jira
Z procedurą możecie zapoznać się w tym artykule.
Powodznia! Komentarze i sugestie mile widziane:)