googlebd2d08236268006b

DevOps چیست؟ و کاربرد آن کجاست؟

شاید IT یکی از بزرگترین صنایعی باشد که هر روز در آن واژگان جدیدی به دایره لغات ما افزوده می شود، یکی از این لغات جدید DevOps است که از سال 2009 شروع به ظهور کرده و  از 2014  بسیار مورد استقبال قرار گرفته است و اگر در لیست مشاغل خارجی بدنبال آن باشید، می بینید که شرکت ها بشدت دنبال افراد متخصص در این حوزه می گردند.

اما دلیل نوشتن این پست، کج فهمی های زیاد در مورد DevOps بود، اینکه واقعا DevOps چیست؟

روزگاری در شرکت ها توسعه نرم افزار دو تیم وجود داشتند که با یکدیگر دوست نبودند، یکی از آن ها Dev یا تیم توسعه و آن دیگری Ops یا تیم عملیات بود. شاید به ظاهر در یک واحد تحت فرمان مدیریتی یکسان بر روی پروژه(های) مشترک کار می کردند ولی اهداف آنها کاملا متضاد بود. هدف تیم توسعه ساخت ویژگی های جدید و تغییرات زیاد بر روی محصول بود ولی تیم عملیات بدنبال پایداری و ثابت نگه داشتن وضعیت سرویس های موجود بود.

برای همین مابین این دو تیم یک دیوار نامرئی (و گاها در تجربه ما در ایران دیوارهای مرئی) به وجود می آمد. مفهوم DevOps بدنبال این است که با از بین بردن دیوار مابین (مرئی یا نامرئی) تیم ها، و افزایش تعامل نفرات، موجب افزایش سرعت تحویل ارزش به مشتری شود. پس خیلی ساده، DevOps  فرآیندی است برای تحویل سریع ارزش به مشتری و از بین بردن هر نوع مشکل که باعث کندی در فرآیند تحویل ارزش شود.

این مفهوم چرا مهم شد؟

با جدی شدن بحث Cloud و حرکت تیم ها به سمت توسعه نرم افزار چابک ا(ینکه در این روش سرویس ها به سمت زنده بودن و تعامل همیشگی با مشتریان و تغییر بر اساس نظرات آنها پیش رفت)، دائما نیاز بر این داشتیم که نسخه های جدید محصول در دسترس مشتریان قرار بگیرد. ارتباط ضعیف مابین تیم های تضمین کیفیت، عملیات و تیم توسعه، باعث می شد فرآیند تست، انتشار و تحویل زمان بر باشد و هر بار هر مشکلی مشاهده می شد این تیم ها همدیگر را سرزنش و محکوم می کردند.

در مفهوم DevOps ما سعی می کنیم این تیم ها به هم نزدیک تر شوند و با تعامل و همکاری بهتر و البته اتوماتیک کردن بسیاری از روال های تکراری، تحویل ارزش به مشتری دچار مشکل یا کندی نشود.

کج فهمی ها در مورد DevOps

با توجه به جدید بودن این مفهوم، کج فهمی های زیادی در این مورد وجود دارد، و البته این فقط در ایران نیست و برخی خارجی ها نیز در این مورد درک درستی ندارند.

DevOps فقط Continuous Delivery نیست

خیلی از دوستان فکر می کنند DevOps همان Continuous Delivery است. یعنی اینکه ما در ابزار TFS یا Jenkins یک CI راه بیاندازیم و عملیات Deployment را اتوماتیک کنیم، پس ما DevOps هستم. حتی در بعضی از جاها با عنوان مهندس DevOps آگهی استخدام می زنند که در شرح شغل فقط دنبال کسی هستند که ابزار CI را پیکربندی کنند.

اتوماتیک کردن روال تحویل یا انتشار محصول به سرورهای تست یا سرورهای تحت بار مشتری، فقط بخشی از چارچوب کلی DevOps است.

ارتباط DevOps با روش های چابک و CI و CD

ارتباط DevOps با روش های چابک و CI و CD

DevOps یک تیم نیست

