Jenkins ile Proje Derlemek

  

       Evden Buluta serisinin bu bölümünde Jenkins ile build ve deploy işlemlerine başlamadan önce yeni bir proje oluşturup Github'a gizli bir proje (private repository) olarak göndereceğiz. Ardından projemize jenkins üzerinden erişebilmemiz için ssh key'i oluşturup github ve jenkins üzerinden tanımlamalarını yapacağız. Gerekli bağlantıları sağladıktan sonra da jenkins'i çalıştırdığımız Ubuntu sunucu üzerine projeyi derleyip, deploy yapabilmemiz için .Net Core SDK'sını kuracağız. Son olarak da Jenkins'e buildimizi alıp bu makaleyi sonlandıracağız. 

       Eğer sizin elinizde mevcut bir API varsa doğrudan Jenkins üzerinden Github'a erişimi sağladığımız kısıma geçebilirsiniz. Ayrıca farklı bir dilde veya framework'te geliştirmiş olduğunuz bir proje varsa Jenkins'i kurduğunuz ortama ilgili SDK'ları kurduktan sonra benzer işlemleri uygulayabilirsiniz.

Ön Hazırlık

       Geliştirdiğimiz projeleri hızlı bir şekilde deploy yapmak, yazdığımız testleri kontrol etmek ve kod kalitesini sağlamak adına yaygın kullanılan CI/CD aralarından biri olan Jenkins'in kurulumuna geçmeden önce CI/CD nedir diye merak ediyorsanız bu makaleyi okuyabilirsiniz.

       Kurulum yapacağınız Ubuntu sunucu yoksa veya test için yeni bir sunucu oluşturacaksanız bu makaledeki adımları takip edebilirsiniz.

       Jenkins'i henüz kurmadıysanız da bu makaledeki adımları uygulayarak kurabilirsiniz.

 

.Net Core API Oluşturmak

       Yapacağımız basit bir API, appsettings içerisinde yer alan versiyon değerini alıp kullanıcıya dönen bir endpoint içerecek. Bu sayede yaptığımız yeni değişikliklerin Jenkins ile build alınıp deploy edildiğini kolayca görmüş olacağız. Bunun için bilgisayarınıza güncel SDK'yı kurduğunuzdan emin olun. Makale yazıldığı tarihte en güncel sürüm .Net 5.0 kullanılmıştır.

 

       Proje türünü seçtikten sonra bir isim belirleyip aşağıdaki gibi "ASP.NET Core Empty" şablonunu da seçip ilerleyelim.

       Proje oluştuktan sonra ana dizine "Controllers" isminde bir klasör oluşturup, içerisine yeni bir API Controller ekleyelim. 

       Boş bir controller seçip isim olarak "VersionController.cs" verebiliriz.

       Aşağıdaki gibi boş bir API Controller'ının oluşmasını bekliyoruz. 

       Controller içerisine aşağıdaki gibi eklemeleri yapalım. Burada öncelikle bir constructor tanımlayıp appsettings'ten okuma yapacağımız IConfiguration'ı ekliyoruz. Ardından bir GET metodu oluşturup appsettings içerisinde tanımlayacağımız versiyon bilgisini dönüyoruz.

    [Route("api/[controller]")]
    [ApiController]
    public class VersionController : ControllerBase
    {
        public IConfiguration Configuration { get; }

        public VersionController(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        [HttpGet]
        public IActionResult GetVersion()
        {
            return Ok($"Api Version: {Configuration.GetSection("ApiVersion").Value}");
        }
    }

       Ardından appsettings.json içerisine girip versiyon değerini "ApiVersion" :  "1.1.0"  olarak aşağıdaki gibi ekliyoruz. Son halinin aşağıdaki gibi olmasını bekliyoruz.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ApiVersion" :  "1.1.0" 
}

       Oluşturduğumuz .Net projesinin bir API gibi davranabilmesi için Startup.cs içerisine de aşağıdaki eklemeleri yapmamız gerekmekte.

       Bunun için öncelikle "ConfigureServices" içerisine aşağıdaki kodu ekleyelim. Bu eklemeyi yaparak projenin "Controller" içeren class'larını tanımasını sağlarız. 

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

       Ardından yine Startup.cs içerisinde "Configure" altında aşağıdaki kod bloğunu yenisiyle güncelleyelim.

       Eskisi:

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });

       Olması gereken:

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

       Bu işlemi yaparak controller içerisine eklediğimiz metotların endpointleri üzerinden erişebilmemizi sağladık.

       Tüm bu işlemlerin ardından Startup.cs  dosyamızın son halinin aşağıdaki gibi olmasını bekliyoruz.

 public class Startup
    {
       public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

             app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

 

       Şimdi deneme amacıyla projemizi çalıştırıp IIS üzerinden host ettiyseniz "http://localhost:58317/api/version", kestrel üzerinden host ettiyseniz de "http://localhost:5000/api/version" adresine gidip istek yapalım. Aşağıdaki gibi çalıştığını görebilirsiniz.

 

Projenin Github'a Gönderilmesi

       Öncelikle Github üzerinde bir hesabınız yoksa oluşturmanız gerekmekte. Eğer farklı bir IDE veya komut satırı üzerinden ilerlemek isterseniz kendiniz projeyi Github'a push'layabilirsiniz. Visual Studio üzerinden yapmak istiyorsanız aşağıdaki adımları takip edebilirsiniz.

       "Git Changes" sekmesini açıp "Create Git Repository" diyelim.

       Açılan ekranda mevcut github hesabınızı ekleyip aşağıdaki gibi "Private" kutusunu işaretleyip "Create and Push" diyebilirsiniz.

       Oluşturduğumuz proje Github hesabımız altında da yer alacaktır.

 

Kamu Spotu :) 

       Eğer diğer yazılımcılar tarafından da erişilmesinde bir sakınca görmüyorsanız, open-source topluluğuna katkıda bulunmak ve projenizin diğer yazılımcılar tarafından da desteklenmesi için Public olarak paylaşabilirsiniz. Private olarak oluşturduğunuz projeler sadece siz ve projeye eklediğiniz kullanıcılar tarafından görülebilir ve geliştirilebilir. 

 

 

       Public bir projeniz varsa aşağıdaki adımı geçip doğrudan paket kurulumları başlığından devam edebilirsiniz.

 

Jenkins'e Github Private Repository Eklemek

       Eğer Github üzerinde Public bir projeniz varsa doğrudan linki eklemek yeterli oluyor fakat projeniz gizli bir projeyse bunun için Jenkins sunucumuz üzerinden bağlanırken kullanacağız key'i Github üzerinde tanımlayıp yetkilendirmemiz gerekiyor.

       Öncelike Jenkins panelimize girip sol menüde üstte yer alan "New Item" 'ı seçtikten sonra açılan ekranda build setimize bir isim verelim ve "Freestyle project"'i seçelim.

 

Açılan ekranda "Source Code Management" alanıda "Git" seçeneğini seçip Github'da yer alan projenizin SSH linkini yapıştırın.

       Projemiz gizli olduğu için Jenkins erişemediğine dair hata verdi. Eğer herkese açık(public) bir proje ise bu alanda hata almadan devam edebilirsiniz. 

       Erişimi sağlamak için "Add" butonu ile çıkan ilgili yere tıklayalım.