Jenkins для автоматизации развертывания приложений ASP.NET

13

Есть ли возможность автоматизировать / полуавтоматизировать развертывание веб-приложений ASP.NET с помощью Jenkins. Он может находиться в контролируемой или неконтролируемой среде, поскольку неконтролируемому пользователю необходимо ввести ИД пользователя и пароль. Я ищу способы скопировать файлы от цели к месту назначения и запустить сценарии SQL в сценарии веб-фермы.

Edit В настоящее время мы используем bat-файлы для xcopy / configure app pool / sql cmd и т. Д. Для развертывания приложения. Но для того, чтобы это работало, команда поддержки производства должна загрузить исходный код, собрать проект и запустить файлы bat для развертывания приложения.

Теперь мы хотим автоматизировать развертывание, не загружая исходный код пользователем, а конечному пользователю просто нужно зайти на URL-адрес, заполнить параметры имени пользователя и пароля и выбрать тег svn, и он должен быть развернут. Но Jenkins работает под анонимным входом, поэтому существующий bat-файл не будет работать, так как у него нет прав на запуск скрипта.

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

Солнечный
источник
Обмен вашими исследованиями помогает всем. Расскажите нам, что вы пробовали и почему это не соответствует вашим потребностям. Это свидетельствует о том, что вы потратили время, чтобы попытаться помочь себе, избавляет нас от повторения очевидных ответов и, прежде всего, помогает получить более конкретный и актуальный ответ. Также см. Как спросить
Гнат
Обновите мой вопрос, пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.
Солнечный

Ответы:

11

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

  • В настоящее время мы используем Jenkins и Github вместе - как только что-то слилось с master, Github сообщает Jenkins и начинает сборку.
  • Мы используем сценарий Nant на Jenkins для создания проекта, запуска модульных тестов, и если все выглядит хорошо, он запускает другой проект Jenkins. Скрипт Nant также выдает каталог с полностью скомпилированным кодом / свернутым CSS / JS и т. Д.
  • Вторичный проект Jenkins берет выходные данные из сборки и отправляет их обратно в Github в отдельном хранилище.
  • Файл .BAT запускается каждые 5 минут на промежуточном веб-сервере и в основном проверяет наличие обновлений в этом хранилище. Если обновление найдено, мы загружаем последнюю сборку, резервное копирование наших промежуточных файлов, а затем внедряем новейшую сборку в промежуточную папку.
  • Чтобы начать работу, у нас есть файл .BAT, который выполняет резервное копирование живых файлов и копирование файлов репозитория поверх живых файлов. Он запускается вручную. Он не обрабатывает обновления SQL (мы делаем это вручную).

Теперь, очевидно, это не совсем идеально, но это работает для нас. Мы хотим расширить это в будущем, чтобы:

  • Используйте Web Deploy для отправки файлов из Jenkins прямо в IIS и выполняйте любые другие команды, которые нам нужно выполнить.
  • Используйте автоматическую миграцию (функция Entity Framework) для обработки всех обновлений SQL, как части запуска.
Николас
источник
Это почти то же, что мы следуем. Но мне было интересно, может ли Web Deploy установить службы Windows и т. Д. И все, что нужно для сложных веб-приложений. В настоящее время мы используем ps tools и он работает нормально. Для БД мы планируем использовать инструмент DeployDB.
Солнечный
Как вы справляетесь с ситуациями, когда IIS блокирует файлы? Как вы справляетесь с ситуациями, когда кто-то работает с вашим приложением. У вас есть несколько узлов или вы просто отключаете приложение для пользователей, работающих на момент публикации?
Петр Перак
1
@Peri - я забыл упомянуть в своем первоначальном ответе, но мы планируем иметь два рабочих сервера и переключаться между ними при необходимости (с использованием IIS или nginx). Это позволит нам «прогреть» другой работающий сервер, когда произойдет развертывание, а затем переключиться на него, чтобы не было заметных простоев.
Николай
4

Я уже использую Jenkins для приложений .Net и TFS.

  1. Добавьте необходимую конфигурацию в ваш проект и код преобразования и регистрации.
  2. Получите последние новости от TFS (используйте плагин TFS)
  3. Постройте проект (используйте плагин MSBuild). Вы можете опубликовать код из Msbuild, используя аргументы командной строки.
  4. Синхронизируйте код из местоположения публикации в место назначения с помощью команды msdeploy.exe (находится по адресу «C: \ Program Files (x86) \ IIS \ Microsoft Web Deploy V2 \ msdeploy.exe»)
  5. Вы также можете отправлять электронные письма и делать резервные копии через Jenkins.

Вы также можете использовать MSTest.exe для выполнения модульного теста и показать его на консоли jenkin или опубликовать результат теста.

Санджив Кумар
источник