بعضی نفرات فکر می کنند که DevOps یعنی یک تیم متشکل از برنامه نویسان و بچه های عملیات. خود ساخت این تیم مفهوم DevOps نیست ولی شاید یک روش برای رسیدن به این فرآیند باشد و شاید در بسیاری از سازمان این روش نارکارآمد باشد.

چارچوب CALMS

CALMS یک چارچوب راهنما برای رسیدن به فرآیند Devops است:

Culture

همانطور که گفته شد، DevOps  بیشتر یک مفهوم فرهنگی است، یعنی دقیقا چیز خاصی نیست که آن را پیاده سازی کنید. نیاز داریم تا دیوار بین افراد و تیم ها شکسته شود تا آنها تعامل خوبی با هم داشته باشند و اهداف متضاد آنها تبدیل به اهداف مشترک شود.

Automation

در اینجا دقیقا مفاهیم Continuous Delivery – Continuous Integration – Continuous  Deployment مطرح می شود، امکان ندارد شما ادعا کنید ما فرآیندهای DevOps را داریم ولی از ابزارهای مثلا CI استفاده نمی کنیم و همه کارها را دستی انجام می شود. فرآیندهای دستی کند هستند و امکان خطای انسانی در آنها زیاد است. برای همین تا آنجایی که امکان دارد باید تمام فرآیند تحویل محصول (از کامپیوتر برنامه نویس ها تا مشتری واقعی) اتوماتیک شده باشند.

Lean

تکیه بر اصول اصلی تولید ناب نرم افزار که در اینجا کاملا به آن اشاره شده است. یکی از اصول اصلی این تفکر، از بین بردن تمامی فرآیندها و کارهای زاید است. یعنی هر ویژگی، فرآیند، فعالیتی که تولید ارزش نمی کنند باید حذف شوند. ناب بر ارزش محور بودن فعالیت ها و کاهش هر نوع فعالیت غیر ارزشمندی تاکید دارد.

برای مثال، کوچک بودن تیم های توسعه، توسعه ویژگی هایی که مشتری واقعا نیاز دارد، کم کردن دوباره کاری، کم کردن Task Switch و … .

Measurement

تا زمانیکه ندانیم کجا هستیم، نخواهیم دانست که کجا می خواهیم برویم.

برای ایجاد یک فرآیند خوب و منظم، نیاز به شفافیت در کلیه سطوح داریم، برای ایجاد شفافیت و تصمیم گیری بهتر، نیاز داریم تا بتوانیم وضعیت موجود را ارزیابی کنیم. معمولا در هر سطح نرم افزار برای نوع سرویسی به چنین مانیتورینگ هایی نیاز است:

  • Infrastructure Monitoring
  • Log Management
  • Application and Performance Management

اما فقط چنین اندازه گیری هایی برای حداکثری کردن ارزش کافی نیست، گاها نیاز است نرخ تبدیل مشتریان، میزان استفاده از هر ویژگی ، تعداد باگ های هر نسخه، سرعت میانگین تحویل هر نسخه و هر متر و معیاری که در حداکثری کردن ارزش به ما کمک می کنند را بدانیم .

Sharing

این مفهوم در مورد اشتراک گزاری درس های یادگرفته است. ما از اندازه گیری ها و مانتیتورینگ چه درسی گرفتیم؟ پیشتر وجود دیوار مابین اعضای تیم باعث می شد این درس ها بین اعضای تیم پخش نشوند ، اشتباهات مکررا تکرار میشد و کارها صرفا با غر زدن پیش می رفت.

اینکه درس بگیریم که دیگر اشتباهات را تکرار نکنیم، یا اقدامات پیشگیرانه انجام دهیم و … .

کاربرد DevOps کجاست؟

اگر شما یک سرویس یا محصولی تولید می کنید که دائم بر اساس نظرات مشتری یا بازخورد بازار تغییر می کند و ویژگی های جدید به آن اضافه می شود و فکر می کنید مزیت رقابتی شما ارائه سرویس خوب به مشتری است، پس احتمالا باید بدنبال این مفهوم باشید. اما معمولا اگر در سازمان هایی هستید که سرویس هایی با تکنولوژی های خیلی قدیمی وجود دارند و اصولا همه چیز دستی انجام می شود و روال های سازمانی اجازه اتوماتیک شدن به شما را نمی دهند، شاید استفاده از این مفهوم کار بسیار سختی باشد.

