Download - Миграция JIRA - безобразие или безрассудство
Миграция JIRA – безобразие или безрассудство?
Никита НалютинExperian Decision Analytics
Пару слов о себе1996-2002 разработчик
1999 получил Excellence in Computer Science Award
2002 пришел в тестирование
2002-2015 самолеты-трейдинг-видео-банки…
2007 книга «Верификация ПО», издана при поддержке
2008 кандидат технических наук
2012- Тест-менеджер
Выступаю на SQA Days2009-2015
Пару слов о себе1996-2002 разработчик
1999 получил Excellence in Computer Science Award
2002 пришел в тестирование
2002-2015 самолеты-трейдинг-видео-банки…
2007 книга «Верификация ПО», издана при поддержке
2008 кандидат технических наук
2012- Тест-менеджер
Выступаю на SQA Days2009-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)? NoExisting Hardware? YesLocation DatacenterServer type Dev VMware
CPUs 1 Cores per CPU 4
Memory 8GBOperating system Windows 2008 R2 std 64-bitDrive Size Tier Existing HW?Backup?C: 40GB 1 (no mirror) No YesD: Data 25GB 1 (no mirror) No YesE: 28GB 1 (no mirror) No YesUsers User 1Monitoring NonePatching Contact User 2
Планирование внутренней инфраструктуры: OPEX
Активности
Управление проектом
Технический консалтинг
Технические спецификации
Планирование аппаратного обеспечения
Планирование хранения
Администрирование БД
Мониторинг сервисов
Резервное копирование
Мониторинг безопасности
Тест на проникновение
Все это – минимумна год вперед
Планирование внутренней инфраструктуры: сеть и фаерволлы
TCP 80,443,
8080
MAIL RELAY
TCP 25
TCP80, 443,8080
SVN VLAN
JIRA UAT
uat-jira.internal
JIRA Prod
prod-jira.internal
Internet
Jira updateService
TCP 25
TCP3690
Offices
10.0.0.0/8
TCP
21,8
0,33
06
3389
TCP 21,80,3306
3389
TC
P 2
1 ,8
0 ,4
43 ,
36
903
389
atlassian. com131. 103.28.5131. 103.28.7131. 103.28.11
Внешняя аутентификация
• Защита от проникновения• Соответствие
корпоративным стандартам• Централизованное
управление доступом
• Необходимость в интеграции с внешним сервисом• Нужно четко прописывать процесс управления аккаунтами• Добавление пользователя может быть длительным• Процедура входа в систему может стать неудобной
Препарируем Seraphimport 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; }}
Препарируем Seraphimport 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
Вопросы?
Я все еще Никита Налютин
Задать вопросы можно
- здесь (навыки поиска не нужны)- в соцсетях (умение искать пригодится)