Рекомендуется ли развертывать проект на сервере файл за файлом вручную?

26

Компания, в которой я работаю, пока не осуществляет постоянную доставку. Мы по-прежнему разворачиваем проект вручную на сервере, файл за файлом. Что является наилучшей практикой: вручную развертывать один артефакт проекта для каждого развертывания или продолжать развертывание по файлам?

Джейк Мюллер
источник
12
Для этой задачи не существует даже «единой практики для всех ситуаций».
whatsisname
26
Обычно я бы ссылался на Почему плохой вопрос задавать вопрос о «лучшей практике»? Я думаю, что мы все можем согласиться с тем, что это худшая практика. Он стоит чуть выше «поджога на сервере».
3
релевантный: en.wikipedia.org/wiki/…
Йенс Шаудер
9
Я подозреваю, что OP задает этот вопрос, потому что он уже знает ответ, и его рабочее место - «Делать это неправильно» (tm), а OP пытается собрать доказательства, чтобы обосновать необходимость изменения способа их действий.
user1936
2
Мы сделали это таким образом во втором тысячелетии. Все должно быть в порядке! ;)
Дон Брэнсон

Ответы:

103

Что является лучшей практикой? вручную развернуть один артефакт проекта при каждом развертывании или продолжать делать файл путем развертывания файла?

Ни.

Лучшая практика - полностью и исключительно автоматизировать развертывание. Это означает, что никто не может ничего положить на сервер вручную.

«Подводя итог резюме:« Люди - это проблема ». (Дуглас Адамс)

Люди делают ошибки. Если один из файлов, который вы забыли скопировать, является общей «библиотекой», которая была сильно изменена, вы можете привести к краху всего сайта Production.

Фил В.
источник
17
@JohnHamilton Если автоматизация компиляции является сложной задачей, то это само по себе что-то, что нужно решить в долгосрочной перспективе. Вам не нужно иметь среду разработки, тестирования и подготовки к работе с полностью автоматизированным развертыванием, но создание стандартного пакета развертывания должно быть стандартной практикой.
Нил
20
Э-э, размер компании на самом деле не проблема (в некоторой степени). Стоимость будет зависеть от степени автоматизации развертывания, а также от сложности производственной среды. Но есть градиент автоматизации и градиент «затраты» (время / деньги), начиная с простых вещей, таких как сценарий для копирования результатов сборки на производство (небольшие инвестиции с немедленной ощутимой экономией затрат), и наращивая их оттуда, и это становится более зависимым на управленческий выкуп, чем размер компании.
BurnsBA
39
@JohnHamilton: небольшая компания, которой плохо управляют, может ввести себя в заблуждение, конечно. Автоматизация копирования файлов - не совсем сложная задача, и затраты на то, чтобы кто-либо из сотрудников делал это регулярно, значительно перевесят стоимость написания даже самого тривиального сценария, чтобы сделать это вместо этого.
GManNickG
8
@JohnHamilton: стоимость автоматизации должна быть сопоставлена ​​с риском ошибок, допущенных при ручном развертывании.
Роберт Харви
7
Вам даже не обязательно нужен Дженкинс. Улучшение будет иметь только зарегистрированный скрипт с кучей команд scp (или что-то, что вы используете при ручной загрузке).
user253751
14

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

Даже самый простой шаг автоматизации может иметь большие преимущества, поскольку развертывание становится тривиальным. Сценарий, который копирует файлы или артефакты через (S) FTP или Rsync или другую технологию, является отличным первым шагом. Позже вы сможете расширить этот сценарий, чтобы автоматически выполнять этапы, выполняемые до и после развертывания на сервере, например перезапуск служб.

