Для C++/Java/C# кодеры два различия, которые я подчеркиваю очень решительно заранее, то, что:
№ 1: В Perl почти все имеет значение, просто не всегда, что Вы хотите. Хорошие примеры включают:
№ 2: В Perl можно составить его, как Вы продвигаетесь. В других работах можно сказать "в хеше 'w', ключ 'x' индексирует анонимный массив, где поле 'y' содержит 'z'" , и интерпретатор создаст и размер все переменные для Вас, когда Вы идете.
MSBuild (или, вероятно, любая другая технология сборки), вероятно, лучший выбор для автоматического выполнения всех этих задач.
Вы можете использовать MSBuild для выполнения 1–4 без проблем. Мы обновляем наши веб-конфигурации с помощью MSBuild с помощью задачи XMLUpdate , а также запускаем несколько сценариев awk для дополнения части нашего сгенерированного кода с помощью задачи Exec .
Для # 5 и # 6, вы, вероятно, снова захотите использовать Exec для выполнения некоторого скрипта, чтобы получить файлы резервных копий и запустить их для производственных экземпляров, однако я не администратор SQL, поэтому я понятия не имею, лучший ли это способ или для этого уже есть задачи MSBuild.
Для фактического копирования файлов существует задача Копировать и, возможно, другие, но вам, возможно, придется прибегнуть к xcopy или специальному сценарию.
Управление сборкой продукта - большая работа, но именно по этой причине были созданы такие технологии, как MSBuild и Ant.
I have tried the following for deployment on a production server, using NAnt to handle the logic:
1) Check folder with latest release build for revision number.
If a newer revision is available:
2) Fetch file with compiled web site and database scripts (see below).
3) Take web site offline (add app_offline.htm).
4) Apply database scripts (see below).
5) Put web site online (delete app_offline.htm).
Concerning deploying changes to the database schema, I've been inspired by some posts by K. Scott Allen. A short version of these is:
1) Script each new change to the database schema (tables, indexes, seed data), and store each new change in separate files (e.g. schema-001.0001.sql
, schema-001.0002.sql
, etc.). Keep these files in a separate folder, e.g. sql\schema
.
2) Script misc. objects (stored procedure, functions, triggers, and views) in separate files in separate folders, e.g. sql\procedures\uspGetProducts.sql
, sql\procedures\uspUpdateProduct.sql
, sql\functions\
, sql\triggers\
, sql\views\
3) When deploying: a) Drop all misc. objects from part 2, b) apply the schema changes from part 1 that have not been applied previuously, c) and finally recreate all misc. objects from part 2.
These scripts can be deployed automatically by e.g. Nant scripts on the production server.