Bu galgi postimizda .NET dasturiga CI/CD (Continues Ingegration/Continues Delivery) qurishni ko’rib chiqamiz. Ushbu postda aynan Github Actions workflowlar orqali CI/CD yasaymiz.

Avvalo CI/CD nimalarni o’z ichiga olishini aniqlab olamiz. CI/CD tushunchasi juda keng qamrovli tushincha va dastur murakkabligiga juda ko’plab yumushlarni o’z ichiga qamrab oladi.

Qisqacha qilib aytganda esa, CI/CD - dasturdagi yangi o’zgarishlarni silliqqina bitta oqimda foydalanuvchiga yetib borishini ta’minlab beruvchi avtomatlashtirilgan yumushlar ketma-ketligi. Yangi kod yetib kelishi bilanoq minimal inson omili orqali shu kod foydalanuvchiga yetib borishini taminlaydi.

Building, Unit Testing, Integration Testing va Deployment kabilar eng ko’p ishlatiladigan CI/CD yumushlar hisoblanadi. Bugungi postda biz Github Actions orqali yangi qo’shilgan kodlarni silliqlik bilan Digital Ocean bulut servisidagi (🤡) Linux container ichiga deploy qilamiz.

Agar meni kontentlarim sizlarga yoqayotgan bolsa, meni ijtimoiy tarmoqlarimga qo’shilishni unutmang!

.NET API va xUnit proyektlar yaratish

Bu qisimda oddiygina matematik amal bajaradigan API va shu amal to’g’ri bajarilayotganini tekshiradigan Unit Test yozib olamiz.

Qoyidagi komandalarni terib loyihani boshlaymiz.

mkdir MathApi; cd MathApi           # yangi papka yaratib olish uchun
dotnet new gitignore                # gitignore file ni birinchi yaratib olamiz
dotnet new sln                      # solution file yaratib olamiz
dotnet new webapi -o MathApi -f net6.0       # api project
dotnet new xunit -o MathApi.Tests -f net6.0  # test project

dotnet sln add MathApi/MathApi.csproj              # API ni solution ga qo'shamiz
dotnet sln add MathApi.Tests/MathApi.Tests.csproj  # testni ham solutionga qo'shamiz

dotnet build            # hammasi ko'ngildagiday kechgani tekshiramiz

# test project ga API project ni ulash va kerakli kutubxonalarni o'rnatish
dotnet add MathApi.Tests/MathApi.Tests.csproj reference MathApi/MathApi.csproj
dotnet add MathApi.Tests/MathApi.Tests.csproj package Microsoft.Extensions.DependencyInjection -v 6.0.0

<aside> 💡 Loyihalar yaratilgandan keyin API va Test loyihalar ichiga kirib template kodlarni o’chirib tashlashni unutmang.

</aside>

MathApi

Birinchi navbatda MathApi loyihani tayyor holatga keltiramiz. Buning uchun avval template kodlarni o’chirib tashlagach bittagina MathController.cs nomli kontroller yaratamiz. Bu controller MathService orqali berilgan ikkita long tipidagi sonlarni yig’inidisini qaytaradi.

IMathService.cs kontrakti.

namespace MathApi.Services;

public interface IMathService
{
    Task<long> AddAsync(long a, long b);
}