چابک و موفق باشید

اسد صفری

منبع : http://blog.scrum.ir/

Share Button

شاخص برابری قدرت خرید چیست؟

شاخص برابری قدرت خرید (ppp) چیست؟
برای مقایسه بهتر اقتصادهای جهان از شاخص برابری قدرت خرید استفاده می شود.

برای اینکه بتوان عملکرد اقتصاد کشورها را سنجید و آن را با دیگر کشورها مقایسه کرد باید از یک شاخص اقتصادی بهره برد. شاخص “تولید ناخالص داخلی” (GDP) اکنون پرکاربرد ترین شاخص برای اندازه گیری حجم اقتصاد است که نشان می دهد کل ارزش فعالیت های اقتصادی بخش خصوصی و دولتی طی یک دوره زمانی مشخص برای مثال یک سال چقدر بوده است.

اگر شما حجم اقتصاد ایران را بر اساس ریال و حجم اقتصاد آمریکا را بر اساس دلار محاسبه کنید، آنگاه برای مقایسه اقتصاد این دو کشور باید واحد اندازه اقتصادها را به واحدی یکسان تبدیل کنید، ساده ترین راه حل این است که با توجه به ارزش ریال نسبت به دلار، ارزش یکی را به دیگری تبدیل کنید. مثلا اگر هر دلار معادل 3200 تومان باشد، اندازه اقتصاد ایران بر اساس تومان را بر 3200 تقسیم کنید تا ارزش دلاری آن را بسنجید. اما چنین راهکاری می تواند گمراه کننده باشد چرا که قدرت خرید معادل ریالی 10 دلار در داخل ایران با قدرت خرید همان 10 دلار در آمریکا برابر نیست.

برای مثال اگر اقتصاد چین و آمریکا را در نظر بگیرید، با 1.66 دلار می توان در چین یک قرص نان خرید اما همان نان در آمریکا 2.39 دلار قیمت دارد. در واقع اگر فقط نان را در نظر بگیریم، قدرت خرید فردی که در چین 16 دلار در ماه درآمد دارد معادل قدرت خرید فردی است که 23 دلار در ماه درآمد دارد. به همین خاطر است که در نظر گرفتن میزان درآمد بدون توجه به برابری قدرت خرید می تواند گمراه کننده باشد و باعث بروز خطا در مقایسه عملکرد اقتصادها بشود. به همین خاطر اقتصاددانان برای اینکه بتوانند همه اقتصادها را بر اساس واحد یکسانی بسنجند، علاوه بر اینکه ارزش همه آن ها را به دلار تبدیل می کنند، بر اساس قدرت خرید مختلف دلار در کشورهای مختلف، میزان درآمد کشورها را نیز تعدیل می کنند و از آن به عنوان “برابری قدرت خرید” (Purchasing Power Parity). برای مثال اندازه اقتصاد ایران در سال 2013 طبق برآورد صندوق بین المللی پول معادل 366 میلیارد دلار بوده است اما اگر برابری قدرت خرید در نظر گرفته شود آنگاه اندازه اقتصاد ایران در همان سال به 945 میلیارد دلار می رسد. در واقع می توان گفت که قدرت خرید یک دلار در ایران کمی بیش از دو برابر قدرت خرید آن در آمریکا است.

Share Button

افزونه و سایت تقویم شمسی-جلالی-میلادی-قمری با مناسبت های رسمی ایران

Persian-Jalali Calendar with Iran Holidays

سلام

امروز یه سایت میخوام معرفی کنم که شاید شبیه به اونو قبلا هم دیده باشین ولی این یکی یه تفاوت هایی داره.

توی این سایت میتونین ساعت و تقویم رسمی ایران را ببینین که شامل تقویم هجری شمسی یا جلالی، هجری قمری و میلادی میشه. همچنین همه ی مناسبت هایی که توی ایران یاهاش سرو کار داریم در اون وجود داره.