Амон
источник
Если общее количество серверов составляет 2 или менее, ручное управление менее рискованно, чем автоматическое. Автоматический требует обширной проверки ошибок. Я никогда не видел тривиального автоматического решения, которое оставалось бы тривиальным.
Иисус Навин
3
@ Джошуа Я не уверен, что количество серверов должно быть фактором здесь. Автоматизация также имеет значение при многократном развертывании на одном и том же сервере. Вопрос в том, кому вы доверяете больше: чтобы компьютер добросовестно выполнял сценарий, который работал один раз, или в вашей способности запоминать все необходимые шаги каждый раз? Как ошибочный и забывчивый человек, я предпочитаю не делать вещи вручную. Иногда я даже пишу одноразовые задачи только для того, чтобы просмотреть команды перед их выполнением. Это намного менее рискованно, чем делать случайные вещи вручную, пока это не сработает!
Амон
У меня большой опыт в обоих направлениях. Вещи, которые я делаю для ручного развертывания, это xcopy install, так что на самом деле нет шагов, чтобы забыть некоторые из них.
Джошуа
9

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

Будьте внимательны, чтобы убедиться, что нет особой причины для подхода «файл за файлом», который вы должны принять во внимание.

Ewan
источник
1
Я задаю этот вопрос, потому что я просто хочу убедиться, что это не лучшая практика в мире. Интересно, есть ли еще какие-либо компании / разработчики, которые все еще вручную разворачивают свои приложения / проект, и что еще хуже, файл за файлом разворачивается на каждой итерации разработки.
Джейк Мюллер,
4
Лучший вопрос, который нужно задать: «Почему мы делаем это таким образом?» Я не могу придумать причину, но я знаю, что некоторым компаниям нравится держать ручную руку на спусковом крючке, как это было
Ewan
8
@JakeMuller То, что вы должны прочитать между строк этого ответа, заключается в том, что решения должны приниматься на основе рассуждений о ситуации, а не рабской приверженности тому, что кто-то, даже не подозревая об этом, объявил всегда правильный ответ.
Blrfl
Причиной такого подхода к файлам может быть наличие зависимостей между файлами, поэтому обновления файлов развертываются до изменений в других файлах, которые зависят от этих файлов. Обновление файлов в неправильном порядке может на короткое время тормозить систему.
BDSL
6

С непрерывной доставкой (или развертыванием, собственно) и перемещением каждого файла вручную, вы смотрите на две крайности. Совершенно понятно, что вы не можете / не хотите создавать полностью автоматизированный конвейер (пока). Тем не менее, вы должны рассмотреть возможность автоматизации частей процесса.

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

Автоматизируйте то, что вы можете, шаг за шагом. Тот факт, что вы не можете позволить себе полностью автоматизированный конвейер CD, не должен отговаривать вас от автоматизации некоторых частей.

Blueriver
источник
1

Лучшей практикой будет проведение анализа затрат / выгод для вашего конкретного развертывания для вашей конкретной компании.

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

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

Корт Аммон - Восстановить Монику
источник
1

Между ручным копированием файлов и непрерывной доставкой существует множество оттенков серого.

Начните с уменьшения сложности процесса развертывания, например, используя zip-файл, упаковку в стиле rpm, Infrastruture в качестве инструмента управления кодом (например, puppet или chef) или даже просто скрипт, который копирует файлы для вас из промежуточная зона на FTP-сервере.

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

Вам не нужно реализовывать полную непрерывную доставку (которая обходится дорого и требует усилий / инвестиций / инноваций с течением времени) - начните с простого, заставьте ее работать, продемонстрируйте преимущества - и переходите оттуда.

vikingsteve
источник
0

Это зависит от используемой вами технологии программного обеспечения (или стека) (интерпретируемый язык, скомпилированный язык, настольное приложение, мобильная версия и т. Д.), Программного обеспечения девиация Политики отдела, если у вас есть инструменты для его автоматизации, насколько важно ваше приложение, и одна важная вещь, которую следует учитывать, - это архитектура вашего программного обеспечения (как было разработано ваше приложение). Вот почему у вас здесь разные ответы. Как показывает практический опыт, лучший подход будет заключаться в том, чтобы максимально сократить вмешательство человека в задачи развертывания, чтобы избежать ошибок. Хорошей практикой будет тестирование всего на QA-сервере (рассмотрите возможность использования виртуального сервера, если бюджет является проблемой) перед развертыванием, и наличие обратных процедур для восстановления предыдущей версии в случае аварии ( ВСЕГДА есть резервная копия).

Эду Гарсия
источник