{"id":38884,"date":"2026-02-09T21:40:51","date_gmt":"2026-02-09T18:40:51","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38884"},"modified":"2026-02-09T21:40:51","modified_gmt":"2026-02-09T18:40:51","slug":"jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/","title":{"rendered":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi<\/h2>\n<h3>Giri\u015f: S\u00fcrekli Entegrasyon ve Jenkins&#8217;in \u00d6nemi<\/h3>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde h\u0131z, kalite ve g\u00fcvenilirlik temel gereksinimlerdir. Bu hedeflere ula\u015fmada en kritik pratiklerden biri S\u00fcrekli Entegrasyon (Continuous Integration &#8211; CI) prensibidir. CI, geli\u015ftiricilerin kod de\u011fi\u015fikliklerini d\u00fczenli olarak merkezi bir depoya entegre etmelerini ve bu entegrasyonun otomatik olarak derlenip test edilmesini sa\u011flayan bir yaz\u0131l\u0131m geli\u015ftirme uygulamas\u0131d\u0131r. Bu sayede, entegrasyon hatalar\u0131 erken a\u015famada tespit edilir, geri bildirim d\u00f6ng\u00fcleri h\u0131zlan\u0131r ve genel yaz\u0131l\u0131m kalitesi art\u0131r\u0131l\u0131r.<\/p>\n<p>Jenkins, bu S\u00fcrekli Entegrasyon ve S\u00fcrekli Teslimat (Continuous Delivery &#8211; CD) s\u00fcre\u00e7lerinin otomasyonu i\u00e7in en pop\u00fcler a\u00e7\u0131k kaynakl\u0131 ara\u00e7lardan biridir. Geni\u015f eklenti ekosistemi ve esnek yap\u0131s\u0131 sayesinde Jenkins, neredeyse her t\u00fcrl\u00fc proje ve teknoloji y\u0131\u011f\u0131n\u0131 i\u00e7in \u00f6zelle\u015ftirilebilir i\u015f ak\u0131\u015flar\u0131 (pipelines) olu\u015fturmaya olanak tan\u0131r. Bu makalede, Ubuntu 16.04 i\u015fletim sistemi \u00fczerinde Jenkins&#8217;i kurmaktan ba\u015flayarak, temel bir S\u00fcrekli Entegrasyon i\u015f ak\u0131\u015f\u0131 (pipeline) olu\u015fturmaya kadar ad\u0131m ad\u0131m bir rehber sunaca\u011f\u0131z. Hedefimiz, geli\u015ftiricilerin ve DevOps m\u00fchendislerinin Jenkins&#8217;in g\u00fcc\u00fcn\u00fc kullanarak projelerinde CI uygulamalar\u0131n\u0131 kolayca hayata ge\u00e7irmelerine yard\u0131mc\u0131 olmakt\u0131r.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Bu rehbere ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olun:<\/p>\n<ul>\n<li><strong>Ubuntu 16.04 Sunucusu veya Sanal Makine:<\/strong> Jenkins&#8217;i kuraca\u011f\u0131m\u0131z bir Ubuntu 16.04 i\u015fletim sistemi kurulu bir sunucuya veya sanal makineye (\u00f6rn: VirtualBox, VMware, bulut sa\u011flay\u0131c\u0131s\u0131) ihtiyac\u0131n\u0131z var. Minimum 2GB RAM ve 2 CPU \u00e7ekirde\u011fi \u00f6nerilir.<\/li>\n<li><strong>Java Development Kit (JDK):<\/strong> Jenkins Java tabanl\u0131 bir uygulama oldu\u011fu i\u00e7in sunucuda JDK kurulu olmal\u0131d\u0131r. OpenJDK veya Oracle JDK kullanabilirsiniz. Ubuntu 16.04 i\u00e7in OpenJDK 8 genellikle yeterlidir.<\/li>\n<li><strong>Temel Linux Komut Sat\u0131r\u0131 Bilgisi:<\/strong> Terminal \u00fczerinden komutlar\u0131 \u00e7al\u0131\u015ft\u0131rma ve dosya sisteminde gezinme konusunda temel bilgiye sahip olman\u0131z gerekmektedir.<\/li>\n<li><strong>Sudo Yetkileri:<\/strong> Kurulum i\u015flemleri i\u00e7in <code>sudo<\/code> yetkisine sahip bir kullan\u0131c\u0131 hesab\u0131n\u0131z olmal\u0131d\u0131r.<\/li>\n<li><strong>\u0130nternet Ba\u011flant\u0131s\u0131:<\/strong> Gerekli paketleri indirmek i\u00e7in sunucunun internet ba\u011flant\u0131s\u0131 olmas\u0131 \u015fartt\u0131r.<\/li>\n<\/ul>\n<h3>Ubuntu 16.04 \u00dczerine Jenkins Kurulumu<\/h3>\n<p>Jenkins&#8217;i Ubuntu 16.04 \u00fczerine kurmak i\u00e7in resmi Jenkins deposunu kullanaca\u011f\u0131z. Bu, Jenkins&#8217;in en g\u00fcncel ve kararl\u0131 s\u00fcr\u00fcm\u00fcn\u00fc kolayca kurmam\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h4>1. Java Development Kit (JDK) Kurulumu<\/h4>\n<p>E\u011fer sunucunuzda JDK kurulu de\u011filse, a\u015fa\u011f\u0131daki komutlarla OpenJDK 8&#8217;i kurabilirsiniz:<\/p>\n<pre><code>sudo apt update\nsudo apt install openjdk-8-jdk -y\n<\/code><\/pre>\n<p>Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in Java s\u00fcr\u00fcm\u00fcn\u00fc kontrol edin:<\/p>\n<pre><code>java -version\njavac -version\n<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da Java 1.8.x s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6rmelisiniz.<\/p>\n<h4>2. Jenkins Deposu Anahtar\u0131n\u0131 Ekleme<\/h4>\n<p>Jenkins paketlerini do\u011frulamak i\u00e7in genel anahtar\u0131 sisteminize eklememiz gerekiyor:<\/p>\n<pre><code>wget -q -O - https:\/\/pkg.jenkins.io\/debian\/jenkins.io.key | sudo apt-key add -\n<\/code><\/pre>\n<p>Bu komut, Jenkins&#8217;in GPG anahtar\u0131n\u0131 indirir ve sisteminize ekler.<\/p>\n<h4>3. Jenkins Deposu Ekleme<\/h4>\n<p>\u015eimdi Jenkins deposunu sisteminizin kaynak listesine ekleyelim:<\/p>\n<pre><code>sudo sh -c 'echo deb https:\/\/pkg.jenkins.io\/debian-stable binary\/ > \/etc\/apt\/sources.list.d\/jenkins.list'\n<\/code><\/pre>\n<p>Bu, Jenkins&#8217;in kararl\u0131 s\u00fcr\u00fcm deposunu <code>apt<\/code> paket y\u00f6neticinizin kullanabilece\u011fi kaynaklara ekler.<\/p>\n<h4>4. Paket Listesini G\u00fcncelleme ve Jenkins Kurulumu<\/h4>\n<p>Depo eklendikten sonra, paket listesini g\u00fcncelleyin ve Jenkins&#8217;i kurun:<\/p>\n<pre><code>sudo apt update\nsudo apt install jenkins -y\n<\/code><\/pre>\n<p>Bu komutlar, yeni eklenen depodan Jenkins paketini indirip kuracakt\u0131r.<\/p>\n<h4>5. Jenkins Servisini Ba\u015flatma ve Durumunu Kontrol Etme<\/h4>\n<p>Jenkins kurulumdan sonra otomatik olarak ba\u015flamal\u0131d\u0131r. Durumunu kontrol edebilir ve gerekirse ba\u015flat\u0131p durdurabilirsiniz:<\/p>\n<pre><code>sudo systemctl start jenkins\nsudo systemctl stop jenkins\nsudo systemctl restart jenkins\nsudo systemctl status jenkins\n<\/code><\/pre>\n<p><code>sudo systemctl status jenkins<\/code> komutunun \u00e7\u0131kt\u0131s\u0131nda &#8220;active (running)&#8221; ifadesini g\u00f6rmelisiniz.<\/p>\n<h4>6. G\u00fcvenlik Duvar\u0131 Yap\u0131land\u0131rmas\u0131 (UFW)<\/h4>\n<p>E\u011fer sunucunuzda UFW (Uncomplicated Firewall) etkinse, Jenkins&#8217;in varsay\u0131lan portu olan 8080&#8217;e gelen ba\u011flant\u0131lara izin vermeniz gerekir:<\/p>\n<pre><code>sudo ufw allow 8080\nsudo ufw status\n<\/code><\/pre>\n<p><code>ufw status<\/code> \u00e7\u0131kt\u0131s\u0131nda 8080 portunun izinli oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<h3>\u0130lk Jenkins Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Jenkins ba\u015far\u0131yla kurulduktan sonra, web aray\u00fcz\u00fc \u00fczerinden ilk kurulum ve yap\u0131land\u0131rma ad\u0131mlar\u0131n\u0131 tamamlamam\u0131z gerekiyor.<\/p>\n<h4>1. Jenkins Web Aray\u00fcz\u00fcne Eri\u015fim<\/h4>\n<p>Web taray\u0131c\u0131n\u0131z\u0131 a\u00e7\u0131n ve sunucunuzun IP adresi veya alan ad\u0131n\u0131 8080 portuyla birlikte girin:<br \/>\n<code>http:\/\/your_server_ip:8080<\/code><\/p>\n<h4>2. Jenkins&#8217;in Kilidini A\u00e7ma<\/h4>\n<p>\u0130lk eri\u015fimde Jenkins sizden bir ba\u015flang\u0131\u00e7 y\u00f6neticisi \u015fifresi isteyecektir. Bu \u015fifre, kurulum s\u0131ras\u0131nda olu\u015fturulan bir dosyada bulunur. Terminale d\u00f6nerek a\u015fa\u011f\u0131daki komutla \u015fifreyi alabilirsiniz:<\/p>\n<pre><code>sudo cat \/var\/lib\/jenkins\/secrets\/initialAdminPassword\n<\/code><\/pre>\n<p>Bu komutun \u00e7\u0131kt\u0131s\u0131ndaki uzun alfan\u00fcmerik dizeyi kopyalay\u0131n ve Jenkins web aray\u00fcz\u00fcndeki &#8220;Administrator password&#8221; alan\u0131na yap\u0131\u015ft\u0131r\u0131n. Ard\u0131ndan &#8220;Continue&#8221; butonuna t\u0131klay\u0131n.<\/p>\n<h4>3. Eklentileri Kurma<\/h4>\n<p>Jenkins, i\u015flevselli\u011fini eklentiler arac\u0131l\u0131\u011f\u0131yla geni\u015fletir. \u0130ki se\u00e7enek sunulacakt\u0131r:<\/p>\n<ul>\n<li><strong>Install suggested plugins:<\/strong> \u00c7o\u011fu kullan\u0131c\u0131 i\u00e7in \u00f6nerilen eklentileri kurar. Bu, ba\u015flang\u0131\u00e7 i\u00e7in iyi bir se\u00e7enektir.<\/li>\n<li><strong>Select plugins to install:<\/strong> Kurmak istedi\u011finiz eklentileri manuel olarak se\u00e7menize olanak tan\u0131r.<\/li>\n<\/ul>\n<p>&#8220;Install suggested plugins&#8221; se\u00e7ene\u011fini se\u00e7meniz \u00f6nerilir. Jenkins, gerekli eklentileri indirip kurmaya ba\u015flayacakt\u0131r. Bu i\u015flem biraz zaman alabilir.<\/p>\n<h4>4. \u0130lk Y\u00f6netici Kullan\u0131c\u0131 Olu\u015fturma<\/h4>\n<p>Eklentiler y\u00fcklendikten sonra, sizden yeni bir y\u00f6netici kullan\u0131c\u0131 olu\u015fturman\u0131z istenecektir. Kullan\u0131c\u0131 ad\u0131, \u015fifre, tam ad ve e-posta adresi gibi bilgileri girin. Bu kullan\u0131c\u0131, Jenkins&#8217;e giri\u015f yapmak ve y\u00f6netmek i\u00e7in kullan\u0131lacakt\u0131r. Bu ad\u0131m\u0131 atlamaman\u0131z ve g\u00fc\u00e7l\u00fc bir \u015fifre kullanman\u0131z \u00f6nemlidir.<\/p>\n<h4>5. Jenkins URL Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Son ad\u0131mda, Jenkins&#8217;in varsay\u0131lan URL&#8217;sini yap\u0131land\u0131rman\u0131z istenecektir. Genellikle, \u00f6nceden doldurulmu\u015f URL (sunucunuzun IP adresi ve 8080 portu) do\u011fru olacakt\u0131r. &#8220;Save and Finish&#8221; butonuna t\u0131klay\u0131n.<\/p>\n<p>Tebrikler! Jenkins kurulumu ve ilk yap\u0131land\u0131rmas\u0131 tamamland\u0131. Art\u0131k &#8220;Start using Jenkins&#8221; butonuna t\u0131klayarak Jenkins paneline eri\u015febilirsiniz.<\/p>\n<h3>S\u00fcrekli Entegrasyon (CI) ve Jenkins \u0130\u015f Ak\u0131\u015flar\u0131 (Pipelines)<\/h3>\n<p>Jenkins kurulumunu tamamlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi S\u00fcrekli Entegrasyon kavram\u0131na daha derinlemesine bakal\u0131m ve Jenkins&#8217;in bu s\u00fcre\u00e7leri otomatikle\u015ftirmek i\u00e7in kulland\u0131\u011f\u0131 i\u015f ak\u0131\u015flar\u0131 (pipelines) yap\u0131s\u0131n\u0131 inceleyelim.<\/p>\n<h4>S\u00fcrekli Entegrasyon (CI) Nedir?<\/h4>\n<p>CI, bir ekibin kod taban\u0131ndaki de\u011fi\u015fiklikleri s\u0131k s\u0131k (genellikle g\u00fcnde birka\u00e7 kez) entegre etti\u011fi ve her entegrasyonun otomatik bir derleme ve test s\u00fcreciyle do\u011fruland\u0131\u011f\u0131 bir geli\u015ftirme uygulamas\u0131d\u0131r. Temel faydalar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Erken Hata Tespiti:<\/strong> Entegrasyon sorunlar\u0131 ve hatalar, geli\u015ftirme d\u00f6ng\u00fcs\u00fcn\u00fcn ba\u015flar\u0131nda yakalan\u0131r.<\/li>\n<li><strong>Geri Bildirim H\u0131z\u0131:<\/strong> Geli\u015ftiriciler, kod de\u011fi\u015fikliklerinin sistemle uyumlulu\u011fu hakk\u0131nda h\u0131zl\u0131 geri bildirim al\u0131rlar.<\/li>\n<li><strong>Azalan Risk:<\/strong> K\u00fc\u00e7\u00fck ve s\u0131k entegrasyonlar, b\u00fcy\u00fck ve nadir entegrasyonlara g\u00f6re daha az risk ta\u015f\u0131r.<\/li>\n<li><strong>Artan G\u00fcven:<\/strong> Otomatik testler, kod taban\u0131n\u0131n kararl\u0131l\u0131\u011f\u0131na olan g\u00fcveni art\u0131r\u0131r.<\/li>\n<li><strong>Daha H\u0131zl\u0131 Teslimat:<\/strong> S\u00fcrekli olarak entegre edilmi\u015f ve test edilmi\u015f bir kod taban\u0131, da\u011f\u0131t\u0131ma daha h\u0131zl\u0131 haz\u0131r olur.<\/li>\n<\/ul>\n<h4>Jenkins \u0130\u015f Ak\u0131\u015flar\u0131 (Pipelines) Nedir?<\/h4>\n<p>Jenkins \u0130\u015f Ak\u0131\u015flar\u0131 (Pipelines), t\u00fcm S\u00fcrekli Entegrasyon ve S\u00fcrekli Teslimat (CI\/CD) s\u00fcre\u00e7lerinizi kod olarak tan\u0131mlaman\u0131za olanak tan\u0131yan bir dizi eklentidir. Bu, geli\u015ftirme ya\u015fam d\u00f6ng\u00fcn\u00fcz\u00fcn tamam\u0131n\u0131 otomatikle\u015ftirebilece\u011finiz ve s\u00fcr\u00fcm kontrol sistemi (SCM) arac\u0131l\u0131\u011f\u0131yla y\u00f6netebilece\u011finiz anlam\u0131na gelir. Jenkins Pipelines&#8217;\u0131n temel \u00f6zellikleri:<\/p>\n<ul>\n<li><strong>Kod Olarak \u0130\u015f Ak\u0131\u015f\u0131 (Pipeline as Code):<\/strong> \u0130\u015f ak\u0131\u015flar\u0131, Groovy tabanl\u0131 bir DSL (Domain Specific Language) kullan\u0131larak <code>Jenkinsfile<\/code> ad\u0131 verilen bir metin dosyas\u0131nda tan\u0131mlan\u0131r ve projenizin kaynak koduyla birlikte s\u00fcr\u00fcm kontrol sisteminde saklan\u0131r.<\/li>\n<li><strong>Dayan\u0131kl\u0131l\u0131k:<\/strong> Jenkins yeniden ba\u015flat\u0131lsa bile i\u015f ak\u0131\u015flar\u0131 devam edebilir.<\/li>\n<li><strong>Geni\u015fletilebilirlik:<\/strong> Y\u00fczlerce eklenti sayesinde neredeyse her t\u00fcrl\u00fc g\u00f6revi otomatikle\u015ftirebilirsiniz.<\/li>\n<li><strong>G\u00f6rselle\u015ftirme:<\/strong> Jenkins, i\u015f ak\u0131\u015flar\u0131n\u0131z\u0131n ilerlemesini g\u00f6rsel olarak izlemenizi sa\u011flayan kullan\u0131c\u0131 dostu bir aray\u00fcze sahiptir.<\/li>\n<\/ul>\n<p>Jenkins Pipelines iki ana formda yaz\u0131labilir:<\/p>\n<ul>\n<li><strong>Declarative Pipeline (Bildirimsel \u0130\u015f Ak\u0131\u015f\u0131):<\/strong> Daha yeni ve basitle\u015ftirilmi\u015f bir s\u00f6zdizimine sahiptir. Yap\u0131land\u0131r\u0131lm\u0131\u015f bir yakla\u015f\u0131mla, i\u015f ak\u0131\u015f\u0131n\u0131z\u0131n her ad\u0131m\u0131n\u0131 (a\u015famalar\u0131, ad\u0131mlar\u0131, arac\u0131lar\u0131 vb.) a\u00e7\u0131k\u00e7a tan\u0131mlars\u0131n\u0131z. Ba\u015flang\u0131\u00e7 seviyesi i\u00e7in daha kolay anla\u015f\u0131l\u0131r ve y\u00f6netilebilirdir.<\/li>\n<li><strong>Scripted Pipeline (Betiksel \u0130\u015f Ak\u0131\u015f\u0131):<\/strong> Groovy programlama dilinin tam g\u00fcc\u00fcn\u00fc kullan\u0131r. Daha fazla esneklik ve karma\u015f\u0131k mant\u0131k gerektiren durumlar i\u00e7in uygundur, ancak daha dik bir \u00f6\u011frenme e\u011frisine sahiptir.<\/li>\n<\/ul>\n<p>Bu rehberde, daha yayg\u0131n ve anla\u015f\u0131l\u0131r olan Declarative Pipeline yap\u0131s\u0131na odaklanaca\u011f\u0131z.<\/p>\n<h3>\u00d6rnek Bir CI \u0130\u015f Ak\u0131\u015f\u0131 (Pipeline) Kurulumu<\/h3>\n<p>\u015eimdi, basit bir Java (Maven) projesini GitHub&#8217;dan \u00e7ekip derleyen, test eden ve \u00e7\u0131kt\u0131lar\u0131n\u0131 ar\u015fivleyen bir S\u00fcrekli Entegrasyon i\u015f ak\u0131\u015f\u0131 olu\u015ftural\u0131m.<\/p>\n<h4>Senaryo: Basit Bir Maven Projesi<\/h4>\n<p>Varsay\u0131msal olarak, GitHub \u00fczerinde <code>my-maven-project<\/code> ad\u0131nda basit bir Maven projemiz oldu\u011funu varsayal\u0131m. Bu proje, <code>pom.xml<\/code> dosyas\u0131na sahip standart bir Maven projesi yap\u0131s\u0131na sahiptir ve JUnit testleri i\u00e7erir.<\/p>\n<h4>1. Gerekli Eklentilerin Kontrol\u00fc<\/h4>\n<p>Pipeline&#8217;lar ve SCM entegrasyonu i\u00e7in temel eklentiler (Pipeline, Git) genellikle &#8220;Install suggested plugins&#8221; se\u00e7ene\u011fiyle kurulur. Maven projesi i\u00e7in ek olarak Maven Integration eklentisi faydal\u0131 olabilir, ancak do\u011frudan <code>sh 'mvn ...'<\/code> komutlar\u0131n\u0131 kullanarak da Maven i\u015flemlerini y\u00fcr\u00fctebiliriz. E\u011fer Maven kurulu de\u011filse, Jenkins sunucunuza veya kullanaca\u011f\u0131n\u0131z agent&#8217;a kurman\u0131z gerekecektir. Basitlik ad\u0131na, bu rehberde Jenkins sunucusunda Maven&#8217;\u0131n kurulu oldu\u011funu varsay\u0131yoruz.<\/p>\n<pre><code>sudo apt install maven -y\n<\/code><\/pre>\n<p>Yukar\u0131daki komutla Maven&#8217;\u0131 Jenkins sunucusuna kurabilirsiniz.<\/p>\n<h4>2. Yeni Bir Jenkins \u00d6\u011fesi (Item) Olu\u015fturma<\/h4>\n<p>Jenkins paneline giri\u015f yap\u0131n ve sol men\u00fcden &#8220;New Item&#8221; (Yeni \u00d6\u011fe) se\u00e7ene\u011fine t\u0131klay\u0131n.<\/p>\n<ul>\n<li><strong>Item Name:<\/strong> <code>MyMavenCIPipeline<\/code> gibi anlaml\u0131 bir isim verin.<\/li>\n<li><strong>Select a type of project:<\/strong> &#8220;Pipeline&#8221; se\u00e7ene\u011fini i\u015faretleyin.<\/li>\n<\/ul>\n<p>&#8220;OK&#8221; butonuna t\u0131klayarak devam edin.<\/p>\n<h4>3. Pipeline Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Yeni olu\u015fturdu\u011funuz Pipeline \u00f6\u011fesinin yap\u0131land\u0131rma sayfas\u0131na y\u00f6nlendirileceksiniz. Burada bir\u00e7ok se\u00e7enek bulunur, ancak biz &#8220;Pipeline&#8221; b\u00f6l\u00fcm\u00fcne odaklanaca\u011f\u0131z.<\/p>\n<p>&#8220;Pipeline&#8221; b\u00f6l\u00fcm\u00fcnde, &#8220;Definition&#8221; a\u00e7\u0131l\u0131r men\u00fcs\u00fcnden &#8220;Pipeline script from SCM&#8221; se\u00e7ene\u011fini se\u00e7in. Bu, i\u015f ak\u0131\u015f\u0131 tan\u0131m\u0131m\u0131z\u0131 (Jenkinsfile) do\u011frudan bir SCM (Git) deposundan alaca\u011f\u0131m\u0131z anlam\u0131na gelir. Bu y\u00f6ntem, i\u015f ak\u0131\u015f\u0131n\u0131 kod taban\u0131n\u0131zla birlikte s\u00fcr\u00fcm kontrol\u00fcnde tuttu\u011fu i\u00e7in en iyi uygulamad\u0131r.<\/p>\n<ul>\n<li><strong>SCM:<\/strong> &#8220;Git&#8221; se\u00e7ene\u011fini se\u00e7in.<\/li>\n<li><strong>Repository URL:<\/strong> \u00d6rnek Maven projenizin GitHub URL&#8217;sini girin. \u00d6rne\u011fin: <code>https:\/\/github.com\/your_username\/my-maven-project.git<\/code> (Kendi \u00f6rnek projenizle veya genel bir Maven projesi \u00f6rne\u011fiyle de\u011fi\u015ftirin).<\/li>\n<li><strong>Credentials:<\/strong> E\u011fer depo herkese a\u00e7\u0131ksa &#8220;None&#8221; olarak b\u0131rak\u0131n. \u00d6zel bir depo ise, &#8220;Add&#8221; butonuna t\u0131klayarak GitHub kimlik bilgilerinizi (kullan\u0131c\u0131 ad\u0131\/\u015fifre veya SSH anahtar\u0131) eklemeniz gerekir.<\/li>\n<li><strong>Branches to build:<\/strong> <code><em>\/main<\/code> veya <code><\/em>\/master<\/code> olarak b\u0131rak\u0131n.<\/li>\n<li><strong>Script Path:<\/strong> <code>Jenkinsfile<\/code> olarak b\u0131rak\u0131n. Bu, projenizin k\u00f6k dizininde <code>Jenkinsfile<\/code> ad\u0131nda bir dosya arayaca\u011f\u0131 anlam\u0131na gelir.<\/li>\n<\/ul>\n<h4>4. <code>Jenkinsfile<\/code> Olu\u015fturma<\/h4>\n<p>\u015eimdi, \u00f6rnek Maven projenizin k\u00f6k dizininde <code>Jenkinsfile<\/code> ad\u0131nda bir dosya olu\u015fturman\u0131z ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi i\u00e7ine yap\u0131\u015ft\u0131rman\u0131z gerekiyor. Bu dosyay\u0131 GitHub deponuza commit edin ve push edin.<\/p>\n<pre><code class=\"language-groovy\">\n\/\/ Jenkinsfile (Declarative Pipeline)\npipeline {\n    \/\/ \u0130\u015f ak\u0131\u015f\u0131n\u0131n \u00e7al\u0131\u015faca\u011f\u0131 ortam\u0131 tan\u0131mlar.\n    \/\/ 'any' herhangi bir mevcut Jenkins arac\u0131s\u0131nda \u00e7al\u0131\u015faca\u011f\u0131 anlam\u0131na gelir.\n    agent any\n\n    \/\/ \u0130\u015f ak\u0131\u015f\u0131n\u0131n a\u015famalar\u0131n\u0131 tan\u0131mlar.\n    stages {\n        \/\/ 1. A\u015fama: Kaynak Kodu \u00c7ekme (Checkout)\n        stage('Checkout') {\n            steps {\n                \/\/ Git deposundan kaynak kodunu \u00e7eker.\n                \/\/ Repository URL, Jenkins i\u015f yap\u0131land\u0131rmas\u0131nda belirtildi\u011fi i\u00e7in burada sadece git() kullan\u0131l\u0131r.\n                \/\/ E\u011fer farkl\u0131 bir repo \u00e7ekilecekse, 'git url: \"https:\/\/github.com\/...\", branch: \"main\"' kullan\u0131labilir.\n                checkout scm\n            }\n        }\n\n        \/\/ 2. A\u015fama: Projeyi Derleme (Build)\n        stage('Build') {\n            steps {\n                \/\/ Maven kullanarak projeyi temizler ve derler.\n                \/\/ 'sh' komutu, kabuk (shell) komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131l\u0131r.\n                sh 'mvn clean install -DskipTests' \/\/ Testleri \u015fimdilik atla, ayr\u0131 bir a\u015famada \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z.\n            }\n        }\n\n        \/\/ 3. A\u015fama: Testleri \u00c7al\u0131\u015ft\u0131rma (Test)\n        stage('Test') {\n            steps {\n                \/\/ Maven kullanarak projenin testlerini \u00e7al\u0131\u015ft\u0131r\u0131r.\n                sh 'mvn test'\n                \/\/ JUnit test sonu\u00e7lar\u0131n\u0131 ar\u015fivler (e\u011fer JUnit eklentisi kuruluysa).\n                junit '<em><\/em>\/target\/surefire-reports\/*.xml'\n            }\n        }\n\n        \/\/ 4. A\u015fama: \u00c7\u0131kt\u0131lar\u0131 Ar\u015fivleme (Archive Artifacts)\n        stage('Archive Artifacts') {\n            steps {\n                \/\/ Derlenen JAR\/WAR dosyalar\u0131n\u0131 Jenkins \u00fczerinde ar\u015fivler.\n                \/\/ Bu sayede, derleme sonras\u0131 olu\u015fan \u00e7\u0131kt\u0131lara kolayca eri\u015filebilir.\n                archiveArtifacts artifacts: 'target\/*.jar', fingerprint: true\n            }\n        }\n    }\n\n    \/\/ \u0130\u015f ak\u0131\u015f\u0131 tamamland\u0131ktan sonra \u00e7al\u0131\u015facak post-build ad\u0131mlar\u0131.\n    post {\n        \/\/ Her zaman \u00e7al\u0131\u015f\u0131r, ba\u015far\u0131l\u0131 veya ba\u015far\u0131s\u0131z olsun fark etmez.\n        always {\n            echo 'Pipeline finished.'\n        }\n        \/\/ \u0130\u015f ak\u0131\u015f\u0131 ba\u015far\u0131l\u0131 oldu\u011funda \u00e7al\u0131\u015f\u0131r.\n        success {\n            echo 'Pipeline succeeded!'\n            \/\/ \u00d6rne\u011fin, Slack veya e-posta bildirimi g\u00f6nderebilirsiniz.\n        }\n        \/\/ \u0130\u015f ak\u0131\u015f\u0131 ba\u015far\u0131s\u0131z oldu\u011funda \u00e7al\u0131\u015f\u0131r.\n        failure {\n            echo 'Pipeline failed!'\n            \/\/ \u00d6rne\u011fin, hata durumunda e-posta bildirimi g\u00f6nderebilirsiniz.\n        }\n        \/\/ \u0130\u015f ak\u0131\u015f\u0131 iptal edildi\u011finde \u00e7al\u0131\u015f\u0131r.\n        aborted {\n            echo 'Pipeline was aborted.'\n        }\n    }\n}\n<\/code><\/pre>\n<h4><code>Jenkinsfile<\/code> A\u00e7\u0131klamas\u0131:<\/h4>\n<ul>\n<li><code>pipeline { ... }<\/code>: T\u00fcm Declarative Pipeline&#8217;\u0131n k\u00f6k blo\u011fudur.<\/li>\n<li><code>agent any<\/code>: Bu i\u015f ak\u0131\u015f\u0131n\u0131n herhangi bir mevcut Jenkins arac\u0131s\u0131nda (\u015fu anda sadece ana Jenkins sunucusu) \u00e7al\u0131\u015fabilece\u011fini belirtir. Belirli bir etiketle e\u015fle\u015fen bir arac\u0131ya y\u00f6nlendirmek i\u00e7in <code>agent { label 'my-agent' }<\/code> gibi ifadeler kullan\u0131labilir.<\/li>\n<li><code>stages { ... }<\/code>: \u0130\u015f ak\u0131\u015f\u0131n\u0131n mant\u0131ksal a\u015famalar\u0131n\u0131 i\u00e7eren blo\u011fudur. Her <code>stage<\/code> (a\u015fama), bir dizi <code>steps<\/code> (ad\u0131m) i\u00e7erir.<\/li>\n<li><code>stage('Checkout') { ... }<\/code>: Kaynak kodunu s\u00fcr\u00fcm kontrol sisteminden \u00e7eker. <code>checkout scm<\/code> komutu, Jenkins i\u015f yap\u0131land\u0131rmas\u0131nda tan\u0131mlanan SCM ayarlar\u0131n\u0131 kullan\u0131r.<\/li>\n<li><code>stage('Build') { ... }<\/code>: Maven <code>clean install<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak projeyi derler. <code>-DskipTests<\/code> parametresi, testlerin bu a\u015famada atlanmas\u0131n\u0131 sa\u011flar, \u00e7\u00fcnk\u00fc testleri ayr\u0131 bir a\u015famada \u00e7al\u0131\u015ft\u0131rmak daha iyi bir pratiktir.<\/li>\n<li><code>stage('Test') { ... }<\/code>: Maven <code>test<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak projenin birim testlerini y\u00fcr\u00fct\u00fcr. <code>junit '<em><\/em>\/target\/surefire-reports\/*.xml'<\/code> ad\u0131m\u0131, Maven&#8217;\u0131n Surefire eklentisi taraf\u0131ndan \u00fcretilen JUnit test raporlar\u0131n\u0131 toplar ve Jenkins&#8217;in test sonu\u00e7lar\u0131n\u0131 g\u00f6rselle\u015ftirmesini sa\u011flar.<\/li>\n<li><code>stage('Archive Artifacts') { ... }<\/code>: Derleme sonucunda olu\u015fan <code>.jar<\/code> veya <code>.war<\/code> gibi \u00e7\u0131kt\u0131 dosyalar\u0131n\u0131 Jenkins&#8217;in kendisine ar\u015fivlemesini sa\u011flar. Bu sayede, ge\u00e7mi\u015f derlemelerin \u00e7\u0131kt\u0131lar\u0131na kolayca eri\u015filebilir. <code>fingerprint: true<\/code> \u00f6zelli\u011fi, ar\u015fivlenen dosyan\u0131n parmak izini tutarak, hangi derlemenin hangi \u00e7\u0131kt\u0131y\u0131 \u00fcretti\u011fini takip etmeye yard\u0131mc\u0131 olur.<\/li>\n<li><code>post { ... }<\/code>: \u0130\u015f ak\u0131\u015f\u0131 tamamland\u0131ktan sonra (ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z, iptal edildi vb. durumlar\u0131na g\u00f6re) belirli eylemleri ger\u00e7ekle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bildirim g\u00f6ndermek.<\/li>\n<li><code>sh '...'<\/code>: Kabuk komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in kullan\u0131lan bir ad\u0131md\u0131r.<\/li>\n<li><code>echo '...'<\/code>: Konsola mesaj yazd\u0131rmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<h4>5. \u0130\u015f Ak\u0131\u015f\u0131n\u0131 Ba\u015flatma<\/h4>\n<p>Jenkins i\u015f yap\u0131land\u0131rman\u0131z\u0131 &#8220;Save&#8221; (Kaydet) butonuna t\u0131klayarak kaydedin. Ard\u0131ndan, sol men\u00fcdeki &#8220;Build Now&#8221; (\u015eimdi Derle) butonuna t\u0131klayarak i\u015f ak\u0131\u015f\u0131n\u0131 manuel olarak ba\u015flat\u0131n.<\/p>\n<p>\u0130\u015f ak\u0131\u015f\u0131 \u00e7al\u0131\u015fmaya ba\u015flad\u0131\u011f\u0131nda, sol men\u00fcden &#8220;Build History&#8221; (Derleme Ge\u00e7mi\u015fi) alt\u0131ndaki son derlemeye t\u0131klay\u0131n ve ard\u0131ndan &#8220;Console Output&#8221; (Konsol \u00c7\u0131kt\u0131s\u0131) se\u00e7ene\u011fini se\u00e7erek i\u015f ak\u0131\u015f\u0131n\u0131n ilerlemesini ve \u00e7\u0131kt\u0131s\u0131n\u0131 ger\u00e7ek zamanl\u0131 olarak izleyebilirsiniz. Her a\u015faman\u0131n ba\u015far\u0131yla tamamland\u0131\u011f\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h3>Geli\u015fmi\u015f \u0130\u015f Ak\u0131\u015f\u0131 Kavramlar\u0131 (K\u0131saca)<\/h3>\n<p>Jenkins Pipelines&#8217;\u0131n temelini att\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi daha karma\u015f\u0131k senaryolar i\u00e7in kullan\u0131labilecek baz\u0131 geli\u015fmi\u015f kavramlara de\u011finelim.<\/p>\n<h4>1. Da\u011f\u0131t\u0131lm\u0131\u015f Derlemeler (Agents\/Nodes)<\/h4>\n<p>Jenkins&#8217;in ana sunucusunda t\u00fcm derlemeleri \u00e7al\u0131\u015ft\u0131rmak, \u00f6zellikle b\u00fcy\u00fck projeler veya \u00e7ok say\u0131da paralel derleme oldu\u011funda performans sorunlar\u0131na yol a\u00e7abilir. Bu durumu a\u015fmak i\u00e7in &#8220;agent&#8221; veya &#8220;node&#8221; ad\u0131 verilen harici makineler kullanabilirsiniz. Bu makineler, Jenkins ana sunucusundan derleme g\u00f6revlerini al\u0131r ve \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<ul>\n<li><strong>Neden Kullan\u0131l\u0131r?<\/strong> Ana sunucunun y\u00fck\u00fcn\u00fc azaltmak, farkl\u0131 i\u015fletim sistemlerinde (Windows, macOS) derleme yapmak, belirli donan\u0131m gereksinimleri olan derlemeler i\u00e7in \u00f6zel ortamlar sa\u011flamak.<\/li>\n<li><strong>Kurulum:<\/strong> Bir agent makinesine Java kurulu olmal\u0131 ve Jenkins ana sunucusu ile SSH veya JNLP (Java Network Launch Protocol) arac\u0131l\u0131\u011f\u0131yla ba\u011flant\u0131 kurabilir olmal\u0131d\u0131r. Jenkins web aray\u00fcz\u00fcnden &#8220;Manage Jenkins&#8221; -> &#8220;Manage Nodes and Clouds&#8221; alt\u0131ndan yeni bir node ekleyebilirsiniz.<\/li>\n<li><strong>Kullan\u0131m:<\/strong> <code>Jenkinsfile<\/code> i\u00e7inde <code>agent { label 'my-linux-agent' }<\/code> veya <code>agent { node { label 'my-windows-agent' } }<\/code> gibi ifadelerle belirli bir agent&#8217;\u0131 hedefleyebilirsiniz.<\/li>\n<\/ul>\n<h4>2. Kimlik Bilgileri Y\u00f6netimi (Credentials Management)<\/h4>\n<p>Veritaban\u0131 \u015fifreleri, API anahtarlar\u0131, \u00f6zel Git depolar\u0131 i\u00e7in kullan\u0131c\u0131 adlar\u0131\/\u015fifreler gibi hassas bilgileri do\u011frudan <code>Jenkinsfile<\/code> i\u00e7ine yazmak g\u00fcvenlik riski ta\u015f\u0131r. Jenkins, bu t\u00fcr bilgileri g\u00fcvenli bir \u015fekilde saklamak i\u00e7in bir &#8220;Credentials&#8221; (Kimlik Bilgileri) y\u00f6neticisine sahiptir.<\/p>\n<ul>\n<li><strong>Kullan\u0131m:<\/strong> &#8220;Manage Jenkins&#8221; -> &#8220;Manage Credentials&#8221; alt\u0131ndan farkl\u0131 t\u00fcrde kimlik bilgileri (kullan\u0131c\u0131 ad\u0131\/\u015fifre, SSH anahtar\u0131, gizli metin vb.) ekleyebilirsiniz.<\/li>\n<li><strong>Pipeline i\u00e7inde kullan\u0131m:<\/strong> <code>withCredentials([usernamePassword(credentialsId: 'my-github-creds', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')]) { ... }<\/code> gibi yap\u0131larla kimlik bilgilerini g\u00fcvenli bir \u015fekilde pipeline ad\u0131mlar\u0131na enjekte edebilirsiniz.<\/li>\n<\/ul>\n<h4>3. Parametreli \u0130\u015f Ak\u0131\u015flar\u0131 (Parameterized Pipelines)<\/h4>\n<p>Bazen, bir i\u015f ak\u0131\u015f\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rken kullan\u0131c\u0131dan baz\u0131 girdiler almak isteyebilirsiniz (\u00f6rne\u011fin, derlenecek dal ad\u0131, da\u011f\u0131t\u0131lacak ortam, testlerin hangi test paketiyle \u00e7al\u0131\u015faca\u011f\u0131). Jenkins, parametreli i\u015f ak\u0131\u015flar\u0131n\u0131 destekler.<\/p>\n<ul>\n<li><strong>Yap\u0131land\u0131rma:<\/strong> \u0130\u015f yap\u0131land\u0131rmas\u0131nda &#8220;This project is parameterized&#8221; se\u00e7ene\u011fini i\u015faretleyerek String, Boolean, Choice gibi farkl\u0131 t\u00fcrde parametreler ekleyebilirsiniz.<\/li>\n<li><strong>Pipeline i\u00e7inde kullan\u0131m:<\/strong> <code>params.BRANCH_NAME<\/code> gibi ifadelerle <code>Jenkinsfile<\/code> i\u00e7inde parametre de\u011ferlerine eri\u015febilirsiniz.<\/li>\n<\/ul>\n<h4>4. Bildirimler (Notifications)<\/h4>\n<p>\u0130\u015f ak\u0131\u015flar\u0131n\u0131n durumu hakk\u0131nda (ba\u015far\u0131l\u0131, ba\u015far\u0131s\u0131z, karars\u0131z) geli\u015ftiricileri veya ekipleri bilgilendirmek, CI\/CD s\u00fcrecinin \u00f6nemli bir par\u00e7as\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>Eklentiler:<\/strong> Email Extension Plugin, Slack Notification Plugin gibi eklentilerle bildirimleri yap\u0131land\u0131rabilirsiniz.<\/li>\n<li><strong>Pipeline i\u00e7inde kullan\u0131m:<\/strong> <code>post<\/code> blo\u011fu i\u00e7inde <code>mail to: 'dev@example.com', subject: 'Pipeline ${currentBuild.result}: ${env.JOB_NAME}', body: 'Build ${env.BUILD_NUMBER} is ${currentBuild.result}'<\/code> gibi ad\u0131mlar ekleyebilirsiniz.<\/li>\n<\/ul>\n<h4>5. Pipeline K\u00fct\u00fcphaneleri (Shared Libraries)<\/h4>\n<p>Birden fazla projede tekrar eden i\u015f ak\u0131\u015f\u0131 ad\u0131mlar\u0131n\u0131z veya a\u015famalar\u0131n\u0131z varsa, bunlar\u0131 merkezi bir &#8220;Shared Library&#8221; (Payla\u015f\u0131lan K\u00fct\u00fcphane) olarak tan\u0131mlayabilir ve farkl\u0131 <code>Jenkinsfile<\/code> dosyalar\u0131nda yeniden kullanabilirsiniz. Bu, kod tekrar\u0131n\u0131 azalt\u0131r ve i\u015f ak\u0131\u015flar\u0131n\u0131n bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<ul>\n<li><strong>Kullan\u0131m:<\/strong> Bir Git deposunda \u00f6zel Groovy betikleri olu\u015fturulur ve Jenkins&#8217;te &#8220;Manage Jenkins&#8221; -> &#8220;Configure System&#8221; alt\u0131nda &#8220;Global Pipeline Libraries&#8221; olarak kaydedilir. Ard\u0131ndan <code>Jenkinsfile<\/code> i\u00e7inde <code>@Library('my-shared-library') _<\/code> gibi bir ifadeyle \u00e7a\u011fr\u0131l\u0131r.<\/li>\n<\/ul>\n<h3>Jenkins ile CI\/CD i\u00e7in En \u0130yi Uygulamalar<\/h3>\n<p>Jenkins ve CI\/CD s\u00fcre\u00e7lerini verimli ve g\u00fcvenli bir \u015fekilde kullanmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir:<\/p>\n<ul>\n<li><strong><code>Jenkinsfile<\/code>&#8216;\u0131 S\u00fcr\u00fcm Kontrol\u00fcnde Tutun:<\/strong> \u0130\u015f ak\u0131\u015f\u0131 tan\u0131mlar\u0131n\u0131z\u0131 (Jenkinsfile) projenizin kaynak koduyla birlikte Git gibi bir SCM sisteminde saklay\u0131n. Bu, i\u015f ak\u0131\u015f\u0131n\u0131n ge\u00e7mi\u015fini takip etmenizi, de\u011fi\u015fiklikleri g\u00f6zden ge\u00e7irmenizi ve geri alman\u0131z\u0131 sa\u011flar.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck ve Odaklanm\u0131\u015f A\u015famalar Kullan\u0131n:<\/strong> Her a\u015fama (stage) tek bir sorumlulu\u011fa sahip olmal\u0131 (\u00f6rn: checkout, build, test, deploy). Bu, hatalar\u0131 daha kolay izlemenizi ve i\u015f ak\u0131\u015f\u0131n\u0131 daha mod\u00fcler hale getirmenizi sa\u011flar.<\/li>\n<li><strong>H\u0131zl\u0131 Ba\u015far\u0131s\u0131z Olun (Fail Fast):<\/strong> En kritik ve h\u0131zl\u0131 testleri i\u015f ak\u0131\u015f\u0131n\u0131n ba\u015flar\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131n. B\u00f6ylece, temel bir sorun varsa, pahal\u0131 ve zaman al\u0131c\u0131 ad\u0131mlara ge\u00e7meden \u00f6nce derlemeyi durdurabilirsiniz.<\/li>\n<li><strong>Her \u015eeyi Otomatikle\u015ftirin:<\/strong> Manuel ad\u0131mlardan ka\u00e7\u0131n\u0131n. Bir ad\u0131m\u0131 her seferinde tekrarl\u0131yorsan\u0131z, onu otomatikle\u015ftirmek i\u00e7in bir yol bulun.<\/li>\n<li><strong>Ayr\u0131lm\u0131\u015f Derleme Arac\u0131lar\u0131 (Agents) Kullan\u0131n:<\/strong> Jenkins ana sunucusunun sadece orkestrasyon g\u00f6revlerini yapmas\u0131n\u0131 sa\u011flay\u0131n. Ger\u00e7ek derleme, test ve da\u011f\u0131t\u0131m g\u00f6revlerini ayr\u0131 derleme arac\u0131lar\u0131na devredin. Bu, performans\u0131 art\u0131r\u0131r ve ana sunucunun kararl\u0131l\u0131\u011f\u0131n\u0131 korur.<\/li>\n<li><strong>Pipeline Sa\u011fl\u0131\u011f\u0131n\u0131 \u0130zleyin:<\/strong> \u0130\u015f ak\u0131\u015flar\u0131n\u0131z\u0131n durumunu d\u00fczenli olarak kontrol edin. Ba\u015far\u0131s\u0131z derlemeleri hemen inceleyin ve d\u00fczeltin. Bildirimleri etkinle\u015ftirerek sorunlardan an\u0131nda haberdar olun.<\/li>\n<li><strong>Jenkins&#8217;i G\u00fcvenli Hale Getirin:<\/strong> Jenkins kurulumunuzu g\u00fcvenli hale getirmek i\u00e7in kullan\u0131c\u0131 tabanl\u0131 yetkilendirme, g\u00fc\u00e7l\u00fc \u015fifreler, SSL\/TLS kullan\u0131m\u0131 ve d\u00fczenli g\u00fcvenlik g\u00fcncellemeleri gibi ad\u0131mlar\u0131 uygulay\u0131n. Hassas bilgilere eri\u015fimi k\u0131s\u0131tlay\u0131n.<\/li>\n<li><strong>Eklentileri G\u00fcncel Tutun:<\/strong> Jenkins eklentilerini d\u00fczenli olarak g\u00fcncelleyerek g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapat\u0131n ve yeni \u00f6zelliklerden yararlan\u0131n.<\/li>\n<\/ul>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve Giderme<\/h3>\n<p>Jenkins kurulumu ve pipeline olu\u015fturma s\u00fcrecinde kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<ul>\n<li><strong>Java S\u00fcr\u00fcm Uyu\u015fmazl\u0131\u011f\u0131:<\/strong> Jenkins belirli Java s\u00fcr\u00fcmleriyle \u00e7al\u0131\u015f\u0131r. <code>java -version<\/code> komutuyla kurulu Java s\u00fcr\u00fcm\u00fcn\u00fc kontrol edin ve Jenkins gereksinimleriyle e\u015fle\u015fti\u011finden emin olun. Genellikle OpenJDK 8 veya 11 \u00f6nerilir.<\/li>\n<li><strong>\u0130zin Sorunlar\u0131:<\/strong> Jenkins kullan\u0131c\u0131s\u0131n\u0131n (<code>jenkins<\/code>) dosya sistemi \u00fczerinde gerekli okuma\/yazma izinlerine sahip oldu\u011fundan emin olun. \u00d6zellikle SCM&#8217;den kod \u00e7ekerken veya \u00e7\u0131kt\u0131 dosyalar\u0131n\u0131 yazarken bu sorunlar ortaya \u00e7\u0131kabilir.<\/li>\n<li><strong>G\u00fcvenlik Duvar\u0131 Engellemesi:<\/strong> Jenkins web aray\u00fcz\u00fcne eri\u015femiyorsan\u0131z (genellikle 8080 portu), sunucunuzdaki g\u00fcvenlik duvar\u0131n\u0131n (UFW, iptables) bu porta gelen ba\u011flant\u0131lara izin verdi\u011finden emin olun.<\/li>\n<li><strong>SCM Ba\u011flant\u0131 Sorunlar\u0131:<\/strong> Git deposundan kod \u00e7ekemiyorsan\u0131z, depo URL&#8217;sinin do\u011fru oldu\u011fundan, kimlik bilgilerinin (e\u011fer \u00f6zel bir depo ise) do\u011fru yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan ve Jenkins sunucusunun depoya eri\u015fim i\u00e7in gerekli a\u011f ba\u011flant\u0131s\u0131na sahip oldu\u011fundan emin olun. SSH tabanl\u0131 ba\u011flant\u0131larda SSH anahtarlar\u0131n\u0131n do\u011fru \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131 gerekir.<\/li>\n<li><strong>Eklenti \u00c7at\u0131\u015fmalar\u0131 veya Hatalar\u0131:<\/strong> Bazen eklentiler aras\u0131nda \u00e7at\u0131\u015fmalar olabilir veya bir eklenti hatal\u0131 \u00e7al\u0131\u015fabilir. Jenkins loglar\u0131n\u0131 (<code>\/var\/log\/jenkins\/jenkins.log<\/code>) kontrol edin. Sorunlu eklentiyi devre d\u0131\u015f\u0131 b\u0131rakmay\u0131 veya yeniden y\u00fcklemeyi deneyin.<\/li>\n<li><strong>Maven\/Gradle\/NPM Bulunamad\u0131:<\/strong> Pipeline i\u00e7inde <code>mvn<\/code>, <code>gradle<\/code>, <code>npm<\/code> gibi komutlar \u00e7al\u0131\u015fm\u0131yorsa, bu ara\u00e7lar\u0131n Jenkins sunucusunda veya kullan\u0131lan agent&#8217;ta kurulu ve PATH ortam de\u011fi\u015fkenine ekli oldu\u011fundan emin olun. Alternatif olarak, Jenkins&#8217;in &#8220;Manage Jenkins&#8221; -> &#8220;Global Tool Configuration&#8221; b\u00f6l\u00fcm\u00fcnden bu ara\u00e7lar\u0131 yap\u0131land\u0131rabilirsiniz.<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, Ubuntu 16.04 \u00fczerinde Jenkins&#8217;i kurmaktan, temel bir S\u00fcrekli Entegrasyon i\u015f ak\u0131\u015f\u0131 (pipeline) olu\u015fturmaya ve geli\u015fmi\u015f kavramlara de\u011finmeye kadar bir\u00e7ok ad\u0131m\u0131 ele ald\u0131k. Jenkins, yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinizi otomatikle\u015ftirmek, hatalar\u0131 erken tespit etmek ve yaz\u0131l\u0131m teslimat h\u0131z\u0131n\u0131z\u0131 art\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<p>S\u00fcrekli Entegrasyon, modern DevOps k\u00fclt\u00fcr\u00fcn\u00fcn temel ta\u015flar\u0131ndan biridir ve Jenkins bu prati\u011fi hayata ge\u00e7irmek i\u00e7in size gerekli t\u00fcm ara\u00e7lar\u0131 sunar. Ba\u015flang\u0131\u00e7ta karma\u015f\u0131k g\u00f6r\u00fcnebilir, ancak ad\u0131m ad\u0131m ilerleyerek ve yukar\u0131daki rehberi takip ederek, projeleriniz i\u00e7in sa\u011flam CI\/CD altyap\u0131lar\u0131 kurabilirsiniz. Unutmay\u0131n, Jenkins&#8217;in g\u00fcc\u00fc eklenti ekosisteminde ve toplulu\u011funun deste\u011findedir. Bu rehber bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r; Jenkins&#8217;in sundu\u011fu s\u0131n\u0131rs\u0131z olanaklar\u0131 ke\u015ffetmeye devam edin ve i\u015f ak\u0131\u015flar\u0131n\u0131z\u0131 kendi proje ihtiya\u00e7lar\u0131n\u0131za g\u00f6re \u00f6zelle\u015ftirin. Bu sayede, daha kaliteli yaz\u0131l\u0131mlar\u0131 daha h\u0131zl\u0131 ve daha g\u00fcvenilir bir \u015fekilde sunabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi\nGiri\u015f: S\u00fcrekli Entegrasyon ve Jenkins&#8217;in \u00d6nemi\nM","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-38884","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>Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi - 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\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi\" \/>\n<meta property=\"og:description\" content=\"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi Giri\u015f: S\u00fcrekli Entegrasyon ve Jenkins&#039;in \u00d6nemi M\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-09T18:40:51+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=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi\",\"datePublished\":\"2026-02-09T18:40:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/\"},\"wordCount\":3509,\"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\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/\",\"name\":\"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-09T18:40:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi\"}]},{\"@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":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi - 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\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi","og_description":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi Giri\u015f: S\u00fcrekli Entegrasyon ve Jenkins'in \u00d6nemi M","og_url":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-09T18:40:51+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi","datePublished":"2026-02-09T18:40:51+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/"},"wordCount":3509,"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\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/","name":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-09T18:40:51+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/jenkins-uzerinde-surekli-entegrasyon-ci-is-akislari-nasil-kurulur-ubuntu-16-04-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Jenkins \u00dczerinde S\u00fcrekli Entegrasyon (CI) \u0130\u015f Ak\u0131\u015flar\u0131 Nas\u0131l Kurulur: Ubuntu 16.04 Rehberi"}]},{"@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\/38884","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=38884"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38884\/revisions"}],"predecessor-version":[{"id":38885,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38884\/revisions\/38885"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}