Миграция JIRA – безобразие
или безрассудство?
Никита Налютин
Experian Decision Analytics
Пару слов о себе
1996-2002 разработчик
1999 получил Excellence in
Computer Science Award
2002 пришел в тестирование
2002-2015 самолеты-трейдинг-
видео-банки…
2007 книга «Верификация ПО»,
издана при поддержке
2008 кандидат технических наук
2012- Тест-менеджер
Выступаю на SQA Days
2009-2015
Пару слов о себе
1996-2002 разработчик
1999 получил Excellence in
Computer Science Award
2002 пришел в тестирование
2002-2015 самолеты-трейдинг-
видео-банки…
2007 книга «Верификация ПО»,
издана при поддержке
2008 кандидат технических наук
2012- Тест-менеджер
Выступаю на SQA Days
2009-2014 с бородой
2015- без бороды
Предупреждение
В презентации есть
быдлокод (с багами)
и
XML
О чем будем говорить
• Миграция JIRA в крупной компании
• Какие процессы не видны с самого начала
• Какие подразделения вовлечены в процесс
• Как поковыряться во внутренностях JIRA
Как понять, что уже пора?
• Количество сбоев JIRA слишком велико
• Поддержка JIRA внешним вендором
дороже поддержки своими силами
• Нет возможности установить в JIRA нужные
расширения
• Настройки JIRA не соответствуют
внутреним политикам безопасности
Процесс в маленькой компании
го джира,
я создал
Процесс в средней компании
1 2 3
JIRA админ
Финансы
Закупки
Железо и софт
Пользователи
Энтерпрайз: бессмысленный и беспощадный
1 2 3 4 5 6 7 8 9 10 11 12
JIRA админ
PM
Принятие решений
Финансы
Закупки
Железо
Софт
Аутентификация
Файерволлы
Пентест
Вендор
Пользователи
Кто на самом деле вовлечен в
процесс миграции?
• Администратор JIRA
• Лица, принимающие решения
• Финансовый департамент
• Отдел закупок
• ИТ-департамент
– железо
– софт
• Отдел ИБ
– сетевые экраны
– аутентификация
– пентест
• Предыдущий вендор
Медленно и печально завершаем
отношения с вендором
• Предупреждаем о завершении отношений
только когда сами понимаем, что готовы
• Собираем все неоплаченные счета
• Определяем самую дешевую дату для
переноса
• Определяем процедуру
передачи данных
• Договариваемся о
времени реакции
Планирование внутренней
инфраструктуры: CAPEX
H/W CAPEX S/W CAPEX
Назначение Тип Цена сервера Цена диска Цена JIRA Цена СУБД Цена ОС
Прод Физ $$$$ $$$ $$$$ - $$
Тест VM $ $ $ - $$
Бэкап Физ $$ $$$$ - - -
Existing Server(s)? No
Existing Hardware? Yes
Location Datacenter
Server type Dev VMware
CPUs 1
Cores per
CPU
4
Memory 8GB
Operating system Windows 2008 R2 std 64-bit
Drive Size Tier Existing HW?Backup?
C: 40GB 1 (no mirror) No Yes
D: Data 25GB 1 (no mirror) No Yes
E: 28GB 1 (no mirror) No Yes
Users User 1
Monitoring None
Patching Contact User 2
Планирование внутренней
инфраструктуры: OPEX
Активности
Управление проектом
Технический консалтинг
Технические спецификации
Планирование аппаратного обеспечения
Планирование хранения
Администрирование БД
Мониторинг сервисов
Резервное копирование
Мониторинг безопасности
Тест на проникновение
Все это – минимум
на год вперед
Планирование внутренней
инфраструктуры: сеть и фаерволлы
MAIL RELAY
TCP
25
SVN VLAN
JIRA UAT
uat-jira.internal
JIRA Prod
prod-jira.internal
Internet
Jira update
Service
TCP
25
TCP
3690
Offices
10.0.0.0/8
TCP21,80,443,
3690
3389
atlassian .com
131.103.28.5
131.103.28.7
131.103.28.11
Внешняя аутентификация
• Защита от проникновения
• Соответствие
корпоративным стандартам
• Централизованное
управление доступом
• Необходимость в интеграции с внешним сервисом
• Нужно четко прописывать процесс управления аккаунтами
• Добавление пользователя может быть длительным
• Процедура входа в систему может стать неудобной
Препарируем Seraph
import javax.servlet.http.HttpServletRequest;
import com.atlassian.seraph.filter.PasswordBasedLoginFilter;
public class SSOFilter extends PasswordBasedLoginFilter {
private static final String httpHeaderName_userId = “remote-user";
@Override
protected UserPasswordPair extractUserPasswordPair(
HttpServletRequest request) {
String username = request.getHeader(httpHeaderName_userId);
if (username != null && username.trim().length() != 0) {
return new PasswordBasedLoginFilter.UserPasswordPair(
username, "DUMMY", false);
}
return null;
}
}
Препарируем Seraph
import java.security.Principal;
import com.atlassian.seraph.auth.*;
import com.atlassian.crowd.embedded.api.CrowdService;
import com.atlassian.jira.component.ComponentAccessor;
public class SSOAuthenticator extends DefaultAuthenticator {
private static final long serialVersionUID = 1L;
protected boolean authenticate(Principal user, String password)
throws AuthenticatorException {
return true;
}
protected Principal getUser(String username) {
return getCrowdService().getUser(username);
}
private CrowdService getCrowdService() {
return
(CrowdService)ComponentAccessor.getComponent(CrowdService.class);
}
}
Выкидываем родной ввод пароля
seraph-config.xml:
<authenticator class="com.company.jira.SSOAuthenticator"/>
web.xml:
<filter>
<filter-name>login</filter-name>
<filter-class>com.company.jira.SSOFilter</filter-class>
</filter>
jpm.xml:
Убираем login gadget
jira-config.properties:
jira.websudo.is.disabled = true
Перенос настроек проектов
• Переносим все проекты
• Удаляем их, оставляем только настройки
• Делаем бэкап
• Для каждого нового проекта создаем его с нуля
• Создаем такие же настройки как в старой
системе: workflow, roles, screens, …
• Переносим проекты по одному
Файлы экспорта под микроскопом
Версия JIRA
<OSPropertyString id="10037" value="6338"/>
Ненужные записи журнала аудита
<data tableName="AO_78C957_AUDITEVENTS">
<data tableName="AO_78C957_AUDITHINT">
<data tableName="AO_78C957_NOTIFICATION_HIST">
Версии плагинов
<PluginVersion id="10966" name="User Group Picker"
key="com.keplerrominfo.jira.plugins.usergrouppicker" version="2.6.4-J631"
created="2014-10-31 15:13:52.0"/>
<SequenceValueItem seqName="PluginVersion" seqId="10970"/>
Селекторы пользователей
<CustomField id="10011" customfieldtypekey="com.iamhuy.jira.plugin.issue-
alternative-assignee:userselectbox-customfield"
customfieldsearcherkey="com.iamhuy.jira.plugin.issue-alternative-
assignee:userpickerprojectrolesearcher" name="Internal contact"/>
Поэтапный перенос проектов
Сервер Жив? Клиент? Данные есть? Обновлен Миграция Проект Руководитель
P U да да запрошены 10.05.15 15.05.15 BEEF J. Doe
P нет да 30.04.15 25.04.15 02.05.15 CODE V. Pupkin
P да нет 01.05.15 30.04.15 asap COOL H. Grant
P нет нет 01.02.15 30.12.14 late DEAD V. Lenin
• Учим пользователей заранее
• Согласовываем дату переноса
• Объединяем проекты в волны
• Следим за изменениями на старом
сервере
• Спокойно относимся к переносам сроков
• Отслеживаем целостность данных
• Не забываем оповещать о переходе
Как убедиться, что все хорошо
• Не тестировать на production
• Делать повторный экспорт
• Сравнивать XML
• Сравнивать базы
• Проверять вручную самому
• Давать проверять пользователям
Полезные ссылки
• https://confluence.atlassian.com/display/JIRA064/Upgrading+JIRA
• https://confluence.atlassian.com/display/JIRA044/Advanced+JIRA+Configuration
• https://answers.atlassian.com/questions/296109/disable-jira-login-page-with-seraph-sso
• http://stackoverflow.com/questions/16273566/jira-5-2-seraph-sso-login-behind-reverse-proxy
Вопросы?
Я все еще
Никита Налютин
Задать вопросы можно
- здесь (навыки поиска не нужны)
- в соцсетях (умение искать пригодится)

