Popular Categories

/home/ras0ir

there are no girls on the internet

JIRA 5.x’den Redmine proje yönetim sistemine geçiş

Uzun zamandır blogum başıboş duruyor. Bu sessizliğe son vermek amacıyla oturup JIRA’dan Redmine’a nasıl veri aktarılır, buna ilişkin bir yazı yazayım dedim. Öncelikle TL;DR kesimi için uyarımı yapayım, bu yazıda JIRA ve Redmine karşılaştırması yer almıyor.

Çalıştığınız kurumda altyapınızı değiştirmek isteyebilirsiniz veya özgür yazılımlara doğru yelken açmak isteyebilir ve özgür yazılım dünyasının başarılı ve kaliteli ürünlerini kullanmayı da tercih edebilirsiniz. Redmine proje yönetim sistemi de bu konuda oldukça gelişmiş bir yazılım. Esnekliği ve özelleştirilebilir olması nedeniyle çoğu firma ve özgür yazılım projesi de Redmine tercih ediyor.

Gelelim yazı başlığına. Jira 5.x kurulumunuz var ve bunu Redmine 2.x serisi bir sürüme geçirmek istiyorsunuz. Bu geçiş esnasında da mümkünse en az kayıpla geçmek istiyorsunuz. Böyle bir durumda sağolsun Redmine kullanıcıları bir araya gelip meşhur #1385 işi altında tartışmaya başlamışlar ve sonuç olarak migrate_jira isimli rake task’ı yazmışlar. Ben üzerinde biraz oynayıp 5.x ile uyumlu hale getirdim.

Geçiş yapabilmek için bir ön hazırlık yapmanız gerekiyor. Öncelikle JIRA tarafında “tam” bir sistem yedeğine ihtiyacınız var. JIRA’dan yedek alabilmek için şu işlemleri gerçekleştirin:

1. Jira’ya admin hesabıyla login olun.
2. Administration menüsüne girin.
3. Administration menüsünde System sekmesinde Import & Export linkine
tıklayın.
4. Açılan sayfada Backup System isimli bir sekme bulunuyor, o sekmeye gelin.
Sizden oluşturulacak dosyanın ismini isteyecektir. Oraya herhangi bir isim
yazın. Oluşturulan yedek dosyasının konumunu gösterecektir. (zip dosyası oluşturuyor.)

Aldığınız zip dosyası içerisinde entities.xml isimli bir dosya var ve bize lazım olan dosya da bu. İçerisinde proje, kullanıcı, dosya ekleri bilgileri vb. bilgiler yer alıyor. entities.xml dosyasını alıp Redmine’ın ana dizinine backup_jira.xml ismiyle koyun.

Daha sonra şu gist‘teki kodu Redmine içerisinde yer alan lib/tasks dizini altına migrate_jira.rake ismiyle yerleştirin.

Bu işlemleri tamamladıktan sonra Redmine servisini durdurun ve aşağıdaki komutları uygulayın:

1. Öncelikle rake task dosyasını doğru yerleştirdiniz mi ondan emin olun. Bunun için şu komutu verebilirsiniz:

RAILS_ENV=production bundle exec rake -T

Komut çalıştıktan sonra uzunca bir rake task listesi verecektir. Listede şu öğelerin geçtiğinden emin olun:


rake jira_migration:do_all_migrations # Tests all parsers!
rake jira_migration:generate_conf # Generates the configuration for the map things from Jira to Redmine
rake jira_migration:migrate_attachments # Migrates Jira Issues Attachments to Redmine Attachments
rake jira_migration:migrate_comments # Migrates Jira Issues Comments to Redmine Issues Journals (Notes)
rake jira_migration:migrate_issue_priorities # Migrates Jira Issue Priorities to Redmine Priorities
rake jira_migration:migrate_issue_status # Migrates Jira Issue Status to Redmine Status
rake jira_migration:migrate_issue_types # Migrates Jira Issue Types to Redmine Trackes
rake jira_migration:migrate_issues # Migrates Jira Issues to Redmine Issues
rake jira_migration:migrate_projects # Migrates Jira Projects to Redmine Projects
rake jira_migration:migrate_users # Migrates Jira Users to Redmine Users
rake jira_migration:pre_conf # Gets the configuration from YAML
rake jira_migration:test_all_migrations # Tests all parsers!
rake jira_migration:test_parse_comments # Just pretty print Jira Comments on screen
rake jira_migration:test_parse_issues # Just pretty print Jira Issues on screen
rake jira_migration:test_parse_projects # Just pretty print Jira Projects on screen
rake jira_migration:test_parse_users # Just pretty print Jira Users on screen

