{"id":16389,"date":"2026-08-19T23:11:51","date_gmt":"2026-08-19T20:11:51","guid":{"rendered":"https:\/\/www.ihs.com.tr\/blog\/?p=16389"},"modified":"2026-08-19T23:11:51","modified_gmt":"2026-08-19T20:11:51","slug":"ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile","status":"publish","type":"post","link":"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/","title":{"rendered":"CI\/CD \u0130\u00e7in Sunucu Ortam\u0131 Haz\u0131rlama (Jenkins ile)"},"content":{"rendered":"<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri, h\u0131z ve verimlilik \u00fczerine kuruludur. Bu s\u00fcre\u00e7lerin bel kemi\u011fini olu\u015fturan CI\/CD (S\u00fcrekli Entegrasyon ve S\u00fcrekli Da\u011f\u0131t\u0131m\/Teslimat), otomasyon sayesinde geli\u015ftiricilerin kod de\u011fi\u015fikliklerini h\u0131zl\u0131 ve g\u00fcvenilir bir \u015fekilde kullan\u0131c\u0131lara ula\u015ft\u0131rmas\u0131n\u0131 sa\u011flar. Bu otomasyonun merkezinde ise genellikle Jenkins gibi g\u00fc\u00e7l\u00fc ara\u00e7lar yer al\u0131r. Jenkins, a\u00e7\u0131k kaynak kodlu bir otomasyon sunucusudur ve yaz\u0131l\u0131m\u0131n derlenmesinden test edilmesine, paketlenmesinden da\u011f\u0131t\u0131m\u0131na kadar t\u00fcm ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc otomatikle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f bir Jenkins sunucusu, geli\u015ftirme ekiplerinin zaman alan manuel i\u015flemleri ortadan kald\u0131rarak daha yarat\u0131c\u0131 ve \u00f6nemli g\u00f6revlere odaklanmas\u0131na olanak tan\u0131r. Bu makalede, CI\/CD s\u00fcre\u00e7leri i\u00e7in sa\u011flam bir temel olu\u015fturacak \u015fekilde bir sunucu ortam\u0131n\u0131n nas\u0131l haz\u0131rlanaca\u011f\u0131n\u0131 ve Jenkins&#8217;in bu ortama nas\u0131l kurulup yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m ele alaca\u011f\u0131z.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_77 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0130\u00e7erik Tablosu<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a86e1db5cc38\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\" id=\"ez-toc-cssicon-toggle-item-6a86e1db5cc38\" aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#CICD-ve-Jenkinse-Giris\" >CI\/CD ve Jenkins&#8217;e Giri\u015f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Surekli-Entegrasyon-Continuous-Integration-%E2%80%93-CI-Nedir\" >S\u00fcrekli Entegrasyon (Continuous Integration &#8211; CI) Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Surekli-DagitimTeslimat-Continuous-DeliveryDeployment-%E2%80%93-CD-Nedir\" >S\u00fcrekli Da\u011f\u0131t\u0131m\/Teslimat (Continuous Delivery\/Deployment &#8211; CD) Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Nedir-ve-CICD-Sureclerindeki-Rolu\" >Jenkins Nedir ve CI\/CD S\u00fcre\u00e7lerindeki Rol\u00fc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Otomasyonun-Yazilim-Gelistirme-Surecine-Katkilari\" >Otomasyonun Yaz\u0131l\u0131m Geli\u015ftirme S\u00fcrecine Katk\u0131lar\u0131<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Sunucu-Ortami-Icin-On-Hazirliklar-ve-Gereksinimler\" >Sunucu Ortam\u0131 \u0130\u00e7in \u00d6n Haz\u0131rl\u0131klar ve Gereksinimler<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Donanim-Ozelliklerinin-Belirlenmesi-CPU-RAM-Disk\" >Donan\u0131m \u00d6zelliklerinin Belirlenmesi (CPU, RAM, Disk)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Isletim-Sistemi-Secimi-ve-Kurulumu-UbuntuCentOS-Onerileri\" >\u0130\u015fletim Sistemi Se\u00e7imi ve Kurulumu (Ubuntu\/CentOS \u00d6nerileri)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Gerekli-Temel-Yazilimlarin-Kurulumu\" >Gerekli Temel Yaz\u0131l\u0131mlar\u0131n Kurulumu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Guvenlik-Duvari-Firewall-ve-Port-Yapilandirmasi\" >G\u00fcvenlik Duvar\u0131 (Firewall) ve Port Yap\u0131land\u0131rmas\u0131<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkinsin-Kurulumu-ve-Ilk-Yapilandirmasi\" >Jenkins&#8217;in Kurulumu ve \u0130lk Yap\u0131land\u0131rmas\u0131<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Kurulum-Yontemleri\" >Jenkins Kurulum Y\u00f6ntemleri<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Ilk-Kurulum-Sihirbazinin-Tamamlanmasi\" >\u0130lk Kurulum Sihirbaz\u0131n\u0131n Tamamlanmas\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Global-Sistem-Ayarlari-Manage-Jenkins\" >Jenkins Global Sistem Ayarlar\u0131 (Manage Jenkins)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Temel-Bilesenleri-ve-Kavramlari\" >Jenkins Temel Bile\u015fenleri ve Kavramlar\u0131<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Proje-Job-Turleri\" >Jenkins Proje (Job) T\u00fcrleri<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Pipeline-ve-Jenkinsfile\" >Jenkins Pipeline ve Jenkinsfile<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Eklentilerin-Plugins-Yonetimi-ve-Onemi\" >Eklentilerin (Plugins) Y\u00f6netimi ve \u00d6nemi<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Agent-NodeSlave-Mimarisi\" >Jenkins Agent (Node\/Slave) Mimarisi<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Ornek-Bir-CICD-Pipelinei-Olusturma-Adimlari\" >\u00d6rnek Bir CI\/CD Pipeline&#8217;\u0131 Olu\u015fturma Ad\u0131mlar\u0131<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Versiyon-Kontrol-Sistemi-GitHubGitLab-ile-Entegrasyon\" >Versiyon Kontrol Sistemi (GitHub\/GitLab) ile Entegrasyon<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Basit-Bir-Jenkinsfile-Yazimi\" >Basit Bir Jenkinsfile Yaz\u0131m\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Pipelinei-Calistirma-ve-Sonuclari-Izleme\" >Pipeline&#8217;\u0131 \u00c7al\u0131\u015ft\u0131rma ve Sonu\u00e7lar\u0131 \u0130zleme<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Gelismis-Entegrasyonlar-ve-Yetenekler\" >Geli\u015fmi\u015f Entegrasyonlar ve Yetenekler<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Docker-ile-Konteyner-Tabanli-Surecler\" >Docker ile Konteyner Tabanl\u0131 S\u00fcre\u00e7ler<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Kod-Kalitesi-ve-Guvenlik-Analizi-Entegrasyonlari-SonarQube-vb\" >Kod Kalitesi ve G\u00fcvenlik Analizi Entegrasyonlar\u0131 (SonarQube vb.)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Artifact-Yonetimi-Nexus-Artifactory-vb\" >Artifact Y\u00f6netimi (Nexus, Artifactory vb.)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Guvenlik-Bakim-ve-En-Iyi-Uygulamalar\" >G\u00fcvenlik, Bak\u0131m ve En \u0130yi Uygulamalar<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Kullanici-Yonetimi-ve-Rol-Tabanli-Yetkilendirme\" >Kullan\u0131c\u0131 Y\u00f6netimi ve Rol Tabanl\u0131 Yetkilendirme<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Kimlik-Bilgilerinin-Credentials-Guvenli-Saklanmasi\" >Kimlik Bilgilerinin (Credentials) G\u00fcvenli Saklanmas\u0131<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-Yedekleme-ve-Geri-Yukleme-Stratejileri\" >Jenkins Yedekleme ve Geri Y\u00fckleme Stratejileri<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Jenkins-ve-Eklentilerin-Duzenli-Olarak-Guncellenmesi\" >Jenkins ve Eklentilerin D\u00fczenli Olarak G\u00fcncellenmesi<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#CICD-Altyapisi-Icin-Neden-IHS-Telekomu-Tercih-Etmelisiniz\" >CI\/CD Altyap\u0131s\u0131 \u0130\u00e7in Neden \u0130HS Telekom&#8217;u Tercih Etmelisiniz?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Yuksek-Performansli-ve-Kesintisiz-Sunucu-Hizmetleri\" >Y\u00fcksek Performansl\u0131 ve Kesintisiz Sunucu Hizmetleri<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Ihtiyaca-Gore-Olceklenebilir-Sanal-Sunucu-VDSVPS-Secenekleri\" >\u0130htiyaca G\u00f6re \u00d6l\u00e7eklenebilir Sanal Sunucu (VDS\/VPS) Se\u00e7enekleri<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#Guclu-Ag-Altyapisi-ve-Dusuk-Gecikme-Sureleri\" >G\u00fc\u00e7l\u00fc A\u011f Altyap\u0131s\u0131 ve D\u00fc\u015f\u00fck Gecikme S\u00fcreleri<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/www.ihs.com.tr\/blog\/ci-cd-icin-sunucu-ortami-hazirlama-jenkins-ile\/#724-Uzman-Teknik-Destek-ve-Danismanlik-Hizmeti\" >7\/24 Uzman Teknik Destek ve Dan\u0131\u015fmanl\u0131k Hizmeti<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"CICD-ve-Jenkinse-Giris\"><\/span>CI\/CD ve Jenkins&#8217;e Giri\u015f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda rekabet avantaj\u0131 elde etmek, kaliteli kodu m\u00fcmk\u00fcn olan en k\u0131sa s\u00fcrede son kullan\u0131c\u0131ya ula\u015ft\u0131rmaktan ge\u00e7er. CI\/CD metodolojisi, bu hedefe ula\u015fmay\u0131 sa\u011flayan modern bir yakla\u015f\u0131md\u0131r. Bu b\u00f6l\u00fcm, CI\/CD&#8217;nin temel ta\u015flar\u0131n\u0131 ve bu s\u00fcre\u00e7lerde Jenkins&#8217;in neden kilit bir rol oynad\u0131\u011f\u0131n\u0131 a\u00e7\u0131klamaktad\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Surekli-Entegrasyon-Continuous-Integration-%E2%80%93-CI-Nedir\"><\/span>S\u00fcrekli Entegrasyon (Continuous Integration &#8211; CI) Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>S\u00fcrekli Entegrasyon, birden fazla geli\u015ftiricinin \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 bir projede, kod de\u011fi\u015fikliklerinin d\u00fczenli olarak merkezi bir depoda (repository) birle\u015ftirilmesi ve otomatik olarak derlenip test edilmesi s\u00fcrecidir. Her bir geli\u015ftirici, yapt\u0131\u011f\u0131 de\u011fi\u015fikli\u011fi ana kod taban\u0131na entegre etti\u011finde, bir otomasyon arac\u0131 bu de\u011fi\u015fikli\u011fi alg\u0131lar, projeyi derler ve \u00f6nceden tan\u0131mlanm\u0131\u015f test senaryolar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r. Bu yakla\u015f\u0131m\u0131n temel amac\u0131, entegrasyon sorunlar\u0131n\u0131 erken a\u015famada tespit etmek ve \u00e7\u00f6zmektir. B\u00f6ylece, projenin ilerleyen a\u015famalar\u0131nda ortaya \u00e7\u0131kabilecek b\u00fcy\u00fck ve karma\u015f\u0131k birle\u015ftirme (merge) problemlerinin \u00f6n\u00fcne ge\u00e7ilir ve kod kalitesi s\u00fcrekli olarak y\u00fcksek tutulur.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Surekli-DagitimTeslimat-Continuous-DeliveryDeployment-%E2%80%93-CD-Nedir\"><\/span>S\u00fcrekli Da\u011f\u0131t\u0131m\/Teslimat (Continuous Delivery\/Deployment &#8211; CD) Nedir?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>S\u00fcrekli Teslimat (Continuous Delivery), CI s\u00fcrecini bir ad\u0131m \u00f6teye ta\u015f\u0131yarak, ba\u015far\u0131l\u0131 bir \u015fekilde test edilen kod de\u011fi\u015fikliklerinin otomatik olarak bir &#8220;\u00fcretim benzeri&#8221; (staging) ortama da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar. Bu a\u015famada kod, son kullan\u0131c\u0131ya sunulmaya tamamen haz\u0131rd\u0131r. Da\u011f\u0131t\u0131m karar\u0131 ise genellikle manuel bir onayla verilir. S\u00fcrekli Da\u011f\u0131t\u0131m (Continuous Deployment) ise bu s\u00fcreci daha da otomatikle\u015ftirir. Ba\u015far\u0131l\u0131 olan her kod de\u011fi\u015fikli\u011fi, herhangi bir manuel m\u00fcdahaleye gerek kalmadan do\u011frudan \u00fcretim (production) ortam\u0131na, yani son kullan\u0131c\u0131ya ula\u015ft\u0131r\u0131l\u0131r. Bu iki pratik aras\u0131ndaki temel fark, \u00fcretim ortam\u0131na ge\u00e7i\u015fin manuel bir tetiklemeyle mi yoksa tamamen otomatik olarak m\u0131 yap\u0131ld\u0131\u011f\u0131d\u0131r. Her ikisi de yaz\u0131l\u0131m teslimat s\u00fcrecini h\u0131zland\u0131r\u0131r ve riski azalt\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-Nedir-ve-CICD-Sureclerindeki-Rolu\"><\/span>Jenkins Nedir ve CI\/CD S\u00fcre\u00e7lerindeki Rol\u00fc<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins, Java tabanl\u0131, a\u00e7\u0131k kaynak kodlu ve olduk\u00e7a pop\u00fcler bir otomasyon sunucusudur. Geni\u015f eklenti (plugin) ekosistemi sayesinde, yaz\u0131l\u0131m geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcndeki hemen her g\u00f6revi otomatikle\u015ftirebilir. CI\/CD s\u00fcre\u00e7lerinde Jenkins, merkezi bir orkestrat\u00f6r g\u00f6revi g\u00f6r\u00fcr. Kod deposundaki de\u011fi\u015fiklikleri izler, CI s\u00fcrecini tetikler (derleme, test), ba\u015far\u0131l\u0131 olursa CD s\u00fcrecini ba\u015flat\u0131r (paketleme, da\u011f\u0131t\u0131m) ve sonu\u00e7lar hakk\u0131nda ekibe bildirimler g\u00f6nderir. Esnek yap\u0131s\u0131, farkl\u0131 programlama dilleri, test framework&#8217;leri ve da\u011f\u0131t\u0131m ortamlar\u0131 ile kolayca entegre olabilmesini sa\u011flar. Bu nedenle Jenkins, CI\/CD pipeline&#8217;lar\u0131n\u0131 (i\u015f ak\u0131\u015flar\u0131n\u0131) olu\u015fturmak ve y\u00f6netmek i\u00e7in end\u00fcstri standard\u0131 haline gelmi\u015f ara\u00e7lardan biridir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Otomasyonun-Yazilim-Gelistirme-Surecine-Katkilari\"><\/span>Otomasyonun Yaz\u0131l\u0131m Geli\u015ftirme S\u00fcrecine Katk\u0131lar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Otomasyon, CI\/CD&#8217;nin temel ta\u015f\u0131d\u0131r ve yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecine devrim niteli\u011finde katk\u0131lar sunar. Manuel olarak yap\u0131lan tekrarlay\u0131c\u0131 g\u00f6revlerin (derleme, test \u00e7al\u0131\u015ft\u0131rma, sunucuya dosya kopyalama vb.) makinelere devredilmesi, insan hatas\u0131 riskini minimize eder. Bu sayede s\u00fcre\u00e7ler daha tutarl\u0131, g\u00fcvenilir ve h\u0131zl\u0131 hale gelir. Geli\u015ftiriciler, zamanlar\u0131n\u0131 kodlama ve problem \u00e7\u00f6zme gibi daha yarat\u0131c\u0131 i\u015flere ay\u0131rabilirler. Otomasyon, geri bildirim d\u00f6ng\u00fcs\u00fcn\u00fc de \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r; bir kod de\u011fi\u015fikli\u011finin neden oldu\u011fu bir hata, dakikalar i\u00e7inde tespit edilebilir. Bu da daha h\u0131zl\u0131 problem \u00e7\u00f6z\u00fcm\u00fc, daha y\u00fcksek yaz\u0131l\u0131m kalitesi ve sonu\u00e7 olarak daha fazla m\u00fc\u015fteri memnuniyeti anlam\u0131na gelir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Sunucu-Ortami-Icin-On-Hazirliklar-ve-Gereksinimler\"><\/span>Sunucu Ortam\u0131 \u0130\u00e7in \u00d6n Haz\u0131rl\u0131klar ve Gereksinimler<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Jenkins&#8217;in verimli ve kesintisiz \u00e7al\u0131\u015fabilmesi i\u00e7in \u00fczerine kurulaca\u011f\u0131 sunucu ortam\u0131n\u0131n do\u011fru yap\u0131land\u0131r\u0131lmas\u0131 kritik \u00f6neme sahiptir. Performans sorunlar\u0131 ya\u015famamak ve gelecekteki ihtiya\u00e7lar\u0131 kar\u015f\u0131layabilmek ad\u0131na donan\u0131m, i\u015fletim sistemi ve temel yaz\u0131l\u0131mlar\u0131n dikkatlice se\u00e7ilmesi gerekir. Bu b\u00f6l\u00fcm, ideal bir Jenkins <a href=\"https:\/\/www.ihs.com.tr\/sunucu-kiralama\/\" target=\"_blank\">sunucu<\/a> ortam\u0131 i\u00e7in yap\u0131lmas\u0131 gereken \u00f6n haz\u0131rl\u0131klar\u0131 detayland\u0131rmaktad\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Donanim-Ozelliklerinin-Belirlenmesi-CPU-RAM-Disk\"><\/span>Donan\u0131m \u00d6zelliklerinin Belirlenmesi (CPU, RAM, Disk)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins sunucusunun donan\u0131m gereksinimleri, \u00fczerinde \u00e7al\u0131\u015facak i\u015f (job) say\u0131s\u0131, bu i\u015flerin karma\u015f\u0131kl\u0131\u011f\u0131 ve ayn\u0131 anda \u00e7al\u0131\u015facak pipeline say\u0131s\u0131 gibi fakt\u00f6rlere ba\u011fl\u0131d\u0131r. Genel bir ba\u015flang\u0131\u00e7 noktas\u0131 olarak a\u015fa\u011f\u0131daki \u00f6zellikler \u00f6nerilebilir:<\/p>\n<ul>\n<li><b>CPU:<\/b> K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projeler i\u00e7in 2-4 vCPU yeterli olabilir. Ancak ayn\u0131 anda \u00e7ok say\u0131da derleme veya test i\u015flemi yap\u0131lacaksa, 8 vCPU veya daha fazlas\u0131 gerekebilir.<\/li>\n<li><b>RAM:<\/b> Jenkins&#8217;in kendisi ve \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131 s\u00fcre\u00e7ler i\u00e7in bellek hayati \u00f6nem ta\u015f\u0131r. Minimum 4 GB RAM \u00f6nerilir, ancak orta ve b\u00fcy\u00fck \u00f6l\u00e7ekli ortamlar i\u00e7in 8 GB ile 16 GB aras\u0131 veya daha fazlas\u0131 idealdir. \u00d6zellikle Docker gibi konteyner teknolojileri kullan\u0131lacaksa RAM ihtiyac\u0131 artacakt\u0131r.<\/li>\n<li><b>Disk:<\/b> Jenkins, i\u015f ge\u00e7mi\u015flerini, artifact&#8217;leri (\u00e7\u0131kt\u0131 dosyalar\u0131) ve \u00e7al\u0131\u015fma alanlar\u0131n\u0131 diskte saklar. Bu nedenle h\u0131zl\u0131 bir disk (SSD) performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Ba\u015flang\u0131\u00e7 i\u00e7in en az 50 GB disk alan\u0131 \u00f6nerilir, ancak projelerin b\u00fcy\u00fckl\u00fc\u011f\u00fcne ve artifact saklama politikalar\u0131na g\u00f6re bu ihtiya\u00e7 y\u00fczlerce GB&#8217;\u0131 bulabilir.<\/li>\n<\/ul>\n<div class=\"karsilastirma\">\n<table>\n<thead>\n<tr>\n<th>Ortam B\u00fcy\u00fckl\u00fc\u011f\u00fc<\/th>\n<th>\u00d6nerilen vCPU<\/th>\n<th>\u00d6nerilen RAM<\/th>\n<th>\u00d6nerilen Disk Alan\u0131 (SSD)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>K\u00fc\u00e7\u00fck (1-5 Proje)<\/td>\n<td>2 vCPU<\/td>\n<td>4 GB<\/td>\n<td>50 GB+<\/td>\n<\/tr>\n<tr>\n<td>Orta (5-20 Proje)<\/td>\n<td>4-8 vCPU<\/td>\n<td>8-16 GB<\/td>\n<td>100 GB+<\/td>\n<\/tr>\n<tr>\n<td>B\u00fcy\u00fck (20+ Proje \/ \u00c7oklu Agent)<\/td>\n<td>8+ vCPU<\/td>\n<td>16+ GB<\/td>\n<td>250 GB+<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"Isletim-Sistemi-Secimi-ve-Kurulumu-UbuntuCentOS-Onerileri\"><\/span>\u0130\u015fletim Sistemi Se\u00e7imi ve Kurulumu (Ubuntu\/CentOS \u00d6nerileri)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins, Java&#8217;n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 hemen her i\u015fletim sisteminde \u00e7al\u0131\u015fabilir. Ancak sunucu ortamlar\u0131nda kararl\u0131l\u0131klar\u0131, geni\u015f topluluk destekleri ve paket y\u00f6netim kolayl\u0131klar\u0131 nedeniyle Linux da\u011f\u0131t\u0131mlar\u0131 s\u0131kl\u0131kla tercih edilir. \u00d6zellikle <b>Ubuntu Server<\/b> ve <b>CentOS<\/b> (veya Rocky Linux\/AlmaLinux gibi t\u00fcrevleri), Jenkins kurulumu i\u00e7in en pop\u00fcler ve iyi belgelenmi\u015f se\u00e7eneklerdir. Her iki i\u015fletim sistemi de Jenkins i\u00e7in resmi paket depolar\u0131 sunarak kurulum ve g\u00fcncellemeleri olduk\u00e7a basit hale getirir. Se\u00e7im, genellikle sistem y\u00f6neticisinin a\u015final\u0131\u011f\u0131na ve kurumsal standartlara ba\u011fl\u0131d\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Gerekli-Temel-Yazilimlarin-Kurulumu\"><\/span>Gerekli Temel Yaz\u0131l\u0131mlar\u0131n Kurulumu<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins&#8217;in \u00e7al\u0131\u015fabilmesi ve CI\/CD g\u00f6revlerini yerine getirebilmesi i\u00e7in baz\u0131 temel yaz\u0131l\u0131mlar\u0131n sunucuda \u00f6nceden kurulu olmas\u0131 gerekir. Bu yaz\u0131l\u0131mlar, pipeline&#8217;lar\u0131n temel yap\u0131 ta\u015flar\u0131n\u0131 olu\u015fturur.<\/p>\n<h4>Java Development Kit (JDK)<\/h4>\n<p>Jenkins, bir Java uygulamas\u0131 oldu\u011fu i\u00e7in \u00e7al\u0131\u015fmak \u00fczere bir Java Runtime Environment (JRE) veya Java Development Kit (JDK) gerektirir. Jenkins&#8217;in farkl\u0131 s\u00fcr\u00fcmleri, belirli Java s\u00fcr\u00fcmlerini zorunlu k\u0131labilir. Genellikle, en son LTS (Long-Term Support) s\u00fcr\u00fcmlerinden olan Java 11 veya Java 17&#8217;nin kurulmas\u0131 tavsiye edilir. Kurulum, i\u015fletim sisteminin paket y\u00f6neticisi (apt veya yum) kullan\u0131larak kolayca yap\u0131labilir.<\/p>\n<h4>Git Versiyon Kontrol Sistemi<\/h4>\n<p>CI\/CD s\u00fcre\u00e7lerinin neredeyse tamam\u0131, bir versiyon kontrol sistemindeki kod de\u011fi\u015fikliklerini temel al\u0131r. Git, bu alanda end\u00fcstri standard\u0131d\u0131r. Jenkins&#8217;in kod deposundan (repository) kaynak kodu \u00e7ekebilmesi (checkout) i\u00e7in Git&#8217;in sunucuda kurulu olmas\u0131 zorunludur. Ayr\u0131ca, pipeline&#8217;lar i\u00e7inde Git komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in de gereklidir. <a href=\"https:\/\/www.ihs.com.tr\/blog\/github-nedir-ve-nasil-kullanilir\/\" target=\"_blank\">Git kurulumu<\/a> da yine paket y\u00f6neticileri arac\u0131l\u0131\u011f\u0131yla basit bir komutla ger\u00e7ekle\u015ftirilebilir.<\/p>\n<h4>Docker ve Docker Compose<\/h4>\n<p>Modern CI\/CD s\u00fcre\u00e7leri, b\u00fcy\u00fck \u00f6l\u00e7\u00fcde konteyner teknolojilerinden faydalan\u0131r. Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole konteynerler i\u00e7inde derlemeye, test etmeye ve da\u011f\u0131tmaya olanak tan\u0131r. Bu, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sorununu ortadan kald\u0131r\u0131r ve tutarl\u0131 ortamlar sa\u011flar. Jenkins pipeline&#8217;lar\u0131 i\u00e7inde Docker imajlar\u0131 olu\u015fturmak, \u00e7al\u0131\u015ft\u0131rmak ve y\u00f6netmek i\u00e7in Jenkins sunucusuna Docker Engine&#8217;in kurulmas\u0131 \u015fiddetle tavsiye edilir. Docker Compose ise \u00e7oklu konteyner uygulamalar\u0131n\u0131 y\u00f6netmeyi kolayla\u015ft\u0131ran bir ara\u00e7t\u0131r ve karma\u015f\u0131k test ortamlar\u0131 kurmak i\u00e7in kullan\u0131labilir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Guvenlik-Duvari-Firewall-ve-Port-Yapilandirmasi\"><\/span>G\u00fcvenlik Duvar\u0131 (Firewall) ve Port Yap\u0131land\u0131rmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sunucu g\u00fcvenli\u011fi, haz\u0131rl\u0131k a\u015famas\u0131n\u0131n en \u00f6nemli ad\u0131mlar\u0131ndan biridir. Bir <a href=\"https:\/\/www.ihs.com.tr\/blog\/firewall-nedir-ne-ise-yarar\/\" target=\"_blank\">g\u00fcvenlik duvar\u0131<\/a> (firewall), sunucuya gelen ve giden a\u011f trafi\u011fini kontrol ederek yetkisiz eri\u015fimleri engeller. Jenkins i\u00e7in en az iki temel portun d\u0131\u015f d\u00fcnyaya a\u00e7\u0131lmas\u0131 gerekir:<\/p>\n<ul>\n<li><b>8080\/TCP:<\/b> Jenkins web aray\u00fcz\u00fcn\u00fcn varsay\u0131lan portudur. Kullan\u0131c\u0131lar\u0131n Jenkins&#8217;e taray\u0131c\u0131 \u00fczerinden eri\u015fmesi i\u00e7in bu porta izin verilmelidir. G\u00fcvenlik nedeniyle bu port, bir reverse proxy (Nginx, Apache vb.) arkas\u0131nda 80 veya 443 portuna y\u00f6nlendirilebilir.<\/li>\n<li><b>22\/TCP (SSH):<\/b> Sunucuya uzaktan y\u00f6netim i\u00e7in eri\u015fim sa\u011flamak amac\u0131yla SSH portunun a\u00e7\u0131k olmas\u0131 gerekir. G\u00fcvenli\u011fi art\u0131rmak i\u00e7in bu porta sadece belirli IP adreslerinden eri\u015fim izni verilmesi \u00f6nerilir.<\/li>\n<\/ul>\n<p>Ayr\u0131ca, Jenkins agent&#8217;lar\u0131n\u0131n (slave) master sunucuya ba\u011flanmas\u0131 i\u00e7in ek portlar\u0131n (genellikle JNLP i\u00e7in 50000\/TCP) yap\u0131land\u0131r\u0131lmas\u0131 gerekebilir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Jenkinsin-Kurulumu-ve-Ilk-Yapilandirmasi\"><\/span>Jenkins&#8217;in Kurulumu ve \u0130lk Yap\u0131land\u0131rmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Sunucu ortam\u0131 haz\u0131rland\u0131ktan sonraki ad\u0131m, Jenkins&#8217;i kurmak ve temel ayarlar\u0131n\u0131 yapmakt\u0131r. Bu a\u015fama, Jenkins&#8217;in g\u00fcvenli ve i\u015flevsel bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir. Kurulum i\u00e7in birden fazla y\u00f6ntem bulunsa da her biri farkl\u0131 avantajlar sunar. \u0130lk yap\u0131land\u0131rma sihirbaz\u0131 ise Jenkins&#8217;i kullan\u0131ma haz\u0131r hale getiren temel ad\u0131mlar\u0131 i\u00e7erir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-Kurulum-Yontemleri\"><\/span>Jenkins Kurulum Y\u00f6ntemleri<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins&#8217;i kurman\u0131n birka\u00e7 yolu vard\u0131r. En yayg\u0131n kullan\u0131lan iki y\u00f6ntem, paket y\u00f6neticisi ve Docker konteyneridir. Se\u00e7im, mevcut altyap\u0131n\u0131za ve y\u00f6netim tercihlerinize ba\u011fl\u0131d\u0131r.<\/p>\n<h4>Paket Y\u00f6neticisi Kullanarak Kurulum (apt, yum)<\/h4>\n<p>Bu y\u00f6ntem, en geleneksel ve basit kurulum y\u00f6ntemlerinden biridir. Ubuntu i\u00e7in `apt`, CentOS i\u00e7in `yum` gibi i\u015fletim sistemine \u00f6zg\u00fc paket y\u00f6neticileri kullan\u0131l\u0131r. Bu yakla\u015f\u0131m\u0131n avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>Kolay Kurulum ve G\u00fcncelleme:<\/b> Jenkins&#8217;i bir servis olarak sisteme kurar ve basit komutlarla (`apt-get upgrade jenkins` gibi) g\u00fcncellenmesini sa\u011flar.<\/li>\n<li><b>Sistem Entegrasyonu:<\/b> Jenkins, sistem ba\u015flang\u0131c\u0131nda otomatik olarak \u00e7al\u0131\u015fan bir servis (`systemd` servisi) olarak yap\u0131land\u0131r\u0131l\u0131r.<\/li>\n<li><b>Basit Y\u00f6netim:<\/b> Servisi ba\u015flatmak, durdurmak ve durumunu kontrol etmek standart Linux komutlar\u0131yla yap\u0131l\u0131r.<\/li>\n<\/ul>\n<p>Kurulum i\u00e7in \u00f6ncelikle Jenkins&#8217;in resmi paket deposunun sisteme eklenmesi, ard\u0131ndan paket y\u00f6neticisi arac\u0131l\u0131\u011f\u0131yla kurulumun yap\u0131lmas\u0131 gerekir.<\/p>\n<h4>Docker Konteyneri Olarak \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Jenkins&#8217;i bir Docker konteyneri olarak \u00e7al\u0131\u015ft\u0131rmak, modern ve esnek bir yakla\u015f\u0131md\u0131r. <a href=\"https:\/\/www.ihs.com.tr\/blog\/docker-nedir-ve-sunucu-yonetimini-nasil-kolaylastirir\/\" target=\"_blank\">Docker<\/a>, Jenkins&#8217;i ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole bir ortamda \u00e7al\u0131\u015ft\u0131rarak ana sunucu i\u015fletim sisteminden ay\u0131r\u0131r. Avantajlar\u0131:<\/p>\n<ul>\n<li><b>Ta\u015f\u0131nabilirlik:<\/b> Docker imaj\u0131 sayesinde Jenkins ortam\u0131, Docker&#8217;\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 herhangi bir sunucuya kolayca ta\u015f\u0131nabilir.<\/li>\n<li><b>\u0130zolasyon:<\/b> Jenkins&#8217;in kulland\u0131\u011f\u0131 Java s\u00fcr\u00fcm\u00fc veya di\u011fer k\u00fct\u00fcphaneler, ana sunucudaki di\u011fer uygulamalarla \u00e7ak\u0131\u015fmaz.<\/li>\n<li><b>Kolay S\u00fcr\u00fcm Y\u00f6netimi:<\/b> Farkl\u0131 Jenkins s\u00fcr\u00fcmlerini denemek veya geri almak, sadece ilgili Docker imaj\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak kadar basittir.<\/li>\n<\/ul>\n<p>Jenkins&#8217;in resmi Docker imaj\u0131 (`jenkins\/jenkins:lts`) kullan\u0131larak tek bir komutla Jenkins konteyneri ba\u015flat\u0131labilir. Verilerin kal\u0131c\u0131 olmas\u0131 i\u00e7in Jenkins home dizininin bir Docker volume&#8217;\u00fc olarak ayarlanmas\u0131 \u00f6nemlidir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ilk-Kurulum-Sihirbazinin-Tamamlanmasi\"><\/span>\u0130lk Kurulum Sihirbaz\u0131n\u0131n Tamamlanmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins ilk kez ba\u015flat\u0131ld\u0131\u011f\u0131nda, taray\u0131c\u0131 \u00fczerinden `http:\/\/sunucu_ip:8088` adresine gidildi\u011finde bir kurulum sihirbaz\u0131 kullan\u0131c\u0131y\u0131 kar\u015f\u0131lar. Bu sihirbaz, temel g\u00fcvenlik ve eklenti ayarlar\u0131n\u0131 yapman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Y\u00f6netici Parolas\u0131n\u0131n Al\u0131nmas\u0131<\/h4>\n<p>G\u00fcvenlik amac\u0131yla, sihirbaz\u0131n ilk ad\u0131m\u0131 sizden bir ba\u015flang\u0131\u00e7 y\u00f6netici parolas\u0131 girmenizi ister. Bu parola, Jenkins&#8217;in sunucuda belirtti\u011fi bir dosya i\u00e7inde (`\/var\/lib\/jenkins\/secrets\/initialAdminPassword` gibi) bulunur. Bu dosyay\u0131 `cat` komutuyla okuyarak parolay\u0131 al\u0131p web aray\u00fcz\u00fcndeki ilgili alana yap\u0131\u015ft\u0131rman\u0131z gerekir. Bu ad\u0131m, sadece yetkili kullan\u0131c\u0131n\u0131n kurulumu yapabildi\u011finden emin olmak i\u00e7indir.<\/p>\n<h4>Temel Eklentilerin (Plugins) Y\u00fcklenmesi<\/h4>\n<p>Parolay\u0131 girdikten sonra Jenkins, size iki se\u00e7enek sunar: &#8220;Install suggested plugins&#8221; (\u00d6nerilen eklentileri y\u00fckle) ve &#8220;Select plugins to install&#8221; (Y\u00fcklenecek eklentileri se\u00e7). Yeni ba\u015flayanlar i\u00e7in genellikle \u00f6nerilen eklentileri y\u00fcklemek en iyi se\u00e7enektir. Bu se\u00e7enek; Pipeline, Git, SSH, e-posta bildirimi gibi CI\/CD s\u00fcre\u00e7leri i\u00e7in gerekli olan temel eklentileri otomatik olarak kurar. Deneyimli kullan\u0131c\u0131lar ise ihtiya\u00e7lar\u0131na g\u00f6re \u00f6zel bir eklenti seti se\u00e7ebilirler.<\/p>\n<h4>\u0130lk Y\u00f6netici Hesab\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>Eklentiler y\u00fcklendikten sonra, Jenkins&#8217;i y\u00f6netmek i\u00e7in kullan\u0131lacak ilk y\u00f6netici hesab\u0131n\u0131 olu\u015fturman\u0131z istenir. Kullan\u0131c\u0131 ad\u0131, parola, tam ad ve e-posta adresi gibi bilgileri girerek kendi y\u00f6netici hesab\u0131n\u0131z\u0131 olu\u015fturursunuz. Bu ad\u0131mdan sonra, ba\u015flang\u0131\u00e7taki ge\u00e7ici parola yerine bu yeni hesapla Jenkins&#8217;e giri\u015f yapacaks\u0131n\u0131z.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-Global-Sistem-Ayarlari-Manage-Jenkins\"><\/span>Jenkins Global Sistem Ayarlar\u0131 (Manage Jenkins)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Kurulum sihirbaz\u0131 bittikten sonra, Jenkins&#8217;in daha detayl\u0131 ayarlar\u0131n\u0131 yapmak i\u00e7in &#8220;Manage Jenkins&#8221; (Jenkins&#8217;i Y\u00f6net) b\u00f6l\u00fcm\u00fcne gidilir. Buras\u0131, Jenkins&#8217;in merkezi kontrol panelidir.<\/p>\n<h4>Global Ara\u00e7lar\u0131n Yap\u0131land\u0131r\u0131lmas\u0131 (JDK, Git, Maven vb.)<\/h4>\n<p>&#8220;Global Tool Configuration&#8221; b\u00f6l\u00fcm\u00fc, Jenkins&#8217;in pipeline&#8217;larda kullanaca\u011f\u0131 temel ara\u00e7lar\u0131n yollar\u0131n\u0131 ve s\u00fcr\u00fcmlerini tan\u0131mlad\u0131\u011f\u0131n\u0131z yerdir. \u00d6rne\u011fin, sistemde birden fazla JDK s\u00fcr\u00fcm\u00fc kuruluysa, projelere \u00f6zel olarak hangisinin kullan\u0131laca\u011f\u0131n\u0131 buradan belirleyebilirsiniz. Ayn\u0131 \u015fekilde, Git, Maven, Gradle, Node.js gibi derleme ve geli\u015ftirme ara\u00e7lar\u0131n\u0131n yollar\u0131n\u0131 da burada yap\u0131land\u0131rabilirsiniz. Bu sayede, Jenkinsfile i\u00e7inde bu ara\u00e7lara sadece isimleriyle referans vermek yeterli olur.<\/p>\n<h4>E-posta ve Bildirim Ayarlar\u0131n\u0131n Yap\u0131lmas\u0131<\/h4>\n<p>CI\/CD s\u00fcre\u00e7lerinde geri bildirim hayati \u00f6nem ta\u015f\u0131r. Jenkins&#8217;in pipeline sonu\u00e7lar\u0131 (ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z vb.) hakk\u0131nda ekibe bildirim g\u00f6nderebilmesi i\u00e7in e-posta sunucu ayarlar\u0131n\u0131n yap\u0131lmas\u0131 gerekir. &#8220;Configure System&#8221; alt\u0131nda bulunan &#8220;E-mail Notification&#8221; b\u00f6l\u00fcm\u00fcnde, SMTP sunucu adresi, port, kullan\u0131c\u0131 ad\u0131 ve parola gibi bilgiler girilir. Bu ayarlar yap\u0131ld\u0131ktan sonra, projelerde e-posta bildirimleri kolayca aktif hale getirilebilir.<\/p>\n<h4>G\u00fcvenlik Ayarlar\u0131n\u0131n G\u00f6zden Ge\u00e7irilmesi<\/h4>\n<p>&#8220;Configure Global Security&#8221; b\u00f6l\u00fcm\u00fc, Jenkins&#8217;in g\u00fcvenlik altyap\u0131s\u0131n\u0131 y\u00f6netti\u011finiz yerdir. Burada, kimlerin Jenkins&#8217;e eri\u015febilece\u011fi, kullan\u0131c\u0131lar\u0131n yetkileri, CSRF korumas\u0131 gibi kritik ayarlar bulunur. Varsay\u0131lan olarak, giri\u015f yapm\u0131\u015f kullan\u0131c\u0131lar\u0131n her \u015feyi yapmas\u0131na izin verilir. Ancak kurumsal ortamlarda, rol tabanl\u0131 yetkilendirme (Role-based Authorization Strategy eklentisi ile) gibi daha gran\u00fcler g\u00fcvenlik modellerinin yap\u0131land\u0131r\u0131lmas\u0131 \u015fiddetle tavsiye edilir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Jenkins-Temel-Bilesenleri-ve-Kavramlari\"><\/span>Jenkins Temel Bile\u015fenleri ve Kavramlar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Jenkins&#8217;i etkili bir \u015fekilde kullanabilmek i\u00e7in temel mimarisini ve kavramlar\u0131n\u0131 anlamak \u00f6nemlidir. Projeler (Jobs), pipeline&#8217;lar, eklentiler ve agent&#8217;lar, Jenkins ekosisteminin temel yap\u0131 ta\u015flar\u0131d\u0131r. Bu bile\u015fenlerin her biri, CI\/CD s\u00fcre\u00e7lerinizi esnek ve \u00f6l\u00e7eklenebilir bir \u015fekilde y\u00f6netmenize olanak tan\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-Proje-Job-Turleri\"><\/span>Jenkins Proje (Job) T\u00fcrleri<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins&#8217;te otomatize edilecek her bir g\u00f6rev veya i\u015f ak\u0131\u015f\u0131 bir &#8220;Proje&#8221; (veya &#8220;Job&#8221;) olarak tan\u0131mlan\u0131r. Jenkins, farkl\u0131 ihtiya\u00e7lara y\u00f6nelik \u00e7e\u015fitli proje t\u00fcrleri sunar. En yayg\u0131n kullan\u0131lanlar \u015funlard\u0131r:<\/p>\n<h4>Freestyle Project<\/h4>\n<p>Freestyle, en temel ve klasik Jenkins proje t\u00fcr\u00fcd\u00fcr. Web aray\u00fcz\u00fc \u00fczerinden ad\u0131m ad\u0131m yap\u0131land\u0131r\u0131l\u0131r. Kaynak kod y\u00f6netimi, derleme tetikleyicileri, derleme ad\u0131mlar\u0131 (\u00f6rne\u011fin, shell script veya Windows batch komutlar\u0131 \u00e7al\u0131\u015ft\u0131rma) ve derleme sonras\u0131 eylemler (raporlama, bildirim g\u00f6nderme vb.) gibi se\u00e7enekleri formlar arac\u0131l\u0131\u011f\u0131yla belirlersiniz. K\u00fc\u00e7\u00fck ve basit otomasyon g\u00f6revleri i\u00e7in h\u0131zl\u0131 bir ba\u015flang\u0131\u00e7 sunsa da karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131 i\u00e7in y\u00f6netimi zorla\u015fabilir ve &#8220;Pipeline as Code&#8221; felsefesine uymaz.<\/p>\n<h4>Pipeline<\/h4>\n<p>Pipeline, modern Jenkins kullan\u0131m\u0131n\u0131n merkezinde yer al\u0131r. CI\/CD i\u015f ak\u0131\u015f\u0131n\u0131n tamam\u0131n\u0131 kod olarak tan\u0131mlaman\u0131za olanak tan\u0131r. Bu kod, genellikle `Jenkinsfile` ad\u0131 verilen bir metin dosyas\u0131nda tutulur ve projenin kaynak koduyla birlikte versiyonlan\u0131r. Bu &#8220;Pipeline as Code&#8221; yakla\u015f\u0131m\u0131, i\u015f ak\u0131\u015f\u0131n\u0131n dayan\u0131kl\u0131, tekrarlanabilir, versiyonlanabilir ve birden fazla geli\u015ftirici taraf\u0131ndan ortakla\u015fa d\u00fczenlenebilir olmas\u0131n\u0131 sa\u011flar. Karma\u015f\u0131k s\u00fcre\u00e7leri, ko\u015fullu ad\u0131mlar\u0131 ve paralel i\u015flemleri kolayca y\u00f6netmek i\u00e7in idealdir.<\/p>\n<h4>Multi-branch Pipeline<\/h4>\n<p>Multi-branch Pipeline, \u00f6zellikle Git gibi modern versiyon kontrol sistemleri ile \u00e7al\u0131\u015fan ekipler i\u00e7in tasarlanm\u0131\u015ft\u0131r. Belirtilen bir kod deposundaki (repository) t\u00fcm dallar\u0131 (branches) otomatik olarak tarar ve i\u00e7inde bir `Jenkinsfile` bulunan her dal i\u00e7in otomatik olarak bir pipeline projesi olu\u015fturur. Bu, \u00f6zellikle &#8220;feature branch&#8221; (\u00f6zellik dal\u0131) geli\u015ftirme modelini benimseyen ekipler i\u00e7in b\u00fcy\u00fck kolayl\u0131k sa\u011flar. Yeni bir dal olu\u015fturuldu\u011funda Jenkins bunu alg\u0131lar ve o dal i\u00e7in CI s\u00fcrecini otomatik ba\u015flat\u0131r. Dal silindi\u011finde ise ilgili Jenkins projesini temizler.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-Pipeline-ve-Jenkinsfile\"><\/span>Jenkins Pipeline ve Jenkinsfile<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins Pipeline, bir dizi eklenti \u00fczerine in\u015fa edilmi\u015f olup S\u00fcrekli Teslimat (Continuous Delivery) pipeline&#8217;lar\u0131n\u0131n uygulanmas\u0131n\u0131 ve entegrasyonunu destekler. Pipeline&#8217;\u0131n tan\u0131m\u0131 `Jenkinsfile` i\u00e7inde yap\u0131l\u0131r.<\/p>\n<h4>Pipeline Nedir?<\/h4>\n<p>Pipeline, bir yaz\u0131l\u0131m\u0131n versiyon kontrol\u00fcnden son kullan\u0131c\u0131ya ula\u015fana kadar ge\u00e7irdi\u011fi t\u00fcm s\u00fcre\u00e7leri (derleme, test etme, da\u011f\u0131tma vb.) modelleyen bir i\u015f ak\u0131\u015f\u0131d\u0131r. Jenkins&#8217;te pipeline, bu s\u00fcre\u00e7leri tan\u0131mlayan bir dizi ad\u0131mdan olu\u015fur ve bu ad\u0131mlar\u0131n nas\u0131l ve ne zaman \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirler. Bir pipeline, basit bir CI s\u00fcrecinden, \u00e7ok a\u015famal\u0131 ve karma\u015f\u0131k bir CD s\u00fcrecine kadar her \u015feyi i\u00e7erebilir.<\/p>\n<h4>Declarative ve Scripted Pipeline Farklar\u0131<\/h4>\n<p>Jenkins, pipeline&#8217;lar\u0131 tan\u0131mlamak i\u00e7in iki farkl\u0131 s\u00f6zdizimi (syntax) sunar: Declarative ve Scripted. Her ikisi de ayn\u0131 pipeline altyap\u0131s\u0131n\u0131 kullan\u0131r ancak yaz\u0131m ve esneklik a\u00e7\u0131s\u0131ndan farkl\u0131l\u0131klara sahiptir.<\/p>\n<div class=\"karsilastirma\">\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Declarative Pipeline<\/th>\n<th>Scripted Pipeline<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><b>S\u00f6zdizimi<\/b><\/td>\n<td>Daha basit, yap\u0131sal ve okunmas\u0131 kolayd\u0131r. \u00d6nceden tan\u0131mlanm\u0131\u015f bir yap\u0131ya sahiptir (`pipeline`, `agent`, `stages`, `steps`).<\/td>\n<td>Groovy dilinin tam g\u00fcc\u00fcn\u00fc kullanan, daha esnek ve programatik bir yap\u0131 sunar.<\/td>\n<\/tr>\n<tr>\n<td><b>\u00d6\u011frenme E\u011frisi<\/b><\/td>\n<td>Daha d\u00fc\u015f\u00fckt\u00fcr. Yeni ba\u015flayanlar i\u00e7in idealdir.<\/td>\n<td>Groovy programlama bilgisi gerektirdi\u011fi i\u00e7in daha y\u00fcksektir.<\/td>\n<\/tr>\n<tr>\n<td><b>Esneklik<\/b><\/td>\n<td>Yap\u0131s\u0131 gere\u011fi daha k\u0131s\u0131tl\u0131d\u0131r ancak \u00e7o\u011fu senaryo i\u00e7in yeterlidir.<\/td>\n<td>Neredeyse s\u0131n\u0131rs\u0131z esneklik sunar. Karma\u015f\u0131k ko\u015fullar ve d\u00f6ng\u00fcler kolayca yaz\u0131labilir.<\/td>\n<\/tr>\n<tr>\n<td><b>Do\u011frulama<\/b><\/td>\n<td>S\u00f6zdizimi, pipeline \u00e7al\u0131\u015ft\u0131r\u0131lmadan \u00f6nce Jenkins taraf\u0131ndan do\u011frulan\u0131r, bu da hatalar\u0131 erken yakalamay\u0131 sa\u011flar.<\/td>\n<td>Do\u011frulama daha s\u0131n\u0131rl\u0131d\u0131r ve hatalar genellikle \u00e7al\u0131\u015fma zaman\u0131nda ortaya \u00e7\u0131kar.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h4>Jenkinsfile&#8217;\u0131n Temel Yap\u0131s\u0131 (agent, stages, steps)<\/h4>\n<p>Bir Declarative `Jenkinsfile` temel olarak \u015fu bloklardan olu\u015fur:<\/p>\n<ul>\n<li><b>pipeline:<\/b> T\u00fcm pipeline tan\u0131m\u0131n\u0131 i\u00e7eren ana bloktur.<\/li>\n<li><b>agent:<\/b> Pipeline&#8217;\u0131n veya belirli bir a\u015faman\u0131n nerede \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir. `any` (herhangi bir uygun agent), `none` (agent belirtilmez) veya Docker konteyneri gibi belirli bir ortam olabilir.<\/li>\n<li><b>stages:<\/b> Pipeline&#8217;\u0131n ana a\u015famalar\u0131n\u0131 i\u00e7eren bloktur. \u00d6rne\u011fin, &#8220;Build&#8221;, &#8220;Test&#8221;, &#8220;Deploy&#8221; gibi mant\u0131ksal b\u00f6l\u00fcmlerden olu\u015fur.<\/li>\n<li><b>stage:<\/b> `stages` blo\u011fu i\u00e7inde yer alan her bir a\u015famay\u0131 tan\u0131mlar. \u00d6rne\u011fin, `stage(&#8216;Build&#8217;)`.<\/li>\n<li><b>steps:<\/b> Bir `stage` i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131lacak ad\u0131mlar\u0131 i\u00e7erir. Bu ad\u0131mlar, shell komutlar\u0131 (`sh`), derleme ara\u00e7lar\u0131 (`mvn`), dosya i\u015flemleri veya di\u011fer Jenkins g\u00f6revleri olabilir.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Eklentilerin-Plugins-Yonetimi-ve-Onemi\"><\/span>Eklentilerin (Plugins) Y\u00f6netimi ve \u00d6nemi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins&#8217;in g\u00fcc\u00fcn\u00fcn b\u00fcy\u00fck bir k\u0131sm\u0131, geni\u015f eklenti ekosisteminden gelir. Eklentiler, Jenkins&#8217;in temel i\u015flevselli\u011fini geni\u015fleterek y\u00fczlerce farkl\u0131 ara\u00e7, teknoloji ve platformla entegre olmas\u0131n\u0131 sa\u011flar. Git, Docker, Kubernetes, Maven, SonarQube, Slack gibi pop\u00fcler ara\u00e7lar i\u00e7in eklentiler mevcuttur. Eklentiler, &#8220;Manage Jenkins&#8221; > &#8220;Manage Plugins&#8221; men\u00fcs\u00fcnden y\u00f6netilir. Buradan mevcut eklentiler g\u00fcncellenebilir, yeni eklentiler kurulabilir veya kullan\u0131lmayanlar kald\u0131r\u0131labilir. Do\u011fru eklenti setini se\u00e7mek, CI\/CD pipeline&#8217;\u0131n\u0131z\u0131n yeteneklerini do\u011frudan etkiler.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-Agent-NodeSlave-Mimarisi\"><\/span>Jenkins Agent (Node\/Slave) Mimarisi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins, da\u011f\u0131t\u0131k bir mimariyi destekler. Bu mimari, bir <b>Master<\/b> (ana sunucu) ve bir veya daha fazla <b>Agent<\/b> (d\u00fc\u011f\u00fcm\/slave) bile\u015feninden olu\u015fur. Master, Jenkins&#8217;in ana orchestrator&#8217;\u0131d\u0131r; projeleri y\u00f6netir, pipeline&#8217;lar\u0131 zamanlar ve sonu\u00e7lar\u0131 g\u00f6sterir. Ancak as\u0131l i\u015f y\u00fck\u00fcn\u00fc (derleme, test gibi) Agent&#8217;lar \u00fcstlenir. Bu mimarinin avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>\u00d6l\u00e7eklenebilirlik:<\/b> \u0130\u015f y\u00fck\u00fc artt\u0131\u011f\u0131nda yeni agent&#8217;lar eklenerek sistemin performans\u0131 art\u0131r\u0131labilir.<\/li>\n<li><b>Farkl\u0131 Ortamlar:<\/b> Farkl\u0131 i\u015fletim sistemlerine (Windows, macOS, Linux) veya farkl\u0131 ara\u00e7 setlerine sahip agent&#8217;lar olu\u015fturularak \u00e7ok platformlu projeler desteklenebilir.<\/li>\n<li><b>Y\u00fck Dengeleme:<\/b> Master sunucunun \u00fczerindeki y\u00fck azal\u0131r ve sadece y\u00f6netim g\u00f6revlerine odaklanmas\u0131 sa\u011flan\u0131r.<\/li>\n<\/ul>\n<p>Agent&#8217;lar, Master&#8217;a SSH veya JNLP (Java Network Launch Protocol) gibi protokoller \u00fczerinden ba\u011flanabilir ve dinamik olarak (\u00f6rne\u011fin, bulut ortamlar\u0131nda veya Kubernetes \u00fczerinde) olu\u015fturulabilir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ornek-Bir-CICD-Pipelinei-Olusturma-Adimlari\"><\/span>\u00d6rnek Bir CI\/CD Pipeline&#8217;\u0131 Olu\u015fturma Ad\u0131mlar\u0131<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Teorik bilgileri prati\u011fe d\u00f6kmenin en iyi yolu, basit ama i\u015flevsel bir CI\/CD pipeline&#8217;\u0131 olu\u015fturmakt\u0131r. Bu b\u00f6l\u00fcm, bir projenin kaynak kodunu versiyon kontrol sisteminden al\u0131p derleme, test ve paketleme a\u015famalar\u0131ndan ge\u00e7iren temel bir pipeline&#8217;\u0131n nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 ad\u0131m ad\u0131m anlatmaktad\u0131r. Bu s\u00fcre\u00e7, Jenkins&#8217;in temel \u00e7al\u0131\u015fma mant\u0131\u011f\u0131n\u0131 anlamak i\u00e7in sa\u011flam bir temel olu\u015fturacakt\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Versiyon-Kontrol-Sistemi-GitHubGitLab-ile-Entegrasyon\"><\/span>Versiyon Kontrol Sistemi (GitHub\/GitLab) ile Entegrasyon<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>CI\/CD s\u00fcrecinin ba\u015flang\u0131\u00e7 noktas\u0131, kodun bulundu\u011fu merkezi depodur. Jenkins&#8217;in bu depodaki de\u011fi\u015fiklikleri takip edebilmesi ve kodu \u00e7ekebilmesi i\u00e7in do\u011fru bir entegrasyon yap\u0131lmas\u0131 gerekir.<\/p>\n<h4>Proje Kodlar\u0131n\u0131n Repoya Y\u00fcklenmesi<\/h4>\n<p>\u0130lk ad\u0131m, otomatize etmek istedi\u011finiz uygulaman\u0131n kaynak kodlar\u0131n\u0131 GitHub, GitLab veya Bitbucket gibi bir Git deposuna y\u00fcklemektir. Bu depo, projenin &#8220;tek ger\u00e7ek kayna\u011f\u0131&#8221; (single source of truth) olacakt\u0131r. Deponun i\u00e7inde, projenin nas\u0131l derlenece\u011fini ve test edilece\u011fini bilen bir yap\u0131 (\u00f6rne\u011fin, Maven i\u00e7in `pom.xml`, Node.js i\u00e7in `package.json`) bulunmal\u0131d\u0131r.<\/p>\n<h4>Jenkins&#8217;e Depo (Repository) Adresinin Eklenmesi<\/h4>\n<p>Jenkins&#8217;te yeni bir &#8220;Pipeline&#8221; projesi olu\u015fturduktan sonra, yap\u0131land\u0131rma sayfas\u0131nda &#8220;Pipeline&#8221; b\u00f6l\u00fcm\u00fcne gelinir. Burada &#8220;Definition&#8221; olarak &#8220;Pipeline script from SCM&#8221; (Versiyon Kontrol Sisteminden Pipeline beti\u011fi) se\u00e7ene\u011fi i\u015faretlenir. &#8220;SCM&#8221; olarak &#8220;Git&#8221; se\u00e7ilir ve &#8220;Repository URL&#8221; alan\u0131na projenizin Git depo adresi (\u00f6rne\u011fin, `https:\/\/github.com\/kullanici\/proje.git`) yap\u0131\u015ft\u0131r\u0131l\u0131r.<\/p>\n<h4>Eri\u015fim \u0130\u00e7in Kimlik Bilgilerinin (Credentials) Tan\u0131mlanmas\u0131<\/h4>\n<p>E\u011fer Git deponuz \u00f6zel (private) ise, Jenkins&#8217;in bu depoya eri\u015fim izni olmas\u0131 gerekir. Jenkins, bu t\u00fcr hassas bilgileri g\u00fcvenli bir \u015fekilde saklamak i\u00e7in &#8220;Credentials&#8221; sistemini kullan\u0131r. &#8220;Credentials&#8221; b\u00f6l\u00fcm\u00fcnden &#8220;Add&#8221; butonuna t\u0131klayarak yeni bir kimlik bilgisi ekleyebilirsiniz. En yayg\u0131n y\u00f6ntemler \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>Username with password:<\/b> GitHub\/GitLab kullan\u0131c\u0131 ad\u0131n\u0131z ve parolan\u0131z (veya daha g\u00fcvenli olan Personal Access Token).<\/li>\n<li><b>SSH Username with private key:<\/b> Sunucuda olu\u015fturulan bir SSH anahtar\u0131n\u0131n \u00f6zel (private) k\u0131sm\u0131n\u0131 Jenkins&#8217;e, genel (public) k\u0131sm\u0131n\u0131 ise GitHub\/GitLab hesab\u0131n\u0131za ekleyerek parolas\u0131z eri\u015fim sa\u011flama.<\/li>\n<\/ul>\n<p>Kimlik bilgisi eklendikten sonra, proje yap\u0131land\u0131rmas\u0131ndaki &#8220;Credentials&#8221; a\u00e7\u0131l\u0131r men\u00fcs\u00fcnden bu bilgiyi se\u00e7erek Jenkins&#8217;in depoya eri\u015fimini sa\u011flars\u0131n\u0131z.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Basit-Bir-Jenkinsfile-Yazimi\"><\/span>Basit Bir Jenkinsfile Yaz\u0131m\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pipeline&#8217;\u0131n mant\u0131\u011f\u0131, projenin k\u00f6k dizininde bulunan `Jenkinsfile` adl\u0131 bir dosyada tan\u0131mlan\u0131r. Bu dosya, Groovy s\u00f6zdizimini kullanarak i\u015f ak\u0131\u015f\u0131n\u0131n a\u015famalar\u0131n\u0131 belirtir.<\/p>\n<h4>Derleme (Build) A\u015famas\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>\u0130lk a\u015fama genellikle projenin derlenmesidir. Bu a\u015fama, kaynak kodun \u00e7al\u0131\u015ft\u0131r\u0131labilir veya da\u011f\u0131t\u0131labilir bir formata d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesini sa\u011flar. \u00d6rne\u011fin, bir Java projesi i\u00e7in bu, Maven veya Gradle kullan\u0131larak `compile` veya `build` komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak anlam\u0131na gelir.<\/p>\n<p>\u00d6rnek `stage` blo\u011fu:<\/p>\n<p><code><br \/>\nstage('Build') {<br \/>\n steps {<br \/>\n sh 'mvn compile'<br \/>\n }<br \/>\n}<br \/>\n<\/code><\/p>\n<h4>Test (Test) A\u015famas\u0131n\u0131n Eklenmesi<\/h4>\n<p>Kodun kalitesini ve do\u011frulu\u011funu sa\u011flamak i\u00e7in derlemeden sonra otomatik testlerin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 kritik \u00f6neme sahiptir. Bu a\u015famada birim (unit) testleri, entegrasyon testleri veya di\u011fer test t\u00fcrleri \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Testler ba\u015far\u0131s\u0131z olursa, pipeline durdurulur ve ekibe bildirim g\u00f6nderilir.<\/p>\n<p>\u00d6rnek `stage` blo\u011fu:<\/p>\n<p><code><br \/>\nstage('Test') {<br \/>\n steps {<br \/>\n sh 'mvn test'<br \/>\n }<br \/>\n}<br \/>\n<\/code><\/p>\n<h4>Paketleme (Package) A\u015famas\u0131n\u0131n Tan\u0131mlanmas\u0131<\/h4>\n<p>Testler ba\u015far\u0131yla tamamland\u0131ktan sonra, uygulama da\u011f\u0131t\u0131ma haz\u0131r hale getirilmek \u00fczere paketlenir. Bu, bir Java uygulamas\u0131 i\u00e7in bir JAR veya WAR dosyas\u0131 olu\u015fturmak, bir Node.js uygulamas\u0131 i\u00e7in ba\u011f\u0131ml\u0131l\u0131klar\u0131 i\u00e7eren bir zip ar\u015fivi haz\u0131rlamak veya bir <a href=\"https:\/\/www.ihs.com.tr\/blog\/docker-nedir-ve-sunucu-yonetimini-nasil-kolaylastirir\/\" target=\"_blank\">Docker<\/a> imaj\u0131 olu\u015fturmak olabilir. Olu\u015fturulan bu pakete &#8220;artifact&#8221; denir.<\/p>\n<p>\u00d6rnek `stage` blo\u011fu:<\/p>\n<p><code><br \/>\nstage('Package') {<br \/>\n steps {<br \/>\n sh 'mvn package'<br \/>\n archiveArtifacts artifacts: 'target\/*.jar', fingerprint: true<br \/>\n }<br \/>\n}<br \/>\n<\/code><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Pipelinei-Calistirma-ve-Sonuclari-Izleme\"><\/span>Pipeline&#8217;\u0131 \u00c7al\u0131\u015ft\u0131rma ve Sonu\u00e7lar\u0131 \u0130zleme<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pipeline tan\u0131mland\u0131ktan ve `Jenkinsfile` depoya eklendikten sonra, i\u015f ak\u0131\u015f\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131p sonu\u00e7lar\u0131n\u0131 izleyebilirsiniz.<\/p>\n<h4>Manuel Tetikleme<\/h4>\n<p>Jenkins aray\u00fcz\u00fcnde projenizin sayfas\u0131na giderek &#8220;Build Now&#8221; (\u015eimdi \u0130n\u015fa Et) butonuna t\u0131klayarak pipeline&#8217;\u0131 manuel olarak ba\u015flatabilirsiniz. Bu, \u00f6zellikle `Jenkinsfile` \u00fczerinde de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda veya bir s\u00fcreci yeniden \u00e7al\u0131\u015ft\u0131rmak istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4>Webhook ile Otomatik Tetikleme<\/h4>\n<p>CI\/CD&#8217;nin ger\u00e7ek g\u00fcc\u00fc otomasyondan gelir. Pipeline&#8217;\u0131n, kod deposuna her yeni bir `commit` yap\u0131ld\u0131\u011f\u0131nda otomatik olarak tetiklenmesi i\u00e7in Webhook entegrasyonu kullan\u0131l\u0131r. GitHub veya GitLab ayarlar\u0131ndan, projenize \u00f6zel bir Webhook URL&#8217;i (`http:\/\/JENKINS_URL\/github-webhook\/`) eklenir. Bu sayede, depoda bir de\u011fi\u015fiklik oldu\u011funda GitHub\/GitLab, Jenkins&#8217;e bir bildirim g\u00f6nderir ve Jenkins ilgili projenin pipeline&#8217;\u0131n\u0131 otomatik olarak ba\u015flat\u0131r.<\/p>\n<h4>Konsol \u00c7\u0131kt\u0131s\u0131 (Console Output) ve G\u00fcnl\u00fcklerin (Logs) Analizi<\/h4>\n<p>\u00c7al\u0131\u015fan veya tamamlanm\u0131\u015f bir pipeline&#8217;\u0131n detaylar\u0131n\u0131 g\u00f6rmek i\u00e7in Jenkins aray\u00fcz\u00fcndeki &#8220;Build History&#8221; (\u0130n\u015fa Ge\u00e7mi\u015fi) b\u00f6l\u00fcm\u00fcnden ilgili \u00e7al\u0131\u015fmay\u0131 se\u00e7ebilirsiniz. &#8220;Console Output&#8221; (Konsol \u00c7\u0131kt\u0131s\u0131) se\u00e7ene\u011fi, pipeline&#8217;\u0131n her ad\u0131m\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lan komutlar\u0131n ve bu komutlar\u0131n \u00fcretti\u011fi t\u00fcm \u00e7\u0131kt\u0131lar\u0131n canl\u0131 olarak veya sonradan incelenmesini sa\u011flar. Bir hata olu\u015ftu\u011funda, sorunun kayna\u011f\u0131n\u0131 bulmak i\u00e7in analiz edilmesi gereken ilk yer buras\u0131d\u0131r. G\u00fcnl\u00fckler, hatalar\u0131n ay\u0131klanmas\u0131 (debugging) ve s\u00fcrecin \u015feffafl\u0131\u011f\u0131 i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Gelismis-Entegrasyonlar-ve-Yetenekler\"><\/span>Geli\u015fmi\u015f Entegrasyonlar ve Yetenekler<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Temel bir CI\/CD pipeline&#8217;\u0131 kurduktan sonra, Jenkins&#8217;in yeteneklerini daha da geni\u015fleterek s\u00fcre\u00e7lerinizi daha verimli, g\u00fcvenli ve modern hale getirebilirsiniz. Geli\u015fmi\u015f entegrasyonlar, \u00f6zellikle konteyner tabanl\u0131 teknolojiler, kod kalitesi analizi ve artifact y\u00f6netimi gibi alanlarda pipeline&#8217;\u0131n\u0131za de\u011fer katacakt\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Docker-ile-Konteyner-Tabanli-Surecler\"><\/span>Docker ile Konteyner Tabanl\u0131 S\u00fcre\u00e7ler<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir konteynerler i\u00e7inde paketlemenizi sa\u011flar. Bu, CI\/CD s\u00fcre\u00e7lerinde tutarl\u0131l\u0131k ve tekrarlanabilirlik i\u00e7in devrim niteli\u011finde bir yakla\u015f\u0131md\u0131r. Jenkins&#8217;in Docker ile entegrasyonu, modern yaz\u0131l\u0131m teslimat pijpeline&#8217;lar\u0131n\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r.<\/p>\n<h4>Jenkinsfile \u0130\u00e7inde Docker Image Olu\u015fturma<\/h4>\n<p>Uygulaman\u0131z\u0131n bir Docker imaj\u0131 olarak paketlenmesi, da\u011f\u0131t\u0131m s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir. Jenkinsfile i\u00e7inden, projenizin k\u00f6k dizininde bulunan bir `Dockerfile` kullanarak kolayca imaj olu\u015fturabilirsiniz. Docker Pipeline eklentisi, bu i\u015flemi y\u00f6netmek i\u00e7in `docker.build()` gibi kullan\u0131\u015fl\u0131 komutlar sunar. Bu ad\u0131m genellikle &#8220;Package&#8221; veya ayr\u0131 bir &#8220;Build Image&#8221; a\u015famas\u0131nda ger\u00e7ekle\u015ftirilir.<\/p>\n<h4>Olu\u015fturulan Image&#8217;\u0131 Docker Registry&#8217;e Y\u00fckleme (Push)<\/h4>\n<p>Olu\u015fturulan Docker imaj\u0131n\u0131n, da\u011f\u0131t\u0131m yap\u0131lacak sunucular taraf\u0131ndan eri\u015filebilir olmas\u0131 gerekir. Bu ama\u00e7la imaj, Docker Hub, Amazon ECR, Google GCR veya kendi bar\u0131nd\u0131rd\u0131\u011f\u0131n\u0131z \u00f6zel bir Docker Registry gibi bir kay\u0131t defterine y\u00fcklenir (push edilir). Jenkinsfile i\u00e7inde, `docker.withRegistry()` blo\u011fu kullan\u0131larak kimlik bilgileriyle registry&#8217;ye ba\u011flan\u0131l\u0131r ve `image.push()` komutuyla imaj y\u00fcklenir. Bu ad\u0131m, imaj\u0131n merkezi bir konumda saklanmas\u0131n\u0131 ve versiyonlanmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Uygulamay\u0131 Konteyner Olarak Da\u011f\u0131tma (Deploy)<\/h4>\n<p>\u0130maj registry&#8217;ye y\u00fcklendikten sonraki son ad\u0131m, bu imaj\u0131 kullanarak uygulamay\u0131 hedef sunucularda (staging, production vb.) bir konteyner olarak \u00e7al\u0131\u015ft\u0131rmakt\u0131r. Bu i\u015flem, genellikle hedef sunucuya SSH ile ba\u011flan\u0131p `docker run` veya `docker-compose up` gibi komutlar\u0131 \u00e7al\u0131\u015ft\u0131rmak suretiyle yap\u0131l\u0131r. Kubernetes gibi bir konteyner orkestrasyon platformu kullan\u0131l\u0131yorsa, Jenkins pipeline&#8217;\u0131 `kubectl apply` komutlar\u0131yla da\u011f\u0131t\u0131m (deployment) tan\u0131m\u0131n\u0131 g\u00fcncelleyerek bu s\u00fcreci y\u00f6netebilir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kod-Kalitesi-ve-Guvenlik-Analizi-Entegrasyonlari-SonarQube-vb\"><\/span>Kod Kalitesi ve G\u00fcvenlik Analizi Entegrasyonlar\u0131 (SonarQube vb.)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>CI\/CD sadece h\u0131z\u0131 de\u011fil, ayn\u0131 zamanda kaliteyi de art\u0131rmal\u0131d\u0131r. Otomatik kod analizi ara\u00e7lar\u0131, pipeline&#8217;\u0131n bir par\u00e7as\u0131 haline getirilerek kod kalitesi ve g\u00fcvenli\u011fi s\u00fcrekli olarak denetlenebilir. SonarQube, bu alandaki en pop\u00fcler a\u00e7\u0131k kaynak platformlardan biridir. Jenkins, SonarQube Scanner eklentisi arac\u0131l\u0131\u011f\u0131yla entegre olur. Pipeline&#8217;a bir &#8220;Code Analysis&#8221; a\u015famas\u0131 eklenerek, her derlemede kodun bug&#8217;lar, zafiyetler, kod tekrarlar\u0131 ve karma\u015f\u0131kl\u0131k gibi metrikler a\u00e7\u0131s\u0131ndan taranmas\u0131 sa\u011flan\u0131r. Analiz sonu\u00e7lar\u0131 belirli bir kalite e\u015fi\u011fini (Quality Gate) ge\u00e7emezse, pipeline durdurularak hatal\u0131 kodun \u00fcretime ge\u00e7mesi engellenir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Artifact-Yonetimi-Nexus-Artifactory-vb\"><\/span>Artifact Y\u00f6netimi (Nexus, Artifactory vb.)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>CI\/CD s\u00fcre\u00e7leri boyunca \u00fcretilen \u00e7\u0131kt\u0131lara &#8220;artifact&#8221; denir. Bunlar, derlenmi\u015f JAR\/WAR dosyalar\u0131, Docker imajlar\u0131, NPM paketleri veya herhangi bir ikili (binary) dosya olabilir. Bu artifact&#8217;lerin g\u00fcvenilir, versiyonlanm\u0131\u015f ve merkezi bir \u015fekilde saklanmas\u0131 gerekir. Nexus Repository veya JFrog Artifactory gibi artifact y\u00f6netim ara\u00e7lar\u0131 bu ama\u00e7la kullan\u0131l\u0131r. Jenkins, bu ara\u00e7larla entegre olarak, pipeline sonunda olu\u015fturulan artifact&#8217;leri otomatik olarak bu depolara y\u00fckleyebilir. Bu sayede, farkl\u0131 pipeline&#8217;lar veya ekipler aras\u0131nda artifact payla\u015f\u0131m\u0131 kolayla\u015f\u0131r ve her derlemenin \u00e7\u0131kt\u0131s\u0131 g\u00fcvenli bir \u015fekilde ar\u015fivlenir. Geriye d\u00f6n\u00fck bir s\u00fcr\u00fcme ihtiya\u00e7 duyuldu\u011funda, ilgili artifact bu depodan kolayca \u00e7ekilebilir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Guvenlik-Bakim-ve-En-Iyi-Uygulamalar\"><\/span>G\u00fcvenlik, Bak\u0131m ve En \u0130yi Uygulamalar<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Jenkins, bir otomasyon sunucusu olarak \u015firketinizin en kritik sistemlerine ve verilerine eri\u015fim yetkisine sahip olabilir. Bu nedenle, Jenkins ortam\u0131n\u0131n g\u00fcvenli\u011fini sa\u011flamak, d\u00fczenli bak\u0131m\u0131n\u0131 yapmak ve en iyi uygulamalar\u0131 takip etmek hayati \u00f6nem ta\u015f\u0131r. Sa\u011flam bir Jenkins altyap\u0131s\u0131, sadece verimli de\u011fil, ayn\u0131 zamanda g\u00fcvenli ve s\u00fcrd\u00fcr\u00fclebilir olmal\u0131d\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kullanici-Yonetimi-ve-Rol-Tabanli-Yetkilendirme\"><\/span>Kullan\u0131c\u0131 Y\u00f6netimi ve Rol Tabanl\u0131 Yetkilendirme<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Varsay\u0131lan Jenkins kurulumunda, giri\u015f yapan her kullan\u0131c\u0131n\u0131n tam y\u00f6netici yetkileri vard\u0131r. Bu, \u00fcretim ortamlar\u0131 i\u00e7in kabul edilemez bir g\u00fcvenlik riskidir. &#8220;Configure Global Security&#8221; b\u00f6l\u00fcm\u00fcnden &#8220;Matrix-based security&#8221; veya &#8220;Project-based Matrix Authorization Strategy&#8221; se\u00e7enekleri etkinle\u015ftirilmelidir. Daha karma\u015f\u0131k ortamlar i\u00e7in ise &#8220;Role-based Authorization Strategy&#8221; eklentisi \u015fiddetle tavsiye edilir. Bu eklenti ile farkl\u0131 roller (\u00f6rne\u011fin, developer, qa, admin) olu\u015fturabilir ve her role sadece ihtiya\u00e7 duyduklar\u0131 yetkileri (proje olu\u015fturma, \u00e7al\u0131\u015ft\u0131rma, yap\u0131land\u0131rmay\u0131 g\u00f6rme vb.) atayabilirsiniz. Bu, &#8220;en az ayr\u0131cal\u0131k ilkesi&#8221;ni (principle of least privilege) uygulayarak yetkisiz eri\u015fim ve hatal\u0131 i\u015flem riskini azalt\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kimlik-Bilgilerinin-Credentials-Guvenli-Saklanmasi\"><\/span>Kimlik Bilgilerinin (Credentials) G\u00fcvenli Saklanmas\u0131<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Pipeline&#8217;lar\u0131n veritaban\u0131 parolalar\u0131, API anahtarlar\u0131, SSH anahtarlar\u0131 gibi hassas bilgilere ihtiyac\u0131 vard\u0131r. Bu bilgileri asla `Jenkinsfile` veya proje yap\u0131land\u0131rmas\u0131 i\u00e7inde d\u00fcz metin olarak saklamay\u0131n. Jenkins&#8217;in dahili &#8220;Credentials&#8221; sistemi bu t\u00fcr bilgileri \u015fifrelenmi\u015f bir \u015fekilde saklamak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Kimlik bilgileri bir kez eklendikten sonra, pipeline&#8217;lar i\u00e7inde bir de\u011fi\u015fken olarak kullan\u0131labilir ve bu bilgiler konsol \u00e7\u0131kt\u0131lar\u0131nda maskelenir. Daha geli\u015fmi\u015f g\u00fcvenlik ihtiya\u00e7lar\u0131 i\u00e7in HashiCorp Vault gibi harici s\u0131r y\u00f6netim ara\u00e7lar\u0131yla entegrasyon sa\u011flayan eklentiler de kullan\u0131labilir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-Yedekleme-ve-Geri-Yukleme-Stratejileri\"><\/span>Jenkins Yedekleme ve Geri Y\u00fckleme Stratejileri<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins sunucusunun ar\u0131zalanmas\u0131 durumunda t\u00fcm proje yap\u0131land\u0131rmalar\u0131n\u0131, i\u015f ge\u00e7mi\u015fini ve eklenti ayarlar\u0131n\u0131 kaybetmek felaketle sonu\u00e7lanabilir. Bu nedenle d\u00fczenli bir yedekleme stratejisi olu\u015fturmak zorunludur. Yedeklenmesi gereken en \u00f6nemli dizin `JENKINS_HOME` dizinidir. Bu dizin, t\u00fcm yap\u0131land\u0131rma XML dosyalar\u0131n\u0131, projeleri, eklentileri ve i\u015f ge\u00e7mi\u015fini i\u00e7erir. Yedekleme i\u015flemi, `JENKINS_HOME` dizininin periyodik olarak bir ar\u015five (\u00f6rne\u011fin, tar.gz) s\u0131k\u0131\u015ft\u0131r\u0131l\u0131p g\u00fcvenli bir konuma (farkl\u0131 bir sunucu, bulut depolama vb.) kopyalanmas\u0131yla yap\u0131labilir. &#8220;ThinBackup&#8221; gibi eklentiler de bu s\u00fcreci otomatikle\u015ftirmek i\u00e7in kullan\u0131labilir. Geri y\u00fckleme, bu yede\u011fin yeni bir Jenkins kurulumunda ilgili dizine a\u00e7\u0131lmas\u0131yla ger\u00e7ekle\u015ftirilir.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-ve-Eklentilerin-Duzenli-Olarak-Guncellenmesi\"><\/span>Jenkins ve Eklentilerin D\u00fczenli Olarak G\u00fcncellenmesi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins ve eklentileri, s\u00fcrekli olarak geli\u015ftirilen ve g\u00fcncellenen yaz\u0131l\u0131mlard\u0131r. Yeni s\u00fcr\u00fcmler genellikle performans iyile\u015ftirmeleri, yeni \u00f6zellikler ve en \u00f6nemlisi g\u00fcvenlik yamalar\u0131 i\u00e7erir. Jenkins y\u00f6neticisi, periyodik olarak &#8220;Manage Jenkins&#8221; sayfas\u0131nda \u00e7\u0131kan g\u00fcncelleme bildirimlerini kontrol etmelidir. Hem Jenkins \u00e7ekirde\u011fini (LTS s\u00fcr\u00fcm\u00fcn\u00fc takip etmek \u00f6nerilir) hem de kurulu olan t\u00fcm eklentileri g\u00fcncel tutmak, bilinen g\u00fcvenlik zafiyetlerine kar\u015f\u0131 sisteminizi koruman\u0131n en etkili yollar\u0131ndan biridir. G\u00fcncelleme yapmadan \u00f6nce, kritik bir sorun ya\u015fanmas\u0131 ihtimaline kar\u015f\u0131 sistemin yede\u011fini almak iyi bir pratiktir.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"CICD-Altyapisi-Icin-Neden-IHS-Telekomu-Tercih-Etmelisiniz\"><\/span>CI\/CD Altyap\u0131s\u0131 \u0130\u00e7in Neden \u0130HS Telekom&#8217;u Tercih Etmelisiniz?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Etkili bir CI\/CD s\u00fcreci, arkas\u0131nda yatan g\u00fc\u00e7l\u00fc ve g\u00fcvenilir sunucu altyap\u0131s\u0131na do\u011frudan ba\u011fl\u0131d\u0131r. Jenkins gibi otomasyon ara\u00e7lar\u0131n\u0131n performans\u0131, \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucunun i\u015flem g\u00fcc\u00fc, a\u011f ba\u011flant\u0131s\u0131 ve kesintisizli\u011fi ile \u00f6l\u00e7\u00fcl\u00fcr. \u0130HS Telekom, CI\/CD altyap\u0131n\u0131z i\u00e7in ihtiya\u00e7 duydu\u011funuz sa\u011flam temeli sunarak yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinizi bir \u00fcst seviyeye ta\u015f\u0131man\u0131za yard\u0131mc\u0131 olur.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Yuksek-Performansli-ve-Kesintisiz-Sunucu-Hizmetleri\"><\/span>Y\u00fcksek Performansl\u0131 ve Kesintisiz Sunucu Hizmetleri<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Derleme ve test s\u00fcre\u00e7leri, CPU ve I\/O a\u00e7\u0131s\u0131ndan olduk\u00e7a yo\u011fun olabilir. \u0130HS Telekom&#8217;un sundu\u011fu y\u00fcksek performansl\u0131 <a href=\"https:\/\/www.ihs.com.tr\/sunucu-kiralama\/vds-sunucu.html\" target=\"_blank\">VDS<\/a> ve fiziksel sunucu \u00e7\u00f6z\u00fcmleri, en karma\u015f\u0131k pipeline&#8217;lar\u0131n bile h\u0131zl\u0131 bir \u015fekilde tamamlanmas\u0131n\u0131 sa\u011flar. %99.9&#8217;un \u00fczerinde uptime garantisi ile Jenkins sunucunuzun her zaman eri\u015filebilir olaca\u011f\u0131n\u0131 bilerek, CI\/CD s\u00fcre\u00e7lerinizin kesintiye u\u011frama endi\u015fesi olmadan \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ihtiyaca-Gore-Olceklenebilir-Sanal-Sunucu-VDSVPS-Secenekleri\"><\/span>\u0130htiyaca G\u00f6re \u00d6l\u00e7eklenebilir Sanal Sunucu (VDS\/VPS) Se\u00e7enekleri<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>CI\/CD ihtiya\u00e7lar\u0131n\u0131z zamanla de\u011fi\u015febilir. Proje say\u0131n\u0131z artt\u0131k\u00e7a veya daha fazla paralel i\u015f \u00e7al\u0131\u015ft\u0131rman\u0131z gerekti\u011finde sunucu kaynaklar\u0131n\u0131z\u0131 art\u0131rman\u0131z gerekebilir. \u0130HS Telekom&#8217;un esnek <a href=\"https:\/\/www.ihs.com.tr\/sunucu-kiralama\/vps-server.html\" target=\"_blank\">VPS<\/a> ve VDS paketleri, kaynaklar\u0131n\u0131z\u0131 (CPU, RAM, Disk) ihtiya\u00e7 an\u0131nda kolayca y\u00fckseltmenize olanak tan\u0131r. K\u00fc\u00e7\u00fck bir ekiple ba\u015flay\u0131p b\u00fcy\u00fcd\u00fck\u00e7e altyap\u0131n\u0131z\u0131 sorunsuzca \u00f6l\u00e7eklendirebilir, gereksiz maliyetlerden ka\u00e7\u0131nabilirsiniz.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Guclu-Ag-Altyapisi-ve-Dusuk-Gecikme-Sureleri\"><\/span>G\u00fc\u00e7l\u00fc A\u011f Altyap\u0131s\u0131 ve D\u00fc\u015f\u00fck Gecikme S\u00fcreleri<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins&#8217;in kod depolar\u0131ndan (GitHub\/GitLab) kaynak kodu \u00e7ekmesi, Docker imajlar\u0131n\u0131 registry&#8217;lerden indirmesi ve artifact&#8217;leri y\u00fcklemesi i\u00e7in h\u0131zl\u0131 ve stabil bir internet ba\u011flant\u0131s\u0131 kritiktir. \u0130HS Telekom&#8217;un g\u00fc\u00e7l\u00fc ve yedekli a\u011f altyap\u0131s\u0131, y\u00fcksek bant geni\u015fli\u011fi ve d\u00fc\u015f\u00fck gecikme s\u00fcreleri sunarak pipeline&#8217;lar\u0131n\u0131zdaki a\u011fa ba\u011fl\u0131 ad\u0131mlar\u0131n minimum s\u00fcrede tamamlanmas\u0131n\u0131 garanti eder. Bu, \u00f6zellikle b\u00fcy\u00fck projeler ve Docker imajlar\u0131 ile \u00e7al\u0131\u015f\u0131rken s\u00fcre\u00e7lerinizi \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"724-Uzman-Teknik-Destek-ve-Danismanlik-Hizmeti\"><\/span>7\/24 Uzman Teknik Destek ve Dan\u0131\u015fmanl\u0131k Hizmeti<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sunucu ortam\u0131n\u0131n kurulumu ve y\u00f6netimi s\u0131ras\u0131nda beklenmedik sorunlarla kar\u015f\u0131la\u015fabilirsiniz. \u0130HS Telekom&#8217;un 7\/24 hizmet veren uzman teknik destek ekibi, altyap\u0131n\u0131zla ilgili her t\u00fcrl\u00fc sorunda size h\u0131zl\u0131 ve etkili \u00e7\u00f6z\u00fcmler sunar. Gerekli portlar\u0131n yap\u0131land\u0131r\u0131lmas\u0131ndan i\u015fletim sistemi optimizasyonuna kadar bir\u00e7ok konuda destek alarak, sunucu y\u00f6netimi yerine CI\/CD s\u00fcre\u00e7lerinizi iyile\u015ftirmeye odaklanabilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7leri, h\u0131z ve verimlilik \u00fczerine kuruludur. Bu s\u00fcre\u00e7lerin bel kemi\u011fini olu\u015fturan CI\/CD (S\u00fcrekli Entegrasyon ve S\u00fcrekli Da\u011f\u0131t\u0131m\/Teslimat), otomasyon sayesinde&hellip;<\/p>\n","protected":false},"author":3,"featured_media":16390,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[414],"tags":[],"class_list":["post-16389","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sunucu"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/16389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/comments?post=16389"}],"version-history":[{"count":1,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/16389\/revisions"}],"predecessor-version":[{"id":16391,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/posts\/16389\/revisions\/16391"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/media\/16390"}],"wp:attachment":[{"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/media?parent=16389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/categories?post=16389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ihs.com.tr\/blog\/wp-json\/wp\/v2\/tags?post=16389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}