ParsiTime.com

نکته ای که این نرم افزار را از بقیه ی هم نوعاش متفاوت میکنه اینه که برای اون پلاگین هایی در مرورگر کروم و همچنین فایرفاکس طراحی شده که با یک آیکن کوچک در کنار آدرس بار میتونین به تقویم دسترسی پیدا کنین. همچنین تاریخ روز را هم به صورت پیش فرض روی اون آیکن نمایش میده.

یک تفاوت دیگه اینه که ساعتی که توی این سایت و نرم افزار وجود داره برخلاف اکثر ساعت هایی که توی سایت های دیگه هست، به هیچ وجه عقب نمیمونه. اونایی که برنامه نویسن میتونن به گذاشتن یه debugger توی کنسول مرورگر این مساله را توی سایت های مختلف تست کنن.

این سایت را توی اوقات فراقت نوشتم و در واقع یک hobby-project واسه من بوده. البته اگه استقبال بشه قصد دارم برای تمامی پلتفرم ها این نرم افزار را تهیه کنم. به این صورت که با هر موبایلی یا مرورگر یا سیستم عاملی که هستید بتونین از این نرم افزار استفاده کنین. البته کار سختیه که همه چیز را پوشش داد ولی بر اساس درخواست هایی که توی chrome web store گذاشته میشه، اولویت بندی میکنم و سعی میکنم که انجام بدم. برای دانلود افزونه ی کروم، اگه تو ایران هستین حتما از فیلترشکن استفاده کنین.

لطفا اگه خوشتون اومد یا پیشنهادی داشتین توی همین پست و برای chrome extension (اینجا) کامنت بزارین.

اما آدرس سایت اینجاست: www.ParsiTime.com

!!! برای دانلود افزونه (plugin) برای مرورگر کروم در ایران حتما از فیلتر شکن استفاده کنید.

ParsiTime Plugin Image

 

Share Button

Invoke MsDeploy and MsBuild on Powershell

سلام
قبلا توی مطلب “چالش های انتشار خودکار نرم افزارهای جامع سازمانی” گفته بودم که شاید بعدا بیشتر در این مورد بنویسم. متاسفانه این روزها اصلا فرصت نمیشه، اما سعی میکنم اگه یه مطلب خیلی مفید بود حد اقل اشاره ای به اون بکنم.

مایکروسافت برای بیلد و انتشار نرم افزار، ابزارهای جداگانه ای داره که سعی کرده توی tfs و در قسمت ساخت بیلد های اتوماتیک، اونارو یکجا مورد استفاده قرار بده. اما هنوز کمبودهایی داره و توی پروژه های جامع سازمانی پاسخگوی تمام نیاز ها نیست یا به دردسرش نمی ارزه که ازش استفاده کنین.

بعضی مواقع ترجیح بر اینه که از دستورات خط فرمان ویندوز استفاده کنیم. که میتونیم از  command-prompt یا powershell استفاده کنیم. از اونجایی که powershell بسیار پیشرفته تر از command-prompt هست، ترجیح بر استفاده از powershell یا دستورات cmdlet هست.
دستوراتی مثل start یا stop یا install و uninstall کردن یک ویندوز سرویس، کپی کردن فایل و کارهای را میشه از طریق powershell انجام داد.

وقتی powershell را انتخاب میکنیم، دیگه کار جالبی نیست که یک سری کارها را با powershell و یک سری دیگه را با cmd انجام بدیم و اصلا منطقی هم نیست.
MsBuild وMsDeploy دو تا از ابزارهایی هستن که توی Automatic-Deployment زیاد ازش استفاده میشه. به طور پیش فرض، این برنامه ها از طریق command-prompt اجرا میشن. با یک جستجوی ساده توی اینترنت میشه راهی پیدا کرد که این برنامه ها را از طریق powershell اجرا کرد.

برای راحت تر کردن این کار میتونیم از Moduleهای powershell استفاده کنیم.
یک ماژول برای اجرای MsBuild توی این آدرس پیدا کردم.  https://invokemsbuild.codeplex.com/
اما برای MsDeploy ماژولی پیدا نشد که خودم دست به کار شدم یکی نوشتم که از این آدرس میتونین دریافت کنین. https://github.com/omids20m/Invoke-MsDeploy-PowerShell-Module