Eğer bu çıktıyı almıyorsanız, bir yerde bir hata yapıyorsunuz demektir, lütfen başa dönün ve işlemleri tekrar uygulayın.

Bu çıktıyı alıyorsanız taşıma işine başlayabilirsiniz. Her şeyi tek bir seferde aktarmak için do_all_migrations task’ını çalıştırabilirsiniz.

RAILS_ENV=production bundle exec rake jira_migration:do_all_migrations

Bu arada RAILS_ENV değişkenini her seferinde vermek zorunda değilsiniz, export ederek oturum boyunca geçerli olmasını sağlayabilirsiniz. Ben zaman zaman development mode’a da aldığım için değişkenin kalıcı olmasını pek tercih etmiyorum.

do_all_migrations task’ını ilk çalıştırdığınızda map_jira_to_redmine.yml isimli bir dosya oluşacak. Burada JIRA’daki tracker, durum ve öncelik kayıtlarının Redmine karşılığı isteniyor sizden. Bu dosyayı kendi Redmine kurulumunuza göre düzenleyin. Sol taraftaki değerler JIRA’daki tracker isimlerini, sağ taraftakiler ise bunların Redmine’daki karşılıklarını ifade ediyor. Örnek bir map_jira_to_redmine.yml dosyası şu şekilde:


---
types:
Bug: Bug
New Feature: Feature
Task: Task
Improvement: Feature
Sub-task: Sub-tasks
Admin: Feature
status:
Open: New
In Progress: In Progress
Reopened: Assigned
Resolved: Resolved
Closed: Closed
priorities:
Blocker: Immediate
Critical: Urgent
Major: High
Minor: Normal
Trivial: Low

do_all_migrations çalıştığında bu dosyayı sizin yerinize zaten düzenlemiş oluyor, eksiklikleri ise sizin gidermeniz lazım.

Dosyayı düzenledikten sonra tekrar aynı task’ı çalıştırın.

RAILS_ENV=production bundle exec rake jira_migration:do_all_migrations

Bundan sonra işlem başlayacak ve sırasıyla kullanıcıları, projeleri, iş kayıtlarını, iş kaydına yapılan yorumları ve iş kaydına eklenen dosyaları Redmine’a aktaracak. (Dosyaların sadece tanımını yapıyor, jira’nın attachments dizini altındaki dosyaların hepsini Redmine dizini altındaki files dizinine koymanız yeterli. Bu işlemi elle yapmanızın nedeni jira’nın backup alırken dosya eklerini backup içerisine koymaması)

migration task’ı projenizin ölçeğine göre zaman alabilir. 4000 iş kaydına sahip bir sistemin jira’sını Redmine’a dönüştürmem 2 gb ram’i core 2 duo işlemcisi olan bir sanal makinede yaklaşık yarım saat sürdü.

Diğer taraftan, Atlassian her yeni sürümde JIRA’nın backup yapısını değiştirebiliyor (acaba neden?), bu nedenle yukarıdaki rake task en yeni sürümlerde çalışmayabilir. Bu yüzden #1385’i ve github’ta şu güzel projeyi takip etmenizde fayda var.

Not düşeyim, ben yukarıdaki bilgileri kullanarak 5.0.4 ve 5.0.6 kullanan JIRA’ları Redmine 2.2.3’e sorunsuzca geçirebildim. Henüz 2.3 serisinde denemedim ancak çalışmaması için bir engel göremiyorum.

  • http://nyucel.com necdet yucel

    618 satır kodu bloga olduğu gibi yapıştırmak iyi olmamış. Keşke bu kodu bir yere koysaydin da linkini verseydin.

  • ras0ir

    Düzelttim, teşekkürler.