Понизить сборку?Как удалить продвигаемые сборки и запустить указанный скрипт при удалении в Jenkins - PullRequest
3 голосов
/ 03 января 2012

В проекте, над которым я работаю, у нас постоянная настройка развертывания.Цель состоит в том, чтобы всегда устанавливать последнюю рабочую сборку в производство, если кто-то не отменяет эту функцию вручную.

Чтобы заставить это работать, мы

  1. Запускаем статический анализ кода
  2. Запускаем модульные тесты
  3. Запускаем интеграционные тесты
  4. Запустите автоматические тесты пользовательского интерфейса, насколько это возможно

Если какой-либо из вышеперечисленных шагов завершится неудачно, процесс сборки будет остановлен, а сборка помечена как неудачная.Если инсталляционный пакет создан, то он постепенно устанавливается на

CI -> staging -> production

. На каждом шаге мы запускаем интеграционные и пользовательские тесты для среды, чтобыуверен, что мы не представили некоторые новые вещи, которые терпят неудачу в последующих средах.Если ни один из тестов не пройден, и N минут не проходит, пока никто не нажал кнопку паники, сборка будет переведена в следующую среду.Если тесты не пройдены, мы хотим удалить пакет и полностью отказаться от него.Однако установочные пакеты доставляются на другие серверы, поэтому для выполнения этого шага нам нужно запустить несколько удаленных (shell) сценариев.

Проблема состоит в том, что существует большой набор случаев сбоев, которые мы не можем надежно протестировать в обычном автоматическом цикле, например, макет страницы, или некоторые интеграции не позволяют только производство и т. Д.

Итак, актуальный вопрос : Как мне удалять / удалять сборки после их продвижения?Можно ли запустить удаленный скрипт при удалении сборки или использовать какие-либо плагины для продвижения для достижения этой функциональности?Есть ли какое-то нестандартное решение для этого, о котором я мог бы и не подумать?

Ответы [ 3 ]

1 голос
/ 01 мая 2012

Это может быть очень частный случай, но мы решили не создавать отдельное задание для удаления сборок по очень простой причине - хранить все журналы, связанные с конкретным номером сборки, в одном месте.Настройка была следующей:

Продвижение здесь означает, что установочный пакет (RPM) доступен для данного сервера, где автоматическое обновление обрабатывает фактическое обновление пакета.

У нас есть одна основная сборка, которая собирается каждый раз, когда доступен новый коммит.У нас были некоторые тонкие настройки, связанные с тихими временами и т. Д., Но в основном каждый новый заданный набор коммитов приводил к новой сборке.Сборка содержит все релевантное и доступное тестирование, которое еще далеко от завершения и, вероятно, никогда не будет.

Каждый час отдельный шаг продвижения обрабатывает переход от подготовки к производству.Эта сборка запускает отдельную рекламную акцию, которая переносит последнюю принятую сборку от CI до постановки.Существует 30 минутная задержка до того, как сборки были продвинуты CI -> staging, чтобы предотвратить случайные продвижения для последних вторых коммитов.Задержки были достигнуты с помощью некоторых скриптов bash find.Порядок промо-акций следующий: чтобы сборка была доступна в стадии подготовки (как минимум) за один час до перехода в промоушен.

Фактический ответ: Этапы продвижения были выполнены в виде отдельных сборок.Чтобы выполнить реальное продвижение, а не отдельную сборку с отдельным журналом, сборка запускает реальное продвижение в основной сборке, используя curl и вызывая remote HTTP API .Это оставляет релевантную звезду рекламных акций в основном журнале сборки.Используя разные цвета, акции видны одним взглядом.

Чтобы демотировать сборки, я решил создать отдельный шаг продвижения "демотить сборки".Это тогда выдаст фиолетовую звезду как признак того, что сборка неисправна и, таким образом, удалена.Понижение можно получить, открыв правильную сборку в пользовательском интерфейсе и нажав кнопку «Удалить сборку».На этом этапе не было добавлено никакой автоматизации, но, создав отдельный этап тестирования, было бы довольно просто автоматизировать понижение в должности.Мы, однако, еще не зашли так далеко.

Преимущества этого подхода включают

  • Сборка удаляется путем доступа к сбойной сборке, а не путем предоставления параметров.Упрощает документирование и позволяет справиться с давлением
  • Наличие такой «кнопки паники», доступной для любого, кто нажимает на нее, повышает доверие и ответственность за процесс не только среди разработчиков, но и менеджеров и разработчиков.
  • Очень просто обнаружить мертвые сборки, так как журнал доступен помимо других журналов продвижения
  • Наличие всех соответствующих вызовов продвижения в одной сборке упрощает дальнейшие сценарии

К острым вещам, которые нам еще предстоит улучшить, относятся автоматизация тестирования на более поздних этапах конвейера сборки, а также подходящий способ понижения сборок после понижения в должности.Например, при производстве дефектная сборка и понижение должны всегда приводить к установке последней хорошей сборки, что оказалось довольно сложно достичь.Производственным дата-центрам редко разрешается быть доступными для этого уровня из центра разработки, где находится система CI.Также остановка и запуск конвейера сборки должны быть автоматизированы, так как в противном случае существует вероятность возврата к ручному состоянию.

Естественно, в духе постоянного улучшения всегда есть что улучшить.Вся установка представляет собой что-то вроде беспорядка в сценариях bash / perl, но, поскольку он сценариев и повторяется, всегда есть возможность улучшать один маленький фрагмент за раз.Самая важная вещь - это автоматизация, поскольку она допускает пошаговые шаги, которые более или менее предотвращают любые ручные шаги.

1 голос
/ 30 апреля 2012

Вместо того, чтобы удалять сборки вручную, вы можете написать задание Jenkins, которое принимает номер сборки в качестве параметра, удаляет его, а затем выполняет остальную домашнюю работу. Вы можете настроить права доступа Jenkins, чтобы люди не удаляли сборки вручную.

0 голосов
/ 13 мая 2015

Для тех, кто ищет простой способ удалить сборку с помощью пользовательских шагов:

  • Создать «дефектную» рекламную акцию.
  • Сделать это вручную.
  • Принудительно запустить его на мастере.
  • Добавить параметр выбора DELETE с вариантами NO и YES.
  • Добавить действие «Выполнить оболочку».

_

if [ "${DELETE}" == "YES" ]; then
  # TODO: my custom steps
  curl -X POST ${PROMOTED_URL}/doDelete"
fi

Чтобы удалить сборку сейчас, просто перейдите к рекламным акциям, переключите выбор на ДА и нажмите «Подтвердить».

...