آمنوتجیکارا
آمنوتجیکارا
خواندن ۲ دقیقه·۵ سال پیش

Build کردن خودکار پروژه ها با Cake

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

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

مثلا من یه پروژه دارم که کانفیگ های مخصوصی برای دات نت 4، 4.5، 4.6، 4.7، 4.8 و دات کور 3 داره.

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

راه حل اینه که بیایم از یه اسکریپت برای بیلد کردن پروژه استفاده کنیم که بصورت خودکار این مراحل رو انجام بده. هم خودمون میتونیم تو پاورشل یه اسکریپت بصورت دستی بنویسیم و کارمون انجام بدیم هم میتونیم از اسکریپت های آماده مثل کیک Cake که کراس پلتفرم هم هستش برای اینکار استفاده بکنیم.

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

Invoke-WebRequest https://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1

برای مک از دستور زیر استفاده کنید

curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/osx

و برای لینوکس از این دستور

curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/linux

حالا یه فایل به اسم Build.ps1 دارید و یه فایل به اسم Build.cake

وارد فایل Build.cake بشید و فایل بیلد رو کانفیگ کنید.

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

var target = Argument(&quottarget&quot, &quotBuild&quot);
Task(&quotClean&quot)
.Does(() =>
{
CleanDirectory(&quotlib&quot);
});
Task(&quotBuild&quot)
.IsDependentOn(&quotClean&quot)
.Does(() =>
{
var vsLatest = VSWhereLatest();
var msBuildPath = vsLatest?.CombineWithFilePath(&quot./MSBuild/Current/Bin/MSBuild.exe&quot);
NuGetRestore(&quotGanjineh/Ganjineh/Ganjineh.csproj&quot);
var settingsNet47 = new MSBuildSettings
{
Configuration = &quotRelease&quot,
ToolPath = msBuildPath,
}.WithProperty(&quotOutputPath&quot, MakeAbsolute(Directory(&quotlib/net&quot)).FullPath);
var settingsCore30 = new DotNetCoreBuildSettings
{
Framework = &quotnetcoreapp3.1&quot,
Configuration = &quotRelease&quot,
OutputDirectory = &quotlib/netcoreapp3.1&quot
};
MSBuild(&quotGanjineh/Ganjineh/Ganjineh.csproj&quot, settingsNet47);
DotNetCoreBuild(&quotmahdi/mahdi.csproj&quot, settingsCore30);
});
RunTarget(target);

خب توی کانفیگ بالا اول پروژه رو کلین کردیم که خروجی های قبلی پاک بشه بعد داخل Task مربوط به بیلدT اول مسیر MsBuild رو معرفی میکنیم، بعدش از NugetRestore استفاده میکنیم تا اگر پروژه بسته ناگت داشت ریستور بشه (اگه بسته ناگت ندارید این کد رو میتونید حذف کنید) بعدش کانفیگ دات نت رو مشخص میکنیم که میخوایم ریلیز باشه و در پوشه ای به اسم lib/net خروجی گرفته بشه. برای دات نت کور 3 هم یه کانفیگ درست میکنیم و نسخه فریمورکش رو هم مشخص میکنیم. در پایان با دستور MSBuild پروژه دات نت رو بیلد میکنیم و با دستور DotNetCoreBuild پروژه دات نت کور 3 رو بیلد میکنیم.

حالا کافیه فایل رو ذخیره کنیم و هر موقع که نیاز به بیلد کردن پروژه داشتیم دستور زیر رو داخل پاورشل اجرا کنیم

.\Build.ps1


برنامه نویسیتجربهبیلدویژوال استودیو
شاید از این پست‌ها خوشتان بیاید