دوره ساخت Microservices با NET Core.
برای رفع این مشکلات، از روشهای توسعهی به همراه ابزارهای یکپارچگی مداوم استفاده میشود. برای نمونه، AppVeyor یکی از سرویسهای ابری یکپارچگی مداوم (Continuous Integration و یا به اختصار CI) است. به کمک آن میتوان یک image از ویندوز سرور را به همراه ابزارهای build، آزمایش و توزیع برنامههای NET. در اختیار داشت. این سرویس، مخزن کد شما را مونیتور کرده و هر زمانیکه تغییری را در آن ایجاد کردید، آنها را به صورت خودکار build و در صورت موفقیت آمیز بودن این عملیات، بستهی نیوگت متناظری را به سایت nuget.org ارسال میکند. بنابراین پس از یکپارچه کردن مخزن کد خود با این نوع سرویسهای یکپارچگی مداوم، دیگر حتی نیازی به build دستی آن نیز نخواهید داشت. همینقدر که کدی را به مخزن کد تحت نظر، commit کنید، مابقی مراحل آن خودکار است.
به همین جهت در این مطلب قصد داریم نحوهی اتصال یک مخزن کد GitHub را به سرویس یکپارچگی مداوم AppVeyor، جهت تولید خودکار بستههای Nuget، بررسی کنیم.
معرفی سرویس ابری AppVeyor
AppVeyor یک راه حل یکپارچگی مداوم چند سکویی است که استفادهی از آن برای پروژههای سورس باز رایگان است و سازگاری فوق العادهای را با محصولات مایکروسافت دارد. برای ورود به آن میتوان از اکانتهای GitHub ،BitBucket و VSTS (Visual Studio Team Services) استفاده کرد.
گردش کاری متداول یکپارچگی مداوم AppVeyor به این صورت است:
الف) با اکانت GitHub خود به آن وارد شوید.
ب) یک مخزن کد GitHub خود را به آن Import کنید.
ج) به مخزن کد GitHub خود یک فایل yml. تنظیمات مخصوص AppVeyor را اضافه کنید.
د) نظارهگر Build و توزیع خودکار پروژهی خود باشید.
ایجاد اکانت و اتصال به مخزن کد GitHub
در ابتدا به صفحهی لاگین آن مراجعه کنید. در اینجا جهت سهولت کار با GitHub و مخازن کد آن، گزینهی GitHub را انتخاب کرده و توسط آن به سیستم وارد شوید:
پس از ورود موفق، گزینهی new project را انتخاب کنید:
در ادامه مخزن کد GitHub و نوع عمومی آنرا انتخاب میکنیم تا AppVeyor بتواند پروژههای آنرا Import کند و همچنین به آنها web hookهایی را اضافه کند تا با اعمال تغییراتی در سمت GitHub، کار اطلاع رسانی آنها به AppVeyor به صورت خودکار صورت گیرد:
پس از آن لیست مخزنهای کد شما در همینجا ارائه میشود تا بتوانید یک یا چند مورد را انتخاب کنید:
انجام تنظیمات عمومی مخزن کد
در صفحهی بعدی، برگهی settings و سپس از منوی کنار صفحهی آن، گزینهی General را انتخاب کنید:
در اینجا اگر پروژهی شما از نوع NET Core. است، گزینهی NET Core .csproj patching. را انتخاب نمائید:
سپس در پایین صفحه بر روی دکمهی Save کلیک کنید.
انتخاب و تنظیم محیط Build
در ادامه در برگهی settings و سپس از منوی کنار صفحهی آن، گزینهی Environment را انتخاب کنید:
در این صفحه، worker image را بر روی VS 2017 قرار دهید و همچنین در قسمت Cached directories and files، مسیر C:\Users\appveyor\.dnx را جهت کش کردن عملیات Build و بالا بردن سرعت آن، مقدار دهی کنید. سپس در پایین صفحه بر روی دکمهی Save کلیک نمائید.
اکنون بر روی گزینهی Build در منوی سمت چپ صفحه کلیک کنید. در اینجا سه حالت msbuild ،script و off را میتوان انتخاب کرد.
- در حالت msbuild، که سادهترین حالت ممکن است، فایل sln. مخزن کد، یافت شده و بر اساس آن به صورت خودکار تمام پروژههای این solution یکی پس از دیگری build خواهند شد. این مورد برای برنامههای Full .NET Framework شاید گزینهی مناسبی باشد.
- حالت script برای پروژههای NET Core. مناسبتر است و در این حالت میتوان کنترل بیشتری را بر روی build داشت. به علاوه این روش بر روی لینوکس هم کار میکند؛ زیرا در آنجا دسترسی به msbuild نداریم.
- حالت off به معنای خاموش کردن عملیات build است.
در اینجا گزینهی cmd را جهت ورود build script انتخاب میکنیم:
سپس دستورات ذیل را جهت ورود به پوشهی پروژهی کتابخانه (جائیکه فایل csproj آن قرار دارد)، بازیابی وابستگیهای پروژه و سپس تولید بستهی نیوگتی از آن، وارد میکنیم:
cd ./src/DNTPersianUtils.Core dotnet restore dotnet pack -c release cd ../..
ذکر ../.. cd در انتهای این دستورات ضروری است. در غیر اینصورت cd بعدی در تنظیماتی دیگر، داخل همین پوشه انجام میشود.
تنظیم اجرای خودکار آزمونهای واحد
در همین صفحه، گزینههای settings -> tests -> script -> cmd را انتخاب و سپس دستورات زیر را وارد کرده و آنرا ذخیره کنید:
cd ./src/DNTPersianUtils.Core.Tests dotnet restore dotnet test cd ../..
تنظیم اطلاع رسانی خودکار از اجرای عملیات
در برگهی settings -> notifications مطابق تنظیمات فوق میتوان نوع email را جهت اطلاع رسانی شکست انجام عملیات یکپارچگی مداوم، انتخاب کرد.
آزمایش Build خودکار
برای آزمایش تنظیماتی که انجام دادیم، به برگهی latest build مراجعه کرده و بر روی دکمهی new build کلیک کنید تا اسکریپتهای build و test فوق اجرا شوند. بدیهی است اجرای بعدی این اسکریپتها خودکار بوده و به ازای هر commit به GitHub، بدون نیاز به مراجعهی مستقیم به appveyor صورت میگیرند.
اضافه کردن نماد AppVeyor به پروژه
در تنظیمات برگهی Settings، گزینهی AppVeyor badge نیز در منوی سمت چپ صفحه، وجود دارد:
در اینجا همان کدهای mark down آنرا انتخاب کرده و به ابتدای فایل readme پروژهی خود اضافه کنید. برای نمونه نماد فعلی (تصویر فوق)، build failing را نمایش میدهد؛ چون سه آزمون واحد آن مشکل دارند و باید اصلاح شوند.
پس از رفع مشکلات پروژه و commit آنها، build و اجرای خودکار آزمونهای واحد آن توسط AppVeyor صورت گرفته و اینبار این نماد به صورت زیر تغییر میکند:
ارسال خودکار بستهی نیوگت تولید شده به سایت nuget.org
برای ارسال خودکار حاصل Build، به سایت نیوگت، نیاز است یک API Key داشته باشیم. به همین جهت به صفحهی مخصوص آن در سایت nuget پس از ورود به سایت آن، مراجعه کرده و یک کلید API جدید را صرفا برای این پروژه تولید کنید (در قسمت Available Packages بستهی پیشینی را که دستی آپلود کرده بودید انتخاب کنید).
در اینجا API Key را ذکر خواهیم کرد. سپس در پایین صفحه بر روی دکمهی Save کلیک کنید.
همچنین نیاز است مشخص کنیم که بستههای nupkg تولید شده در چه مسیری قرار دارند. به همین جهت در قسمت settings -> artifacts مسیر پوشهی bin نهایی را ذکر میکنیم:
این مورد را نیز با کلیک بر روی دکمهی Save ذخیره کنید.
اکنون اگر نگارش جدیدی را به GitHub ارسال کنیم (تغییر VersionPrefix در فایل csproj و سپس commit آن)، پس از Build پروژه، بستهی نیوگت آن نیز به صورت خودکار تولید شده و به سایت nuget.org ارسال میشود. لاگ آنرا در پایین صفحهی برگهی latest build میتوانید مشاهده کنید.
ساده سازی مراحل تنظیمات AppVeyor
در صفحهی settings، در منوی سمت چپ آن، گزینهی export YAML نیز وجود دارد. در اینجا میتوان تمام تنظیمات انجام شدهی فوق را با فرمت yml. دریافت کرد و سپس این فایل را به ریشهی مخزن کد خود افزود. با وجود این فایل، دیگر نیازی به طی کردن دستی هیچکدام از مراحل فوق نیست.
برای نمونه فایل appveyor.yml نهایی مطابق با توضیحات این مطلب، چنین محتوایی را دارد:
version: 1.0.{build} image: Visual Studio 2017 dotnet_csproj: patch: true file: '**\*.csproj' version: '{version}' package_version: '{version}' assembly_version: '{version}' file_version: '{version}' informational_version: '{version}' cache: C:\Users\appveyor\.dnx build_script: - cmd: >- cd ./src/DNTPersianUtils.Core dotnet restore dotnet pack -c release cd ../.. test_script: - cmd: >- cd ./src/DNTPersianUtils.Core.Tests dotnet restore dotnet test cd ../.. artifacts: - path: ./src/DNTPersianUtils.Core/bin/release/*.nupkg name: NuGet deploy: - provider: NuGet api_key: secure: xyz skip_symbols: true notifications: - provider: Email to: - me@yahoo.com on_build_success: false on_build_failure: true on_build_status_changed: true
یک نکته: api_key ذکر شدهی در اینجا در قسمت secure، رمزنگاری شدهاست. برای تولید آن میتوانید از مسیر https://ci.appveyor.com/tools/encrypt استفاده کنید. به این صورت مشکلی با عمومی کردن فایل appveyor.yml خود در GitHub نخواهید داشت.
پیاده سازی الگوی طراحی Specification
- https://aspnetboilerplate.com/Pages/Documents/Specifications
- http://www.agiledevelopment.ir/ebook/design-pattern/business-logic-layer-patterns/applying-organization-patterns/specification/
- http://www.agiledevelopment.ir/ebook/design-pattern/business-logic-layer-patterns/applying-organization-patterns/composite/
سری مقدماتی داتنت بر روی Azure
.NET on Azure for Beginners
8 videos
.NET on Azure for Beginners will teach you the basics of Azure and how to leverage its services and features to build amazing cloud applications. You will learn how to deploy web apps, work with storage and data, authenticate and use Managed Identity, harness the power of containers, and even deploy with GitHub Actions. By the end of this series, you will have the skills and confidence to start developing your own .NET applications on Azure!
بررسی GitHub Actions
کتاب رایگان R Programming Succinctly
The R programming language on its own is a powerful tool that can perform thousands of statistical tasks, but by writing programs in R, you gain tremendous power and flexibility to extend its base functionality. Senior Succinctly series author and editor James McCaffrey shows you how in R Programming Succinctly.
- Getting Started
- Vectors and Functions
- Object-Oriented Programming
- Permutations and Combinations
- Advanced R Programming
امکانات جدید سی شارپ 9
سی شارپ 9 امکانات و بهبودهای جدید را اضافه خواهد کرد :
- Records
- Init only setters
- Top-level statements
- Pattern matching enhancements
- Native sized integers
- Function pointers
- Suppress emitting localsinit flag
- Target-typed new expressions
- static anonymous functions
- Target-typed conditional expressions
- Covariant return types
- Extension
GetEnumerator
support forforeach
loops - Lambda discard parameters
- Attributes on local functions
- Module initializers
- New features for partial methods
این نسخه بر روی دات نت 5 پشتیبانی خواهد شد برای اطلاعات بیشتر ^
WebKit بر روی GitHub
On June 23rd, the WebKit project froze its Subversion tree and transitioned management and interaction with our source code to git
on GitHub.