امیدوارم این مطلب مورد توجه شما دوستان قرار گرفته باشه 🙂

Share Button

آیا تمرکز زیاد برای مدیران مضر است؟

تمرکز کردن به خودی خود در هر کاری بسیار خوب است. سال‌های سال است که به مدیران توصیه شده تمرکز خود را بر مسائل مشخصی مانند طراحی استراتژی‌هایی برای تولید بهتر و کم‌هزینه‌تر محصول، از بین بردن موانع خط تولید، …

بیشتر

Share Button

دهم آذر روز تولد من و روز برنامه نویس در ایران

از ویکی‌پدیا، دانشنامهٔ آزاد

روز ۲۵۶ام هر سال (معادل عدد ۱۰۰ در مبنای شانزده) مطابق با ۱۳ سپتامبر (۱۲ سپتامبر در سال‌های کبیسه) به عنوان روز برنامه‌نویسان نام گرفته‌است. روسیه اولین کشوری بود که این روز را به عنوان روز برنامه‌نویس به رسمیت شناخت و پس از آن کشورهای آلمان، کانادا، چین، کرواسی، فرانسه، گوآتمالا، هند، بلژیک، استرالیا، نیوزلند، لهستان، اسلوونی، بریتانیا و ایالات متحده آمریکا نیز این روز را به عنوان روز برنامه‌نویس به رسمیت شناختند.

از جمله دلایل انتخاب عدد ۲۵۶ به عنوان روز برنامه نویس می‌توان به موارد زیر اشاره کرد:

  • عدد ۲۵۶ بزرگترین توان عدد ۲ کوچکتر از ۳۶۵ که تعداد روزهای یک سال است، می‌باشد.
  • در سیستم دودویی کامپیوتری تعداد اعدادی که می‌توان در یک بایت جا داد ۲۵۶ تا می‌باشد.
  • عدد ۲۵۶ به صورت کلی برای برنامه‌نویس‌ها عددی آشناست.

 

نکته ی جالب اینکه توی ایران روز 256 ام سال شمسی میشه 10 آذر که مصادف با تولد من هست 🙂

پس روز برنامه نویس را به همه ی برنامه نویسان  و همچنین روز تولد خودم را به خودم تبریک میگم 😉

 

سایت programmerday.ir هم کار جالبی کرده و یک نظرسنجی برای حمایت از این روز گزاشته. من که امضا کردم شما هم اگه موافقین امضا کنین.

Share Button

تنظیمات راه اندازی اس اس ال روی یک نرم افزار- پورت

How to Configure a Port with an SSL Certificate

  1. Add Certificate to Trusted Root and Personal (and install certificate by double-click on it)
  2. Obtain the SHA-1 Hash of a Trusted Root CA Certificate read here or here
  3. In .Net Projects retrive applicaion GUID from Assembly.cs
  4. Add SSL Certificate by folowing command (Windows 2012)
    netsh http add sslcert ipport=0.0.0.0:8020 certhash=aa00b0000bb0c00cc00000dd00e0000e0ff00g00 appid={0c0e0ec0-0000-0000-0000-a0cf0000d0af}
  5. NOTE: DO NOT Copy Paste Certificate Hash because it may contain un-visible characters. Just type it.

Read more about How to: Configure a Port with an SSL Certificate

Share Button

Bundling AngularJs Html Pages With Aps.Net

Bundling AngularJs Html Pages With Aps.Net

