{"id":35233,"date":"2025-11-27T07:40:47","date_gmt":"2025-11-27T04:40:47","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35233"},"modified":"2025-11-27T07:40:47","modified_gmt":"2025-11-27T04:40:47","slug":"ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/","title":{"rendered":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu"},"content":{"rendered":"<p><body><\/p>\n<h2>Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde h\u0131z, kalite ve g\u00fcvenilirlik, rekabet avantaj\u0131 sa\u011flaman\u0131n temel unsurlar\u0131d\u0131r. Bu unsurlar\u0131 destekleyen en kritik metodolojilerden biri S\u00fcrekli Entegrasyon (Continuous Integration &#8211; CI)&#8217;d\u0131r. CI, geli\u015ftiricilerin kod de\u011fi\u015fikliklerini ana kod taban\u0131na d\u00fczenli olarak entegre etmelerini, bu entegrasyonun otomatik olarak test edilmesini ve olas\u0131 sorunlar\u0131n erken a\u015famada tespit edilmesini sa\u011flayan bir yaz\u0131l\u0131m geli\u015ftirme uygulamas\u0131d\u0131r. Bu sayede, entegrasyon sorunlar\u0131 azal\u0131r, hatalar daha h\u0131zl\u0131 bulunur ve \u00e7\u00f6z\u00fcl\u00fcr, geli\u015ftirme s\u00fcreci h\u0131zlan\u0131r ve yaz\u0131l\u0131m\u0131n genel kalitesi artar.<\/p>\n<p>Jenkins, a\u00e7\u0131k kaynakl\u0131 ve Java tabanl\u0131, lider bir otomasyon sunucusudur. Geni\u015f eklenti ekosistemi sayesinde, yaz\u0131l\u0131m geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn hemen her a\u015famas\u0131n\u0131 otomatikle\u015ftirebilir. \u00d6zellikle s\u00fcrekli entegrasyon ve s\u00fcrekli teslimat (Continuous Delivery &#8211; CD) i\u015f hatlar\u0131 olu\u015fturmak i\u00e7in yayg\u0131n olarak kullan\u0131l\u0131r. Esnekli\u011fi, kapsaml\u0131 \u00f6zellikleri ve b\u00fcy\u00fck topluluk deste\u011fi ile Jenkins, bir\u00e7ok kurulu\u015fun tercih etti\u011fi CI\/CD arac\u0131 haline gelmi\u015ftir.<\/p>\n<p>Bu makalede, Ubuntu 20.04 i\u015fletim sistemi \u00fczerinde Jenkins&#8217;i nas\u0131l kuraca\u011f\u0131m\u0131z\u0131, temel yap\u0131land\u0131rmalar\u0131n\u0131 nas\u0131l yapaca\u011f\u0131m\u0131z\u0131 ve basit bir S\u00fcrekli Entegrasyon i\u015f hatt\u0131n\u0131 ad\u0131m ad\u0131m nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Amac\u0131m\u0131z, geli\u015ftiricilere ve DevOps m\u00fchendislerine, Jenkins&#8217;in g\u00fcc\u00fcn\u00fc kullanarak otomatikle\u015ftirilmi\u015f derleme, test ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri olu\u015fturma konusunda pratik bir rehber sunmakt\u0131r.<\/p>\n<h3>\u00d6n Gereksinimler ve Sistem Haz\u0131rl\u0131\u011f\u0131<\/h3>\n<p>Jenkins&#8217;i Ubuntu 20.04 \u00fczerine kurmadan \u00f6nce, sunucumuzun belirli gereksinimleri kar\u015f\u0131lad\u0131\u011f\u0131ndan ve temel haz\u0131rl\u0131klar\u0131n yap\u0131ld\u0131\u011f\u0131ndan emin olmal\u0131y\u0131z.<\/p>\n<h4>Ubuntu 20.04 Sunucusu<\/h4>\n<p>Jenkins&#8217;i kuraca\u011f\u0131m\u0131z bir Ubuntu 20.04 sunucusuna ihtiyac\u0131m\u0131z var. Bu bir sanal makine, fiziksel sunucu veya bulut tabanl\u0131 bir \u00f6rnek olabilir. Minimum sistem gereksinimleri genellikle 2 GB RAM ve 25 GB disk alan\u0131 olarak \u00f6nerilir, ancak i\u015f y\u00fck\u00fcn\u00fcze ve \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z projelere g\u00f6re bu de\u011ferler art\u0131r\u0131lmal\u0131d\u0131r.<\/p>\n<h4>Java Development Kit (JDK) Kurulumu<\/h4>\n<p>Jenkins bir Java uygulamas\u0131 oldu\u011fu i\u00e7in, \u00e7al\u0131\u015fabilmesi i\u00e7in bir Java Runtime Environment (JRE) veya daha iyisi bir Java Development Kit (JDK) gereklidir. OpenJDK, a\u00e7\u0131k kaynakl\u0131 ve \u00fccretsiz bir se\u00e7enektir ve Jenkins ile uyumlulu\u011fu y\u00fcksektir.<\/p>\n<p>\u00d6ncelikle sistem paketlerini g\u00fcncelleyelim:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<p>Ard\u0131ndan OpenJDK 11&#8217;i kural\u0131m. Jenkins&#8217;in en son s\u00fcr\u00fcmleri genellikle OpenJDK 11 veya 17&#8217;yi tercih eder.<\/p>\n<pre><code class=\"language-bash\">sudo apt install openjdk-11-jdk -y<\/code><\/pre>\n<p>Kurulumun ba\u015far\u0131l\u0131 oldu\u011funu do\u011frulamak i\u00e7in Java s\u00fcr\u00fcm\u00fcn\u00fc kontrol edebiliriz:<\/p>\n<pre><code class=\"language-bash\">java -version<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131 olarak OpenJDK 11&#8217;e ait s\u00fcr\u00fcm bilgilerini g\u00f6rmelisiniz.<\/p>\n<h4>Firewall Yap\u0131land\u0131rmas\u0131 (UFW)<\/h4>\n<p>G\u00fcvenlik amac\u0131yla, sunucumuzda bir g\u00fcvenlik duvar\u0131 (firewall) etkinle\u015ftirilmi\u015f olmal\u0131d\u0131r. Ubuntu&#8217;da varsay\u0131lan olarak UFW (Uncomplicated Firewall) bulunur. Jenkins varsay\u0131lan olarak 8080 portunu kullan\u0131r. Bu porta d\u0131\u015far\u0131dan eri\u015fime izin vermemiz gerekmektedir.<\/p>\n<p>SSH ba\u011flant\u0131s\u0131na izin verin (e\u011fer kullan\u0131yorsan\u0131z):<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow OpenSSH<\/code><\/pre>\n<p>Jenkins&#8217;in varsay\u0131lan portu olan 8080&#8217;e izin verin:<\/p>\n<pre><code class=\"language-bash\">sudo ufw allow 8080<\/code><\/pre>\n<p>G\u00fcvenlik duvar\u0131n\u0131 etkinle\u015ftirin:<\/p>\n<pre><code class=\"language-bash\">sudo ufw enable<\/code><\/pre>\n<p>G\u00fcvenlik duvar\u0131 durumunu kontrol edin:<\/p>\n<pre><code class=\"language-bash\">sudo ufw status<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da 8080 ve OpenSSH portlar\u0131n\u0131n izinli oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h3>Jenkins Kurulumu<\/h3>\n<p>Jenkins&#8217;i Ubuntu&#8217;ya kurman\u0131n en kolay yolu, resmi Jenkins APT deposunu kullanmakt\u0131r.<\/p>\n<h4>Jenkins Depo Anahtar\u0131n\u0131 Ekleme<\/h4>\n<p>\u0130lk olarak, Jenkins deposunun GPG anahtar\u0131n\u0131 sistemimize eklemeliyiz. Bu, indirdi\u011fimiz paketlerin g\u00fcvenilirli\u011fini do\u011frulamak i\u00e7in gereklidir.<\/p>\n<pre><code class=\"language-bash\">curl -fsSL https:\/\/pkg.jenkins.io\/debian-stable\/jenkins.io.key | sudo tee \\\n  \/usr\/share\/keyrings\/jenkins-keyring.asc > \/dev\/null<\/code><\/pre>\n<h4>Jenkins Deposunu Ekleme<\/h4>\n<p>\u015eimdi Jenkins deposunu APT kaynak listemize ekleyelim:<\/p>\n<pre><code class=\"language-bash\">echo deb [signed-by=\/usr\/share\/keyrings\/jenkins-keyring.asc] \\\n  https:\/\/pkg.jenkins.io\/debian-stable binary\/ | sudo tee \\\n  \/etc\/apt\/sources.list.d\/jenkins.list > \/dev\/null<\/code><\/pre>\n<h4>Jenkins&#8217;i Kurma<\/h4>\n<p>Depo eklendikten sonra, paket listemizi g\u00fcncelleyip Jenkins&#8217;i kurabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install jenkins -y<\/code><\/pre>\n<h4>Jenkins Servisini Ba\u015flatma ve Etkinle\u015ftirme<\/h4>\n<p>Kurulum tamamland\u0131ktan sonra Jenkins servisi otomatik olarak ba\u015flamal\u0131d\u0131r. Ba\u015flamad\u0131\u011f\u0131n\u0131 veya durumunu kontrol etmek i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 kullanabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl start jenkins\nsudo systemctl enable jenkins\nsudo systemctl status jenkins<\/code><\/pre>\n<p><code>systemctl status jenkins<\/code> komutunun \u00e7\u0131kt\u0131s\u0131nda &#8220;active (running)&#8221; ifadesini g\u00f6rmelisiniz.<\/p>\n<h4>\u0130lk Jenkins Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Jenkins servisi \u00e7al\u0131\u015f\u0131r durumda oldu\u011funa g\u00f6re, web aray\u00fcz\u00fcne eri\u015febiliriz. Taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresi veya alan adresi ve 8080 portunu kullanarak eri\u015fin: <code>http:\/\/<your_server_ip_or_domain>:8080<\/code><\/p>\n<p>\u0130lk eri\u015fimde Jenkins sizden bir &#8220;initial admin password&#8221; isteyecektir. Bu parola, kurulum s\u0131ras\u0131nda olu\u015fturulan ve g\u00fcvenlik amac\u0131yla kullan\u0131lan ge\u00e7ici bir parolad\u0131r. Parolay\u0131 a\u015fa\u011f\u0131daki komutla bulabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo cat \/var\/lib\/jenkins\/secrets\/initialAdminPassword<\/code><\/pre>\n<p>Bu parolay\u0131 kopyalay\u0131p Jenkins web aray\u00fcz\u00fcndeki ilgili alana yap\u0131\u015ft\u0131r\u0131n ve &#8220;Continue&#8221; (Devam) butonuna t\u0131klay\u0131n.<\/p>\n<h5>Eklenti Kurulumu<\/h5>\n<p>Sonraki ad\u0131mda Jenkins sizden eklentileri kurman\u0131z\u0131 isteyecektir. \u0130ki se\u00e7ene\u011finiz vard\u0131r: &#8220;Install suggested plugins&#8221; (\u00d6nerilen eklentileri kur) veya &#8220;Select plugins to install&#8221; (Kurulacak eklentileri se\u00e7). Genellikle &#8220;Install suggested plugins&#8221; se\u00e7ene\u011fi iyi bir ba\u015flang\u0131\u00e7t\u0131r, \u00e7\u00fcnk\u00fc temel CI\/CD i\u015flevleri i\u00e7in gerekli olan eklentileri otomatik olarak kurar (Git, Pipeline, Maven vb.). \u0130htiya\u00e7lar\u0131n\u0131za g\u00f6re daha sonra ek eklentiler kurabilirsiniz.<\/p>\n<h5>Y\u00f6netici Kullan\u0131c\u0131s\u0131 Olu\u015fturma<\/h5>\n<p>Eklenti kurulumu tamamland\u0131ktan sonra, Jenkins sizden bir y\u00f6netici kullan\u0131c\u0131s\u0131 olu\u015fturman\u0131z\u0131 isteyecektir. G\u00fcvenlik nedeniyle, bu ad\u0131m\u0131 tamamlay\u0131p g\u00fc\u00e7l\u00fc bir kullan\u0131c\u0131 ad\u0131 ve parola belirlemeniz \u00f6nemlidir. Bu kullan\u0131c\u0131, Jenkins&#8217;e giri\u015f yapmak ve y\u00f6netim g\u00f6revlerini yerine getirmek i\u00e7in kullan\u0131lacakt\u0131r.<\/p>\n<h5>Jenkins URL Yap\u0131land\u0131rmas\u0131<\/h5>\n<p>Son olarak, Jenkins URL&#8217;sini yap\u0131land\u0131rman\u0131z istenecektir. Varsay\u0131lan URL genellikle do\u011fru olacakt\u0131r, ancak bir proxy arkas\u0131nda \u00e7al\u0131\u015f\u0131yorsan\u0131z veya \u00f6zel bir alan ad\u0131 kullan\u0131yorsan\u0131z bunu d\u00fczenlemeniz gerekebilir. &#8220;Save and Finish&#8221; (Kaydet ve Bitir) butonuna t\u0131klayarak kurulumu tamamlay\u0131n.<\/p>\n<p>Art\u0131k Jenkins ana paneline y\u00f6nlendirileceksiniz. Kurulum ba\u015far\u0131l\u0131 bir \u015fekilde tamamlanm\u0131\u015ft\u0131r.<\/p>\n<h3>Jenkins Temel Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Jenkins ana paneline eri\u015ftikten sonra, CI i\u015f hatlar\u0131m\u0131z\u0131 olu\u015fturmadan \u00f6nce baz\u0131 temel yap\u0131land\u0131rmalar\u0131 yapmak faydal\u0131 olacakt\u0131r.<\/p>\n<h4>Global Tool Configuration (K\u00fcresel Ara\u00e7 Yap\u0131land\u0131rmas\u0131)<\/h4>\n<p>Jenkins&#8217;in derleme ve test i\u015flemleri i\u00e7in harici ara\u00e7lar\u0131 (JDK, Maven, Gradle, Git vb.) nerede bulaca\u011f\u0131n\u0131 bilmesi gerekir. Bu yap\u0131land\u0131rmay\u0131 &#8220;Manage Jenkins&#8221; (Jenkins&#8217;i Y\u00f6net) -> &#8220;Global Tool Configuration&#8221; (K\u00fcresel Ara\u00e7 Yap\u0131land\u0131rmas\u0131) alt\u0131nda yapabiliriz.<\/p>\n<h5>JDK Yap\u0131land\u0131rmas\u0131<\/h5>\n<p>Daha \u00f6nce OpenJDK 11 kurdu\u011fumuz i\u00e7in, Jenkins&#8217;in bu JDK&#8217;yi kullanmas\u0131n\u0131 sa\u011flayabiliriz.<br \/>\n1.  &#8220;JDK Installations&#8221; (JDK Kurulumlar\u0131) alt\u0131nda &#8220;Add JDK&#8221; (JDK Ekle) butonuna t\u0131klay\u0131n.<br \/>\n2.  &#8220;Name&#8221; (\u0130sim) alan\u0131na &#8220;OpenJDK 11&#8221; gibi bir isim verin.<br \/>\n3.  &#8220;JAVA_HOME&#8221; alan\u0131na JDK&#8217;nin kurulu oldu\u011fu yolu girin. Ubuntu&#8217;da bu genellikle <code>\/usr\/lib\/jvm\/java-11-openjdk-amd64<\/code> \u015feklindedir.<br \/>\n4.  &#8220;Save&#8221; (Kaydet) butonuna t\u0131klay\u0131n.<\/p>\n<h5>Git Yap\u0131land\u0131rmas\u0131<\/h5>\n<p>Git genellikle sisteminizde zaten y\u00fckl\u00fcd\u00fcr. Jenkins&#8217;in bunu kullanabilmesi i\u00e7in yolunu belirtmek iyi bir uygulamad\u0131r.<br \/>\n1.  &#8220;Git Installations&#8221; (Git Kurulumlar\u0131) alt\u0131nda &#8220;Add Git&#8221; (Git Ekle) butonuna t\u0131klay\u0131n.<br \/>\n2.  &#8220;Name&#8221; (\u0130sim) alan\u0131na &#8220;Default Git&#8221; gibi bir isim verin.<br \/>\n3.  &#8220;Path to Git executable&#8221; (Git y\u00fcr\u00fct\u00fclebilir dosyas\u0131n\u0131n yolu) alan\u0131na <code>git<\/code> yaz\u0131n. Jenkins bunu otomatik olarak sistem PATH&#8217;inden bulacakt\u0131r.<br \/>\n4.  &#8220;Save&#8221; (Kaydet) butonuna t\u0131klay\u0131n.<\/p>\n<h5>Maven Yap\u0131land\u0131rmas\u0131 (Opsiyonel)<\/h5>\n<p>E\u011fer Maven tabanl\u0131 projelerle \u00e7al\u0131\u015facaksan\u0131z, Maven&#8217;\u0131 da yap\u0131land\u0131rman\u0131z gerekir.<br \/>\n1.  &#8220;Maven Installations&#8221; (Maven Kurulumlar\u0131) alt\u0131nda &#8220;Add Maven&#8221; (Maven Ekle) butonuna t\u0131klay\u0131n.<br \/>\n2.  &#8220;Name&#8221; (\u0130sim) alan\u0131na &#8220;Maven 3.x&#8221; gibi bir isim verin.<br \/>\n3.  &#8220;Install automatically&#8221; (Otomatik kur) se\u00e7ene\u011fini i\u015faretleyebilir ve Jenkins&#8217;in sizin i\u00e7in Maven&#8217;\u0131 indirmesini sa\u011flayabilirsiniz. Veya manuel olarak kurup yolunu belirtebilirsiniz.<br \/>\n4.  &#8220;Save&#8221; (Kaydet) butonuna t\u0131klay\u0131n.<\/p>\n<h4>G\u00fcvenlik ve Kullan\u0131c\u0131 Y\u00f6netimi<\/h4>\n<p>Jenkins&#8217;in g\u00fcvenli\u011fi, &#8220;Manage Jenkins&#8221; -> &#8220;Manage Users&#8221; (Kullan\u0131c\u0131lar\u0131 Y\u00f6net) ve &#8220;Configure Global Security&#8221; (K\u00fcresel G\u00fcvenli\u011fi Yap\u0131land\u0131r) alt\u0131nda y\u00f6netilir.<br \/>\n*   <strong>Kullan\u0131c\u0131 Y\u00f6netimi:<\/strong> Yeni kullan\u0131c\u0131lar olu\u015fturabilir, parolalar\u0131n\u0131 de\u011fi\u015ftirebilir veya silebilirsiniz.<br \/>\n*   <strong>K\u00fcresel G\u00fcvenlik:<\/strong> Kimlik do\u011frulama (authentication) ve yetkilendirme (authorization) stratejilerini ayarlayabilirsiniz. Genellikle &#8220;Jenkins&#8217;in kendi kullan\u0131c\u0131 veritaban\u0131&#8221; ve &#8220;Matris tabanl\u0131 g\u00fcvenlik&#8221; veya &#8220;Proje tabanl\u0131 strateji&#8221; tercih edilir. Bu, hangi kullan\u0131c\u0131n\u0131n hangi i\u015fleme yetkili oldu\u011funu kontrol etmenizi sa\u011flar.<\/p>\n<h3>S\u00fcrekli Entegrasyon \u0130\u015f Hatlar\u0131 (CI Pipelines) Kavram\u0131<\/h3>\n<p>Jenkins&#8217;teki bir i\u015f hatt\u0131 (pipeline), yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecinizin tamam\u0131n\u0131 veya bir k\u0131sm\u0131n\u0131 otomatikle\u015ftiren bir dizi olay veya &#8220;ad\u0131m&#8221;d\u0131r. Bir i\u015f hatt\u0131, kodu derlemek, test etmek, da\u011f\u0131tmak ve hatta izlemek gibi bir dizi ard\u0131\u015f\u0131k veya paralel g\u00f6revi i\u00e7erebilir.<\/p>\n<h4>Declarative (Bildirimsel) ve Scripted (Betiksel) \u0130\u015f Hatlar\u0131<\/h4>\n<p>Jenkins Pipeline, iki farkl\u0131 s\u00f6zdizimi ile tan\u0131mlanabilir:<br \/>\n*   <strong>Declarative Pipeline (Bildirimsel \u0130\u015f Hatt\u0131):<\/strong> Daha modern ve kullan\u0131c\u0131 dostu bir s\u00f6zdizimidir. Yap\u0131s\u0131 daha kat\u0131 ve \u00f6nceden tan\u0131mlanm\u0131\u015f bloklara sahiptir (agent, stages, steps, post vb.). Okunabilirli\u011fi ve bak\u0131m\u0131 daha kolayd\u0131r. Genellikle yeni projeler i\u00e7in tercih edilir.<br \/>\n*   <strong>Scripted Pipeline (Betiksel \u0130\u015f Hatt\u0131):<\/strong> Groovy tabanl\u0131, daha esnek bir s\u00f6zdizimidir. T\u00fcm Groovy \u00f6zelliklerini kullanabilir ve daha karma\u015f\u0131k mant\u0131klar i\u00e7in uygundur. Ancak daha fazla Groovy bilgisi gerektirir ve yap\u0131sal olarak daha az k\u0131s\u0131tlay\u0131c\u0131 oldu\u011fu i\u00e7in bak\u0131m\u0131 daha zor olabilir.<\/p>\n<p>Bu makalede, daha yayg\u0131n ve \u00f6nerilen Declarative Pipeline&#8217;\u0131 kullanaca\u011f\u0131z.<\/p>\n<h4>Jenkinsfile: \u0130\u015f Hatt\u0131n\u0131n Kodu<\/h4>\n<p>Jenkinsfile, bir Jenkins i\u015f hatt\u0131n\u0131n tan\u0131m\u0131n\u0131 i\u00e7eren metin tabanl\u0131 bir dosyad\u0131r. Bu dosya, projenizin kaynak kontrol sisteminde (Git gibi) depolan\u0131r. Bu yakla\u015f\u0131m\u0131n bir\u00e7ok avantaj\u0131 vard\u0131r:<br \/>\n*   <strong>Versiyon Kontrol\u00fc:<\/strong> \u0130\u015f hatt\u0131n\u0131z, kodunuzla birlikte versiyon kontrol\u00fcne tabi tutulur. Bu, de\u011fi\u015fiklikleri takip etmeyi, geri almay\u0131 ve i\u015f hatt\u0131n\u0131n farkl\u0131 s\u00fcr\u00fcmlerini y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Kod Olarak \u0130\u015f Hatt\u0131 (Pipeline as Code):<\/strong> \u0130\u015f hatt\u0131 tan\u0131m\u0131, projenin kendisinin bir par\u00e7as\u0131 haline gelir.<br \/>\n*   <strong>Tekrarlanabilirlik:<\/strong> \u0130\u015f hatt\u0131 tan\u0131m\u0131 her zaman ayn\u0131d\u0131r ve farkl\u0131 ortamlarda veya farkl\u0131 Jenkins \u00f6rneklerinde ayn\u0131 \u015fekilde \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong>\u0130\u015fbirli\u011fi:<\/strong> Geli\u015ftirme ekibi, Jenkinsfile \u00fczerinde i\u015fbirli\u011fi yapabilir ve i\u015f hatt\u0131 de\u011fi\u015fikliklerini kod inceleme s\u00fcre\u00e7lerine dahil edebilir.<\/p>\n<h4>Temel \u0130\u015f Hatt\u0131 Yap\u0131 Ta\u015flar\u0131<\/h4>\n<p>Bir Declarative Pipeline&#8217;\u0131n temel yap\u0131 ta\u015flar\u0131 \u015funlard\u0131r:<br \/>\n*   <strong><code>pipeline<\/code>:<\/strong> T\u00fcm i\u015f hatt\u0131n\u0131 kapsayan k\u00f6k bloktur.<br \/>\n*   <strong><code>agent<\/code>:<\/strong> \u0130\u015f hatt\u0131n\u0131n nerede \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtir (\u00f6rne\u011fin, <code>agent any<\/code> herhangi bir mevcut arac\u0131 kullan\u0131r, <code>agent { docker 'maven:3.8.1-jdk-11' }<\/code> belirli bir Docker konteynerinde \u00e7al\u0131\u015f\u0131r).<br \/>\n*   <strong><code>stages<\/code>:<\/strong> \u0130\u015f hatt\u0131n\u0131 mant\u0131ksal ad\u0131mlara b\u00f6len bir koleksiyondur. Her <code>stage<\/code> (a\u015fama) belirli bir g\u00f6revi temsil eder (derleme, test etme, da\u011f\u0131tma vb.).<br \/>\n*   <strong><code>stage<\/code>:<\/strong> Bir i\u015f hatt\u0131 i\u00e7indeki tek bir a\u015famad\u0131r. Her a\u015fama bir veya daha fazla <code>steps<\/code> (ad\u0131m) i\u00e7erir.<br \/>\n*   <strong><code>steps<\/code>:<\/strong> Bir a\u015fama i\u00e7inde y\u00fcr\u00fct\u00fclen komut veya eylemlerin dizisidir. <code>sh<\/code> (shell komutu), <code>bat<\/code> (Windows batch komutu), <code>git<\/code>, <code>junit<\/code> gibi \u00e7e\u015fitli ad\u0131mlar olabilir.<br \/>\n*   <strong><code>post<\/code>:<\/strong> \u0130\u015f hatt\u0131n\u0131n veya bir a\u015faman\u0131n tamamlanmas\u0131ndan sonra (ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z, her zaman vb. durumlara g\u00f6re) \u00e7al\u0131\u015ft\u0131r\u0131lacak eylemleri tan\u0131mlar.<\/p>\n<h3>\u00d6rnek Bir CI \u0130\u015f Hatt\u0131 Olu\u015fturma<\/h3>\n<p>\u015eimdi basit bir Java\/Maven projesi i\u00e7in bir CI i\u015f hatt\u0131 olu\u015ftural\u0131m. Bu i\u015f hatt\u0131, kodu bir Git deposundan \u00e7ekecek, derleyecek, test edecek ve sonu\u00e7lar\u0131 raporlayacakt\u0131r.<\/p>\n<h4>\u00d6rnek Proje Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<p>\u00d6ncelikle, GitHub veya GitLab gibi bir platformda basit bir Maven projesi olu\u015ftural\u0131m.<br \/>\n\u00d6rnek <code>pom.xml<\/code>:<\/p>\n<pre><code class=\"language-xml\"><?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"\n         xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n         xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">\n    <modelVersion>4.0.0<\/modelVersion>\n\n    <groupId>com.example<\/groupId>\n    <artifactId>my-app<\/artifactId>\n    <version>1.0-SNAPSHOT<\/version>\n\n    <properties>\n        <maven.compiler.source>11<\/maven.compiler.source>\n        <maven.compiler.target>11<\/maven.compiler.target>\n        <project.build.sourceEncoding>UTF-8<\/project.build.sourceEncoding>\n    <\/properties>\n\n    <dependencies>\n        <dependency>\n            <groupId>junit<\/groupId>\n            <artifactId>junit<\/artifactId>\n            <version>4.13.2<\/version>\n            <scope>test<\/scope>\n        <\/dependency>\n    <\/dependencies>\n\n    <build>\n        <plugins>\n            <plugin>\n                <groupId>org.apache.maven.plugins<\/groupId>\n                <artifactId>maven-surefire-plugin<\/artifactId>\n                <version>2.22.2<\/version>\n            <\/plugin>\n        <\/plugins>\n    <\/build>\n<\/project><\/code><\/pre>\n<p>\u00d6rnek <code>src\/main\/java\/com\/example\/App.java<\/code>:<\/p>\n<pre><code class=\"language-java\">package com.example;\n\npublic class App {\n    public String getGreeting() {\n        return \"Hello World!\";\n    }\n\n    public static void main(String[] args) {\n        System.out.println(new App().getGreeting());\n    }\n}<\/code><\/pre>\n<p>\u00d6rnek <code>src\/test\/java\/com\/example\/AppTest.java<\/code>:<\/p>\n<pre><code class=\"language-java\">package com.example;\n\nimport static org.junit.Assert.assertEquals;\nimport org.junit.Test;\n\npublic class AppTest {\n    @Test\n    public void testGetGreeting() {\n        App app = new App();\n        assertEquals(\"Hello World!\", app.getGreeting());\n    }\n}<\/code><\/pre>\n<p>Bu dosyalar\u0131 i\u00e7eren bir Git deposu olu\u015fturun ve kodunuzu bu depoya y\u00fckleyin. \u00d6rne\u011fin, <code>https:\/\/github.com\/kullaniciadi\/my-java-app.git<\/code> gibi bir URL&#8217;ye sahip olun.<\/p>\n<h4>Jenkinsfile Olu\u015fturma<\/h4>\n<p>Projenizin k\u00f6k dizinine <code>Jenkinsfile<\/code> ad\u0131nda bir dosya olu\u015fturun ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi ekleyin:<\/p>\n<pre><code class=\"language-groovy\">\/\/ Jenkinsfile\npipeline {\n    agent any \/\/ \u0130\u015f hatt\u0131n\u0131 herhangi bir mevcut Jenkins arac\u0131s\u0131nda \u00e7al\u0131\u015ft\u0131r\n\n    tools {\n        \/\/ Maven'\u0131 Global Tool Configuration'dan kullan\n        \/\/ 'Maven 3.x' daha \u00f6nce Global Tool Configuration'da tan\u0131mlad\u0131\u011f\u0131m\u0131z Maven ismidir.\n        maven 'Maven 3.x' \n        \/\/ JDK'yi Global Tool Configuration'dan kullan\n        \/\/ 'OpenJDK 11' daha \u00f6nce Global Tool Configuration'da tan\u0131mlad\u0131\u011f\u0131m\u0131z JDK ismidir.\n        jdk 'OpenJDK 11'\n    }\n\n    stages {\n        stage('Checkout') {\n            steps {\n                \/\/ Git deposundan kodu otomatik olarak \u00e7ekecek\n                \/\/ Bu ad\u0131m, SCM yap\u0131land\u0131rmas\u0131 taraf\u0131ndan otomatik olarak halledilir.\n                \/\/ Burada sadece bir placeholder olarak duruyor, asl\u0131nda bir komut yazmaya gerek yok.\n                echo 'Checking out code...' \n            }\n        }\n\n        stage('Build') {\n            steps {\n                \/\/ Maven ile projeyi derle\n                sh 'mvn clean install -DskipTests' \n            }\n        }\n\n        stage('Test') {\n            steps {\n                \/\/ Maven ile testleri \u00e7al\u0131\u015ft\u0131r\n                sh 'mvn test'\n            }\n        }\n\n        stage('Publish Test Results') {\n            steps {\n                \/\/ JUnit test sonu\u00e7lar\u0131n\u0131 yay\u0131nla\n                junit '<em><\/em>\/target\/surefire-reports\/*.xml' \n            }\n        }\n    }\n\n    post {\n        always {\n            echo 'Pipeline finished.'\n        }\n        success {\n            echo 'Pipeline succeeded!'\n            \/\/ Ba\u015far\u0131l\u0131 durumda e-posta g\u00f6nderme vb. eylemler eklenebilir.\n        }\n        failure {\n            echo 'Pipeline failed!'\n            \/\/ Ba\u015far\u0131s\u0131z durumda bildirim g\u00f6nderme vb. eylemler eklenebilir.\n        }\n    }\n}<\/code><\/pre>\n<p>Bu <code>Jenkinsfile<\/code> dosyas\u0131n\u0131 Git deponuza commit edin ve push edin.<\/p>\n<h4>Jenkins&#8217;te Yeni Bir \u0130\u015f (Job) Olu\u015fturma<\/h4>\n<p>\u015eimdi Jenkins&#8217;e geri d\u00f6nelim ve bu <code>Jenkinsfile<\/code>&#8216;\u0131 kullanacak yeni bir i\u015f hatt\u0131 olu\u015ftural\u0131m:<\/p>\n<p>1.  Jenkins ana panelinde &#8220;New Item&#8221; (Yeni \u00d6\u011fe) veya &#8220;Create a job&#8221; (Bir i\u015f olu\u015ftur) se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n2.  \u00d6\u011fe ad\u0131 olarak &#8220;my-java-ci-pipeline&#8221; gibi bir isim verin.<br \/>\n3.  &#8220;Pipeline&#8221; (\u0130\u015f Hatt\u0131) se\u00e7ene\u011fini se\u00e7in ve &#8220;OK&#8221; (Tamam) butonuna t\u0131klay\u0131n.<\/p>\n<h5>\u0130\u015f Hatt\u0131 Yap\u0131land\u0131rmas\u0131<\/h5>\n<p>Yeni a\u00e7\u0131lan yap\u0131land\u0131rma sayfas\u0131nda a\u015fa\u011f\u0131daki ayarlar\u0131 yap\u0131n:<\/p>\n<p>1.  <strong>General (Genel):<\/strong><br \/>\n    *   \u0130ste\u011fe ba\u011fl\u0131 olarak bir a\u00e7\u0131klama ekleyebilirsiniz.<br \/>\n2.  <strong>Build Triggers (Derleme Tetikleyicileri):<\/strong><br \/>\n    *   Bu b\u00f6l\u00fcmde i\u015f hatt\u0131n\u0131n ne zaman \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirleyebilirsiniz. \u015eimdilik manuel tetikleme ile ba\u015flayaca\u011f\u0131z. Daha sonra &#8220;GitHub hook trigger for GITScm polling&#8221; veya &#8220;Poll SCM&#8221; gibi se\u00e7enekleri kullanarak Git deposundaki de\u011fi\u015fikliklerde otomatik tetiklemeyi ayarlayabiliriz.<br \/>\n3.  <strong>Pipeline (\u0130\u015f Hatt\u0131):<\/strong><br \/>\n    *   <strong>Definition (Tan\u0131m):<\/strong> &#8220;Pipeline script from SCM&#8221; (SCM&#8217;den i\u015f hatt\u0131 beti\u011fi) se\u00e7ene\u011fini se\u00e7in. Bu, Jenkins&#8217;in <code>Jenkinsfile<\/code>&#8216;\u0131 do\u011frudan Git deponuzdan okumas\u0131n\u0131 sa\u011flayacakt\u0131r.<br \/>\n    *   <strong>SCM (Kaynak Kontrol Y\u00f6netimi):<\/strong> &#8220;Git&#8221; se\u00e7ene\u011fini se\u00e7in.<br \/>\n        *   <strong>Repository URL (Depo URL&#8217;si):<\/strong> Git deponuzun URL&#8217;sini girin (\u00f6rn. <code>https:\/\/github.com\/kullaniciadi\/my-java-app.git<\/code>).<br \/>\n        *   <strong>Credentials (Kimlik Bilgileri):<\/strong> E\u011fer deponuz \u00f6zel (private) ise, &#8220;Add&#8221; (Ekle) butonuna t\u0131klayarak Git hesab\u0131n\u0131z\u0131n kullan\u0131c\u0131 ad\u0131 ve parola veya SSH anahtar\u0131 gibi kimlik bilgilerini eklemeniz gerekir. Genel (public) depolar i\u00e7in bu ad\u0131m gerekli de\u011fildir.<br \/>\n        <em>   <strong>Branches to build (Derlenecek dallar):<\/strong> Genellikle <code><\/em>\/main<\/code> veya <code>*\/master<\/code> olarak kal\u0131r.<br \/>\n        *   <strong>Script Path (Betik Yolu):<\/strong> <code>Jenkinsfile<\/code> olarak b\u0131rak\u0131n. Bu, Jenkins&#8217;in deponuzun k\u00f6k dizininde <code>Jenkinsfile<\/code> adl\u0131 dosyay\u0131 arayaca\u011f\u0131n\u0131 belirtir.<\/p>\n<p>4.  &#8220;Save&#8221; (Kaydet) butonuna t\u0131klayarak i\u015f hatt\u0131 yap\u0131land\u0131rmas\u0131n\u0131 tamamlay\u0131n.<\/p>\n<h3>\u0130\u015f Hatt\u0131n\u0131n \u00c7al\u0131\u015ft\u0131r\u0131lmas\u0131 ve \u0130zlenmesi<\/h3>\n<p>\u0130\u015f hatt\u0131n\u0131 yap\u0131land\u0131rd\u0131ktan sonra, ilk derlemeyi manuel olarak tetikleyebiliriz.<\/p>\n<p>1.  \u0130\u015f hatt\u0131n\u0131z\u0131n ana sayfas\u0131na gidin (Jenkins ana panelinde i\u015f hatt\u0131 ad\u0131na t\u0131klayarak).<br \/>\n2.  Sol men\u00fcdeki &#8220;Build Now&#8221; (\u015eimdi Derle) se\u00e7ene\u011fine t\u0131klay\u0131n.<\/p>\n<p>Jenkins, i\u015f hatt\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmaya ba\u015flayacakt\u0131r. Derleme ge\u00e7mi\u015fi b\u00f6l\u00fcm\u00fcnde yeni bir derleme numaras\u0131 belirecektir. Bu derleme numaras\u0131na t\u0131klayarak veya &#8220;Pipeline Stage View&#8221; (\u0130\u015f Hatt\u0131 A\u015fama G\u00f6r\u00fcn\u00fcm\u00fc) ekran\u0131na giderek ilerlemeyi izleyebilirsiniz.<\/p>\n<h4>Konsol \u00c7\u0131kt\u0131s\u0131 ve A\u015fama G\u00f6r\u00fcn\u00fcm\u00fc<\/h4>\n<p>*   <strong>Console Output (Konsol \u00c7\u0131kt\u0131s\u0131):<\/strong> Derleme numaras\u0131na t\u0131klay\u0131p sol men\u00fcdeki &#8220;Console Output&#8221; se\u00e7ene\u011fini se\u00e7erek, i\u015f hatt\u0131n\u0131n ad\u0131m ad\u0131m y\u00fcr\u00fctt\u00fc\u011f\u00fc t\u00fcm komutlar\u0131 ve bunlar\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 g\u00f6rebilirsiniz. Bu, sorun giderme i\u00e7in \u00e7ok \u00f6nemlidir.<br \/>\n*   <strong>Pipeline Stage View:<\/strong> Bu g\u00f6r\u00fcn\u00fcm, i\u015f hatt\u0131n\u0131z\u0131n her a\u015famas\u0131n\u0131n durumunu (ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z, devam ediyor) g\u00f6rsel olarak g\u00f6sterir. Her a\u015faman\u0131n \u00fczerine t\u0131klayarak ilgili loglara veya test sonu\u00e7lar\u0131na eri\u015febilirsiniz.<\/p>\n<p>E\u011fer her \u015fey do\u011fru yap\u0131land\u0131r\u0131ld\u0131ysa, i\u015f hatt\u0131 ba\u015far\u0131l\u0131 bir \u015fekilde tamamlanmal\u0131 ve ye\u015fil renkte g\u00f6r\u00fcnmelidir. &#8220;Publish Test Results&#8221; a\u015famas\u0131nda, JUnit test sonu\u00e7lar\u0131n\u0131 da Jenkins aray\u00fcz\u00fcnde g\u00f6rebilirsiniz.<\/p>\n<h3>Geli\u015fmi\u015f Konular ve En \u0130yi Uygulamalar<\/h3>\n<p>Jenkins ve CI\/CD d\u00fcnyas\u0131 olduk\u00e7a geni\u015f ve derinlemesine bir aland\u0131r. \u0130\u015fte daha ileri seviye yap\u0131land\u0131rmalar ve en iyi uygulamalar:<\/p>\n<h4>Webhook Entegrasyonu ile Otomatik Tetikleme<\/h4>\n<p>Manuel tetikleme yerine, Git deponuzda (GitHub, GitLab, Bitbucket) bir de\u011fi\u015fiklik oldu\u011funda i\u015f hatt\u0131n\u0131n otomatik olarak tetiklenmesini sa\u011flayabilirsiniz. Bu, bir &#8220;webhook&#8221; kurarak yap\u0131l\u0131r.<br \/>\n1.  Git deponuzun ayarlar\u0131na gidin ve bir webhook ekleyin.<br \/>\n2.  Webhook URL&#8217;si genellikle <code>http:\/\/<your_jenkins_url>\/github-webhook\/<\/code> (GitHub i\u00e7in) veya <code>http:\/\/<your_jenkins_url>\/project\/<job_name><\/code> (GitLab i\u00e7in) \u015feklinde olacakt\u0131r.<br \/>\n3.  Jenkins i\u015f hatt\u0131 yap\u0131land\u0131rmas\u0131nda &#8220;Build Triggers&#8221; alt\u0131nda ilgili webhook tetikleyicisini se\u00e7in (\u00f6rn. &#8220;GitHub hook trigger for GITScm polling&#8221;).<br \/>\nBu sayede, her kod push i\u015fleminde i\u015f hatt\u0131n\u0131z otomatik olarak \u00e7al\u0131\u015facakt\u0131r.<\/p>\n<h4>Parametreli \u0130\u015fler<\/h4>\n<p>\u0130\u015f hatlar\u0131n\u0131za parametreler ekleyerek, kullan\u0131c\u0131lar\u0131n derlemeyi tetiklerken belirli de\u011ferleri (\u00f6rn. hedef ortam, derlenecek dal, versiyon numaras\u0131) girmesine olanak tan\u0131yabilirsiniz.<br \/>\n1.  \u0130\u015f hatt\u0131 yap\u0131land\u0131rmas\u0131nda &#8220;General&#8221; alt\u0131nda &#8220;This project is parameterized&#8221; (Bu proje parametreli) se\u00e7ene\u011fini i\u015faretleyin.<br \/>\n2.  &#8220;Add Parameter&#8221; (Parametre Ekle) butonuna t\u0131klayarak String Parameter, Choice Parameter vb. ekleyebilirsiniz.<br \/>\n3.  Bu parametreleri <code>Jenkinsfile<\/code> i\u00e7inde <code>${params.PARAMETER_NAME}<\/code> \u015feklinde kullanabilirsiniz.<\/p>\n<h4>Bildirimler<\/h4>\n<p>\u0130\u015f hatt\u0131 durum de\u011fi\u015fiklikleri hakk\u0131nda (ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z) ekip \u00fcyelerini bilgilendirmek \u00f6nemlidir.<br \/>\n*   <strong>E-posta Bildirimleri:<\/strong> Jenkins&#8217;in &#8220;Email Extension Plugin&#8221; eklentisi ile derleme sonu\u00e7lar\u0131n\u0131 e-posta ile g\u00f6nderebilirsiniz.<br \/>\n*   <strong>Slack\/Microsoft Teams Entegrasyonu:<\/strong> \u0130lgili eklentileri kurarak derleme bildirimlerini anl\u0131k mesajla\u015fma platformlar\u0131na g\u00f6nderebilirsiniz.<\/p>\n<h4>G\u00fcvenlik ve S\u0131rlar\u0131n Y\u00f6netimi<\/h4>\n<p>Hassas bilgileri (veritaban\u0131 parolalar\u0131, API anahtarlar\u0131, SSH anahtarlar\u0131) do\u011frudan <code>Jenkinsfile<\/code> i\u00e7ine yazmak yerine, Jenkins&#8217;in &#8220;Credentials Plugin&#8221; (Kimlik Bilgileri Eklentisi) kullanarak g\u00fcvenli bir \u015fekilde saklay\u0131n.<br \/>\n1.  &#8220;Manage Jenkins&#8221; -> &#8220;Manage Credentials&#8221; (Kimlik Bilgilerini Y\u00f6net) alt\u0131nda yeni kimlik bilgileri ekleyin.<br \/>\n2.  <code>Jenkinsfile<\/code> i\u00e7inde bu kimlik bilgilerini <code>withCredentials<\/code> blo\u011fu ile kullanabilirsiniz.<\/p>\n<pre><code class=\"language-groovy\">pipeline {\n    agent any\n    stages {\n        stage('Deploy') {\n            steps {\n                withCredentials([usernamePassword(credentialsId: 'my-deploy-creds', usernameVariable: 'USER', passwordVariable: 'PASS')]) {\n                    sh \"sshpass -p ${PASS} ssh ${USER}@myserver.com 'deploy_script.sh'\"\n                }\n            }\n        }\n    }\n}<\/code><\/pre>\n<h4>Jenkins Master-Agent Mimarisi<\/h4>\n<p>B\u00fcy\u00fck ve yo\u011fun i\u015f y\u00fckleri i\u00e7in tek bir Jenkins sunucusu (master) yeterli olmayabilir. Jenkins master-agent (eski ad\u0131yla master-slave) mimarisi ile i\u015f y\u00fck\u00fcn\u00fc birden fazla arac\u0131ya da\u011f\u0131tabilirsiniz. Master sunucu i\u015fleri planlarken, agent&#8217;lar derleme ve test i\u015flemlerini y\u00fcr\u00fct\u00fcr. Bu, performans, \u00f6l\u00e7eklenebilirlik ve farkl\u0131 ortamlarda (farkl\u0131 i\u015fletim sistemleri, farkl\u0131 JDK s\u00fcr\u00fcmleri) derleme yapabilme esnekli\u011fi sa\u011flar.<\/p>\n<h4>Yedekleme ve Geri Y\u00fckleme<\/h4>\n<p>Jenkins yap\u0131land\u0131rmalar\u0131, i\u015f ge\u00e7mi\u015fi ve eklentileri <code>\/var\/lib\/jenkins<\/code> dizininde saklan\u0131r. Bu dizinin d\u00fczenli olarak yedeklenmesi kritik \u00f6neme sahiptir. Olas\u0131 bir felaket durumunda Jenkins kurulumunuzu kolayca geri y\u00fckleyebilirsiniz. &#8220;Backup Plugin&#8221; gibi eklentiler bu s\u00fcreci otomatikle\u015ftirebilir.<\/p>\n<h3>Sorun Giderme<\/h3>\n<p>Jenkins kurulumu veya i\u015f hatt\u0131 \u00e7al\u0131\u015ft\u0131rma s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>Java Yolu Hatas\u0131:<\/strong> &#8220;JAVA_HOME not set&#8221; veya &#8220;java command not found&#8221; gibi hatalar al\u0131yorsan\u0131z, Java kurulumunuzu ve Jenkins&#8217;in Global Tool Configuration&#8217;daki JDK yolunu kontrol edin. Jenkins kullan\u0131c\u0131s\u0131n\u0131n (genellikle <code>jenkins<\/code>) Java&#8217;ya eri\u015fim izni oldu\u011fundan emin olun.<br \/>\n*   <strong>\u0130zin Hatalar\u0131:<\/strong> Jenkins&#8217;in belirli dosya veya dizinlere yazma\/okuma izni olmad\u0131\u011f\u0131nda hatalar meydana gelebilir. \u00d6zellikle Git deposu klonlama veya dosya olu\u015fturma ad\u0131mlar\u0131nda bu t\u00fcr hatalar al\u0131yorsan\u0131z, ilgili dizinlerin <code>jenkins<\/code> kullan\u0131c\u0131s\u0131 taraf\u0131ndan eri\u015filebilir oldu\u011fundan emin olun (<code>sudo chown -R jenkins:jenkins \/path\/to\/directory<\/code>).<br \/>\n*   <strong>Eklenti Sorunlar\u0131:<\/strong> Bir eklenti d\u00fczg\u00fcn \u00e7al\u0131\u015fm\u0131yorsa veya i\u015f hatt\u0131n\u0131zda bir hata veriyorsa, Jenkins loglar\u0131n\u0131 kontrol edin. Eklentiyi g\u00fcncellemeyi veya yeniden kurmay\u0131 deneyebilirsiniz.<br \/>\n*   <strong>Git Kimlik Bilgileri:<\/strong> \u00d6zel bir Git deposundan kod \u00e7ekerken kimlik do\u011frulama hatas\u0131 al\u0131yorsan\u0131z, Jenkins&#8217;e do\u011fru kimlik bilgilerini (kullan\u0131c\u0131 ad\u0131\/parola veya SSH anahtar\u0131) ekledi\u011finizden ve bunlar\u0131 i\u015f hatt\u0131 yap\u0131land\u0131rmas\u0131nda se\u00e7ti\u011finizden emin olun.<br \/>\n*   <strong>Maven\/Gradle Komut Hatalar\u0131:<\/strong> Derleme veya test a\u015famalar\u0131nda Maven veya Gradle komutlar\u0131 ba\u015far\u0131s\u0131z oluyorsa, komutlar\u0131n do\u011fru oldu\u011fundan ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n d\u00fczg\u00fcn bir \u015fekilde \u00e7\u00f6z\u00fcld\u00fc\u011f\u00fcnden emin olun. Jenkins&#8217;in Global Tool Configuration&#8217;da Maven\/Gradle&#8217;\u0131n do\u011fru \u015fekilde yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 kontrol edin.<br \/>\n*   <strong>Jenkins Loglar\u0131:<\/strong> Sorun gidermenin en iyi yolu Jenkins loglar\u0131n\u0131 incelemektir. Loglara <code>sudo cat \/var\/log\/jenkins\/jenkins.log<\/code> komutuyla veya Jenkins web aray\u00fcz\u00fcndeki &#8220;Manage Jenkins&#8221; -> &#8220;System Log&#8221; (Sistem Logu) alt\u0131ndan eri\u015febilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Ubuntu 20.04 \u00fczerinde Jenkins&#8217;i kurmaktan, temel yap\u0131land\u0131rmalar\u0131n\u0131 yapmaya ve basit bir S\u00fcrekli Entegrasyon i\u015f hatt\u0131n\u0131 olu\u015fturmaya kadar t\u00fcm s\u00fcreci ad\u0131m ad\u0131m ele ald\u0131k. Jenkins&#8217;in g\u00fcc\u00fc ve esnekli\u011fi sayesinde, yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde otomatikle\u015ftirebilir, hatalar\u0131 erken a\u015famada tespit edebilir ve \u00fcr\u00fcn kalitesini art\u0131rabilirsiniz.<\/p>\n<p>S\u00fcrekli Entegrasyon, modern DevOps uygulamalar\u0131n\u0131n temelidir ve Jenkins bu s\u00fcrecin merkezinde yer alan g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu kurulum ve yap\u0131land\u0131rma rehberi, kendi CI\/CD yolculu\u011funuza ba\u015flaman\u0131z i\u00e7in sa\u011flam bir temel sa\u011flamaktad\u0131r. \u0130\u015f hatlar\u0131n\u0131z\u0131 daha da geli\u015ftirmek i\u00e7in s\u00fcrekli teslimat (Continuous Delivery) ve s\u00fcrekli da\u011f\u0131t\u0131m (Continuous Deployment) kavramlar\u0131n\u0131 ara\u015ft\u0131rmaya, daha karma\u015f\u0131k <code>Jenkinsfile<\/code>&#8216;lar yazmaya ve Jenkins&#8217;in zengin eklenti ekosistemini ke\u015ffetmeye devam etmeniz \u00f6nerilir. Bu sayede, yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinizde maksimum verimlilik ve g\u00fcvenilirlik elde edebilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde h\u0131z, kali","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-35233","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu\" \/>\n<meta property=\"og:description\" content=\"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu Giri\u015f G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde h\u0131z, kali\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-27T04:40:47+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu\",\"datePublished\":\"2025-11-27T04:40:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/\"},\"wordCount\":3346,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/\",\"name\":\"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-27T04:40:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/","og_locale":"tr_TR","og_type":"article","og_title":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu","og_description":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu Giri\u015f G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde h\u0131z, kali","og_url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-27T04:40:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu","datePublished":"2025-11-27T04:40:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/"},"wordCount":3346,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/","url":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/","name":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-27T04:40:47+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ubuntu-20-04-uzerinde-jenkins-ile-surekli-entegrasyon-ci-is-hatlari-kurulumu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ubuntu 20.04 \u00dczerinde Jenkins ile S\u00fcrekli Entegrasyon (CI) \u0130\u015f Hatlar\u0131 Kurulumu"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35233"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35233\/revisions"}],"predecessor-version":[{"id":35234,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35233\/revisions\/35234"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}