Skip to content
Dokumentatsiya
.NET Core Deployment

.NET Core Deployment: Gitlab CI and Github Actions

Kirish

Ushbu qo'llanmanda .NET Core applicationlarini Gitlab CI va Github Actions yordamida avtomatlashtirilgan holda qanday deploy qilishni ko'rib chiqamiz. Bu qo'llanma DevOps Engineerlar va .NET Developerlar uchun zarur bo'lgan bilim va ko'nikmalar qamrab oladi. Qo'llanma davomida biz .NET loyihalarini qanday tuzlishini, qanday konfiguratsiya qilkishni va secretlar bilan ishlashni ko'rib chiqamiz.

Shuningdek, biz Dockerfile yozishni o'rganamiz va uni samarali ishlashi uchun optimallashtiramiz. Docker asosida konteynerlash jarayonlarini o'zlashtirgach, GitLab CI/CD va GitHub Actions yordamida CI/CD pipeline'larini sozlash va avtomatlashtirish usullarini ko'rib chiqamiz.

Ushbu qo'llanma orqali siz .NET applicationlari uchun CI/CD jarayonlarini muvaffaqiyatli amalga oshirish bo'yicha amaliy yondashuvga ega bo'lasiz va real loyihalarda bu usullarni qo'llash imkoniyatiga ega bo'lasiz.

Ushbu amaliyotda quyidagi .NET application kodlaridan foydalanamiz Gitlab-> gitlab.com/ismoilovdev/productapi (opens in a new tab), Github-> github.com/devops-journey-uz/productapi (opens in a new tab)

.NET platformasi Microsoft tomonidan ishlab chiqilgan bo'lib, birinchi versiyasi 2002-yilda .NET Framework nomi bilan taqdim etilgan. Dastlab, u asosan Windows muhitida ishlash uchun mo'ljallangan edi, vaqt o'tishi bilan, ayniqsa, cloud computing va microservices arxitekturasining rivojlanishi bilan, Microsoft kross-platforma va open-source bo'lgan yangi tizimni yaratishga qaror qildi. Shu tariqa, 2016-yilda .NET Core 1.0 taqdim etildi. U modullashtirilgan, high-performance va container-friendly texnologiya hisoblanadi. Keyinchalik, .NET 5 dan boshlab, Microsoft barcha .NET versiyalarini birlashgan .NET ekotizimiga aylantirdi va .NET Core nomi .NET deb o'zgartirildi. .NET platformasining yangi versiyalari har yili, odatda noyabr oyida chiqariladi. .NET'ning eng so'nggi versiyasi 2024-yil noyabr oyida chiqarilgan .NET 9, joriy LTS versiyasi esa .NET 8 bo'lib, 2023-yil noyabr oyida chiqarilgan.

.NET Core .NET Framework ning davomchisi bo'lib, u monolit arxitektura o'rniga mikroservis va cloud-native applicationlarni yaratishga moslashtirilgan. .NET Framework faqatgina Windows uchun mo'ljallangan bo'lsa, .NET Core platformadan mustaqil bo'lib, Docker, Kubernetes va cloud infratuzilmalariga moslashgan.

.NET Core dasturlarining ishlash muhiti quyidagilardan iborat:

SDK (Software Development Kit) - dasturlarni ishlab chiqish va build qilish uchun kerakli vositalar.

Runtime - kompilyatsiya qilingan ilovani(applicationni) ishga tushirish uchun zaruriy komponentlar.

NuGet Package Manager - .NET Core dasturlarini yaratish va ulash uchun kerakli paketlar.

.NET Core cross-platform bo'lib, uni Windows, Linux va MacOS da ishlatish mumkin. Linux va MacOS muhitida u bash terminal yoki Docker konteynerlar orqali ishlab chiqilishi mumkin, bu esa uni DevOps va cloud-native yechimlar uchun ideal variantga aylantiradi.

Loyihani tushunish

.NET loyihasini muvaffaqiyatli deploy qilish uchun dastlab uning tuzilishini, ishlash prinsipini va muhim konfiguratsiyalarini to'liq tushunish lozim. .NET loyihasi asosan quyidagi tarkibiy qismlardan iborat:

Masalan bizning loyihamiz tuzulishi(.NET 8):

productapi/
├── appsettings.json
├── Dockerfile
├── ProductApi.csproj
├── Program.cs
├── Readme.md
├── Controllers
│   └── ProductController.cs
├── Data
│   └── AppDbContext.cs
├── Migrations
│   ├── 20250212065937_InitialCreate.cs
│   ├── 20250212065937_InitialCreate.Designer.cs
│   └── AppDbContextModelSnapshot.cs
├── Models
│   └── Product.cs
├── Properties
│   └── launchSettings.json
└── Services
    ├── IProductService.cs
    └── ProductService.cs

Bu loyiha .NET 8 versiyasida yaratilgan va Entity Framework Core yordamida PostgreSQL bazasiga ulanadi. Loyiha productlarni manage qilish uchun yaratilgan oddiy CRUD API hisoblanadi. Testlash uchun Swaaqer yordamida Swagger UI qo'llanilgan.

.NET Core loyihalari odatda quyidagi asosiy papkalar va fayllardan tashkil topgan bo'ladi:

  • Controllers/ - API yoki MVC ilovalarida so'rovlarni(requestlarni) boshqaruvchi classlar joylashadi.

  • Models/ - ma'lumotlar strukturasi (model) classlari.

  • Data/ - kontekst fayli (masalan, AppDbContext.cs) va ma'lumotlar bazasi bilan bog'liq logika.

  • Services/ - biznes logika (servis layerlari).

  • Migrations/ - Entity Framework orqali generatsiya qilingan migratsiyalar.

Program.cs va Startup.cs (yoki builder.Services sintaksisi) applicationing asosiy ishga tushirish nuqtasi va konfiguratsiyasi. appsettings.json, appsettings.Development.json - bu konfiguratsiya fayllari hisoblanadi.

ASP.NET Core quyidagi application turlarini yaratishga imkon beradi:

  • Web API - RESTful API yaratish uchun.

  • MVC (Model-View-Controller) - klassik web-ilovalar uchun.

  • Console Applications - backround servicelar, servislar yoki oddiy dasturlar uchun.

Konfiguratsiya fayllari orasida eng muhimlaridan biri appsettings.json bo'lib, unda connection string, log level, custom konfiguratsiyalar saqlanadi. Har bir environment uchun alohida fayl (appsettings.Development.json, appsettings.Production.json) bo'lishi mumkin.

Dependency Injection (DI) .NET Core da by-default qo'llab-quvvatlanadi. Startup.cs yoki Program.cs da services.AddTransient, AddScoped, AddSingleton orqali servislar DI konteynerga qo'shiladi va kontrollerlarda konstruktor orqali chaqiriladi.

Deployment vaqtida application turli envikronmentlarda ishlashi mumkin (Development, Staging, Production), shuning uchun konfiguratsiyalarni appsettings.{Environment}.json fayllari orqali ajratib borish tavsiya qilinadi.

Connection string larni appsettings.json yoki Environment Variables orqali boshqarish mumkin. Maxfiy ma'lumotlar (masalan, parollar) Secret Manager, Azure Key Vault, Hashicorp Vault yoki environment variable orqali xavfsiz saqlanishi kerak.

Logging uchun .NET Core ichki ILogger interfeysini qo'llab-quvvatlaydi. Qo'shimcha logging librarylari sifatida Serilog, NLog, yoki Application Insights ishlatilishi mumkin.