یه مطلب خوب درباره Bundle کردن فایل های html در AngularJs پیدا کردم که براتون گزاشتم. البته این مطلب یه مقدار قدیمیه و یه کم مشکل داره ولی برای ایده گرفتن بسیار عالیه. در آینده اگه خواستین بگین که کدی که خودم نوشتم را هم بزارم براتون.
bundle_image_6Bundling and minification are two well-known techniques used to improve the load time of your website. These are especially important for sites that use extensively JavaScript to offer better user experience. There are plenty of tools to help you do bundling and minification of JavaScript and CSS files. If you are a .NET developer you are probably very used to live inside Visual Studio and expect it to offer you everything you might think of. In ASP.NET 4.5 you can use a bundling API to define how your files will be grouped and sent to the client. The following example demonstrates the usage of this API.
public static void Register(BundleCollection bundles)
{
 bundles.Add(new ScriptBundle("~/bundles/jquery")
  .Include("~/Scripts/jquery-{version}.js"));
 bundles.Add(new StyleBundle("~/bundles/css")
  .Include("~/css/*.css"));
}

Then in your page (either an ASP.NET page or a MVC view) you would invoke the rendering of these bundles by calling Scripts.Render(“~/bundles/jquery”) and Styles.Render(“~/bundles/css”).

When using AngularJS for building a rich client-side applications you would typically end up with a lot of HTML pages too. These HTML pages are actually the views in the MV* pattern that AngularJS implements. If you use a routing mechanism to simulate multiple pages in AngularJS, then for every page a new request to the server will be issues to download the HTML page for the corresponding page. For your production environment, however, you may wish to predownload all HTML pages so that no further requests are made to the server. One options is to rely on tools like Grunt, which provides a rich set of options. However, in this post I want to show you a very easy way to achieve the same using the bundling API of ASP.NET.

First we have to understand how AngularJS processes the HTML pages. When AngularJS needs to render a view (e.g., when loading a route or when visualizing a directive), it checks a local cache, called template cache. This is an abstraction over a simple key-value store that runs locally. If the template is not in this template cache, then AngularJS issues a request to the server in order to download it and then it puts into the cache. Next time the same view is requested, it can be rendered immediately. So what we can do in this scenario is that we can prepopulate this template cache will all the HTML pages we have. Thus, every time AngularJS needs to render a view, it will have a cache hit.

The next question is how to implement this logic using the bundle API. With the help of a .NET reflector one can look into the code of the existing JavaScript and CSS minification mechanisms and see how they work. The interface IBundleTransform provides a method that can manipulate all the files in a bundle and decide how to render them. Thus, we can collect all HTML pages that are included in the bundle and render them as a JavaScript file. We can attach a method to the run block of our AngularJS application module and make use of the $templateCache service to manipulate the template cache. Here is an excerpt of our AngularJsHtmlCombine transform implementation.