Миграция JIRA - безобразие или безрассудство

  • 1.
    Миграция JIRA –безобразие или безрассудство? Никита Налютин Experian Decision Analytics
  • 2.
    Пару слов осебе 1996-2002 разработчик 1999 получил Excellence in Computer Science Award 2002 пришел в тестирование 2002-2015 самолеты-трейдинг- видео-банки… 2007 книга «Верификация ПО», издана при поддержке 2008 кандидат технических наук 2012- Тест-менеджер Выступаю на SQA Days 2009-2015
  • 3.
    Пару слов осебе 1996-2002 разработчик 1999 получил Excellence in Computer Science Award 2002 пришел в тестирование 2002-2015 самолеты-трейдинг- видео-банки… 2007 книга «Верификация ПО», издана при поддержке 2008 кандидат технических наук 2012- Тест-менеджер Выступаю на SQA Days 2009-2014 с бородой 2015- без бороды
  • 4.
  • 5.
    О чем будемговорить • Миграция JIRA в крупной компании • Какие процессы не видны с самого начала • Какие подразделения вовлечены в процесс • Как поковыряться во внутренностях JIRA
  • 6.
    Как понять, чтоуже пора? • Количество сбоев JIRA слишком велико • Поддержка JIRA внешним вендором дороже поддержки своими силами • Нет возможности установить в JIRA нужные расширения • Настройки JIRA не соответствуют внутреним политикам безопасности
  • 7.
    Процесс в маленькойкомпании го джира, я создал
  • 8.
    Процесс в среднейкомпании 1 2 3 JIRA админ Финансы Закупки Железо и софт Пользователи
  • 9.
    Энтерпрайз: бессмысленный ибеспощадный 1 2 3 4 5 6 7 8 9 10 11 12 JIRA админ PM Принятие решений Финансы Закупки Железо Софт Аутентификация Файерволлы Пентест Вендор Пользователи
  • 10.
    Кто на самомделе вовлечен в процесс миграции? • Администратор JIRA • Лица, принимающие решения • Финансовый департамент • Отдел закупок • ИТ-департамент – железо – софт • Отдел ИБ – сетевые экраны – аутентификация – пентест • Предыдущий вендор
  • 11.
    Медленно и печальнозавершаем отношения с вендором • Предупреждаем о завершении отношений только когда сами понимаем, что готовы • Собираем все неоплаченные счета • Определяем самую дешевую дату для переноса • Определяем процедуру передачи данных • Договариваемся о времени реакции
  • 12.
    Планирование внутренней инфраструктуры: CAPEX H/WCAPEX S/W CAPEX Назначение Тип Цена сервера Цена диска Цена JIRA Цена СУБД Цена ОС Прод Физ $$$$ $$$ $$$$ - $$ Тест VM $ $ $ - $$ Бэкап Физ $$ $$$$ - - - Existing Server(s)? No Existing Hardware? Yes Location Datacenter Server type Dev VMware CPUs 1 Cores per CPU 4 Memory 8GB Operating system Windows 2008 R2 std 64-bit Drive Size Tier Existing HW?Backup? C: 40GB 1 (no mirror) No Yes D: Data 25GB 1 (no mirror) No Yes E: 28GB 1 (no mirror) No Yes Users User 1 Monitoring None Patching Contact User 2
  • 13.
    Планирование внутренней инфраструктуры: OPEX Активности Управлениепроектом Технический консалтинг Технические спецификации Планирование аппаратного обеспечения Планирование хранения Администрирование БД Мониторинг сервисов Резервное копирование Мониторинг безопасности Тест на проникновение Все это – минимум на год вперед
  • 14.
    Планирование внутренней инфраструктуры: сетьи фаерволлы MAIL RELAY TCP 25 SVN VLAN JIRA UAT uat-jira.internal JIRA Prod prod-jira.internal Internet Jira update Service TCP 25 TCP 3690 Offices 10.0.0.0/8 TCP21,80,443, 3690 3389 atlassian .com 131.103.28.5 131.103.28.7 131.103.28.11
  • 15.
    Внешняя аутентификация • Защитаот проникновения • Соответствие корпоративным стандартам • Централизованное управление доступом • Необходимость в интеграции с внешним сервисом • Нужно четко прописывать процесс управления аккаунтами • Добавление пользователя может быть длительным • Процедура входа в систему может стать неудобной
  • 16.
    Препарируем Seraph import javax.servlet.http.HttpServletRequest; importcom.atlassian.seraph.filter.PasswordBasedLoginFilter; public class SSOFilter extends PasswordBasedLoginFilter { private static final String httpHeaderName_userId = “remote-user"; @Override protected UserPasswordPair extractUserPasswordPair( HttpServletRequest request) { String username = request.getHeader(httpHeaderName_userId); if (username != null && username.trim().length() != 0) { return new PasswordBasedLoginFilter.UserPasswordPair( username, "DUMMY", false); } return null; } }
  • 17.
    Препарируем Seraph import java.security.Principal; importcom.atlassian.seraph.auth.*; import com.atlassian.crowd.embedded.api.CrowdService; import com.atlassian.jira.component.ComponentAccessor; public class SSOAuthenticator extends DefaultAuthenticator { private static final long serialVersionUID = 1L; protected boolean authenticate(Principal user, String password) throws AuthenticatorException { return true; } protected Principal getUser(String username) { return getCrowdService().getUser(username); } private CrowdService getCrowdService() { return (CrowdService)ComponentAccessor.getComponent(CrowdService.class); } }
  • 18.
    Выкидываем родной вводпароля seraph-config.xml: <authenticator class="com.company.jira.SSOAuthenticator"/> web.xml: <filter> <filter-name>login</filter-name> <filter-class>com.company.jira.SSOFilter</filter-class> </filter> jpm.xml: Убираем login gadget jira-config.properties: jira.websudo.is.disabled = true
  • 19.
    Перенос настроек проектов •Переносим все проекты • Удаляем их, оставляем только настройки • Делаем бэкап • Для каждого нового проекта создаем его с нуля • Создаем такие же настройки как в старой системе: workflow, roles, screens, … • Переносим проекты по одному
  • 20.
    Файлы экспорта подмикроскопом Версия JIRA <OSPropertyString id="10037" value="6338"/> Ненужные записи журнала аудита <data tableName="AO_78C957_AUDITEVENTS"> <data tableName="AO_78C957_AUDITHINT"> <data tableName="AO_78C957_NOTIFICATION_HIST"> Версии плагинов <PluginVersion id="10966" name="User Group Picker" key="com.keplerrominfo.jira.plugins.usergrouppicker" version="2.6.4-J631" created="2014-10-31 15:13:52.0"/> <SequenceValueItem seqName="PluginVersion" seqId="10970"/> Селекторы пользователей <CustomField id="10011" customfieldtypekey="com.iamhuy.jira.plugin.issue- alternative-assignee:userselectbox-customfield" customfieldsearcherkey="com.iamhuy.jira.plugin.issue-alternative- assignee:userpickerprojectrolesearcher" name="Internal contact"/>
  • 21.
    Поэтапный перенос проектов СерверЖив? Клиент? Данные есть? Обновлен Миграция Проект Руководитель P U да да запрошены 10.05.15 15.05.15 BEEF J. Doe P нет да 30.04.15 25.04.15 02.05.15 CODE V. Pupkin P да нет 01.05.15 30.04.15 asap COOL H. Grant P нет нет 01.02.15 30.12.14 late DEAD V. Lenin • Учим пользователей заранее • Согласовываем дату переноса • Объединяем проекты в волны • Следим за изменениями на старом сервере • Спокойно относимся к переносам сроков • Отслеживаем целостность данных • Не забываем оповещать о переходе
  • 22.
    Как убедиться, чтовсе хорошо • Не тестировать на production • Делать повторный экспорт • Сравнивать XML • Сравнивать базы • Проверять вручную самому • Давать проверять пользователям
  • 23.
    Полезные ссылки • https://confluence.atlassian.com/display/JIRA064/Upgrading+JIRA •https://confluence.atlassian.com/display/JIRA044/Advanced+JIRA+Configuration • https://answers.atlassian.com/questions/296109/disable-jira-login-page-with-seraph-sso • http://stackoverflow.com/questions/16273566/jira-5-2-seraph-sso-login-behind-reverse-proxy
  • 24.
    Вопросы? Я все еще НикитаНалютин Задать вопросы можно - здесь (навыки поиска не нужны) - в соцсетях (умение искать пригодится)