var sb = new StringBuilder();
sb.Append("(function(){");
sb.AppendFormat("angular.module('{0}'), appName);
sb.Append("a.run(['$templateCache',function(t){");
 
foreach (BundleFile file in response.Files)
{
 string fileId =
  VirtualPathUtility.ToAbsolute(file.IncludedVirtualPath);
 string filePath =
  HttpContext.Current.Server.MapPath(file.IncludedVirtualPath);
 string fileContent = File.ReadAllText(filePath);
 
 sb.AppendFormat("t.put({0},{1});",
  JsonConvert.SerializeObject(fileId),
  JsonConvert.SerializeObject(fileContent));
}
 
sb.Append("}]);");
sb.Append("})();");

Note that I rely on JSON.NET to convert a .NET string to a JSON string. We can then create a special bundle to apply our transformation.

public class AngularJsHtmlBundle : Bundle
{
 public AngularJsHtmlBundle(string virtualPath)
  : base(virtualPath, null, 
   new[] { (IBundleTransform)new AngularJsHtmlCombine() }) {}
}

How do we use this bundle now? Well, the same way as we use the scripts and the styles bundle.

public static void Register(BundleCollection bundles)
{
 bundles.Add(new ScriptBundle("~/bundles/js")
  .Include("~/Content/app.js"));
 bundles.Add(new AngularJsHtmlBundle("~/bundles/myapp/html")
  .Include("~/Content/*.html"));
}

When we request the bundle via Scripts.Render(“~/bundles/myapp/html”) a JavaScript file will be returned with all HTML pages rendered as strings. If we do not want to enable the bundling process, e.g., the debug attribute is present in the web.config, then nothing will be rendered and AngularJS will still make the usual requests to the server. Voila!

A have to mention a few notes in my implementation.

  • We need a way to pass the name of the application module to our bundle. I have chosen to do this via a predefined URL template, i.e. ~/bundles/{appName}/html.
  • Although I use JSON.NET, even the traditional DataContractJsonSerializer should be capable of the string serialization.
  • Be careful with the HTML file IDs. This implementation will make the file IDs with a leading slash in the URL. However, AngularJS is sensitive about this slash. So if you write the template URL of your directive to be “Content/hello.html”, AngularJS will not find it in the template cache and hence a new request will be made.

You can find the source code along with a demo on GitHub.

Source

بیشتر

Share Button

چالش های انتشار خودکار نرم افزارهای جامع سازمانی

چالش های انتشار خودکار نرم افزارهای جامع سازمانی

Deployment Challenges in Enterprise Scenarios

سلام

یه مدتی هست که درگیر Deployment شدم. گفتم بد نیست توی این زمینه یه ذره بنویسم.

همه ی کسانی که برنامه نویسی میکنند خواه نا خواه درگیر مقوله ی Deployment یا Publish نرم افزار میشن.

وقتی تعداد یا حجم کد پروژه ها از یه حدی بیشتر میشه و یا تعداد جاهایی که باید روی اونا نرم افزار رو نصب کرد زیاد میشن، دیگه با روش های سنتی نمیشه کار Deployment را انجام داد و باید این کار را به کامپیوتر سپرد تا به طور اتوماتیک انجام بشه.

کاری که قرار شد من برای اون Automatic-Deployment را راه اندازی کنم شامل بیش از 20 تا پروژه در زمینه ی راهکارهای جامع مالی کارگزاری بورس بود که شامل یک سری Web-Application و Windows-Service میشد. هدف ما این بود که بتوانیم به صورت زمان بندی شده (مثلا هر روز یکبار) یا با یک کلیک، کل این پروژه ها را در جاهای مختلفی که قبلا تعریف شده منتشر (Publish) کنیم.

شاید بعدا در این رابطه بیشتر بنویسم.اما توی این پست فقط سعی دارم به چالش هایی که در مبحث Enterprise-WebApplication-Deployment باهاش مواجه هستیم، اشاره ای داشته باشم:

  1. پروژه ها باید در محیط های مختلفی که از نظر زیر ساخت سخت افزاری و نرم افزاری و امنیتی با هم متفاوت هستند و هر کدام کانفیگ (پیکربندی) خاص خود را دارند منتشر و نصب شوند. برای مثال: developer or test environments, staging-platforms, and production-servers
  2. باید بتوانیم پروژه های مرتبط به هم را در یک مرحله (مثلا با یک کلیک) یا به صورت اتوماتیک و زمان بندی شده (مثلا هر روز) منتشر کنیم.
  3. باید بتوانیم هر بار که کدی به Source-Control اضافه میشه، کل نرم افزارهای وب و ویندوز-سرویس ها را publish کنیم.
  4. باید بتوانیم در هر لحظه، هر نسخه دلخواه از نرم افزار را روی یکی از سرورها publish کنیم.
  5. باید بتوانیم بدون نیاز به ابزارهای توسعه، مثل Visual Studio، توسط شخصی بدون داشتن دانش مربوط به توسعه نرم افزار و با ساده ترین روش ممکن کار انتشار را انجام دهیم. بهترین روش هم از طریق وب است.
  6. باید بتوانیم بر روند انتشار و تنظیم متغیرهای انتشار، کنترل داشته باشیم.
  7. پایگاه داده ها باید بدون از دست دادن داده های قبلی به طور اتوماتیک Update به روز رسانی شوند.
  8. باید بتوانیم قبل از پابلیش و بعد از آن یک سری Command روی سرورها اجرا کنیم (مثلا Start and Stop Windows-Service) و همچنین بتوانیم برخی از فایل ها را اضافه یا حذف کنیم ( مثلا اضافه کردن فایل app_offline.htm قبل از Publish و حذف آن بعد از Publish).
Share Button

به دنبال تیم پروری باشیم نه قهرمان پروری

Share Button