{"id":36850,"date":"2025-12-24T00:41:07","date_gmt":"2025-12-23T21:41:07","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36850"},"modified":"2025-12-24T00:41:07","modified_gmt":"2025-12-23T21:41:07","slug":"docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/","title":{"rendered":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme"},"content":{"rendered":"<p><body><\/p>\n<h2>Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme<\/h2>\n<h2>Giri\u015f<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, s\u00fcrekli entegrasyon (CI) ve s\u00fcrekli teslimat (CD) s\u00fcre\u00e7leri, yaz\u0131l\u0131m kalitesini art\u0131rmak, geli\u015ftirme d\u00f6ng\u00fclerini h\u0131zland\u0131rmak ve pazara sunma s\u00fcresini k\u0131saltmak i\u00e7in vazge\u00e7ilmez hale gelmi\u015ftir. Bu s\u00fcre\u00e7lerin kalbinde yer alan Jenkins, a\u00e7\u0131k kaynakl\u0131 ve son derece esnek bir otomasyon sunucusu olarak geni\u015f bir kullan\u0131m alan\u0131na sahiptir. Ancak, Jenkins&#8217;in g\u00fcc\u00fc ve esnekli\u011fi, ayn\u0131 zamanda karma\u015f\u0131k kurulum ve konfig\u00fcrasyon s\u00fcre\u00e7lerini de beraberinde getirebilir. Manuel Jenkins kurulumlar\u0131, zaman al\u0131c\u0131 olmas\u0131n\u0131n yan\u0131 s\u0131ra, hata yapmaya a\u00e7\u0131k, tutars\u0131z ortamlara yol a\u00e7abilen ve \u00f6l\u00e7eklenebilirlik a\u00e7\u0131s\u0131ndan zorluklar bar\u0131nd\u0131ran s\u00fcre\u00e7lerdir.<\/p>\n<p>Bu makalede, Jenkins kurulumunu ve konfig\u00fcrasyonunu otomatikle\u015ftirmenin modern yakla\u015f\u0131mlar\u0131n\u0131 ele alaca\u011f\u0131z: Docker ile Jenkins ortam\u0131n\u0131 izole ve tekrarlanabilir bir \u015fekilde kurmak ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (Configuration as Code &#8211; JCasC) yakla\u015f\u0131m\u0131yla t\u00fcm Jenkins ayarlar\u0131n\u0131 kod olarak tan\u0131mlamak. Bu iki teknolojinin birle\u015fimi, Jenkins ortamlar\u0131n\u0131z\u0131n olu\u015fturulmas\u0131n\u0131, y\u00f6netilmesini ve s\u00fcrd\u00fcr\u00fclmesini devrim niteli\u011finde basitle\u015ftirerek, &#8220;altyap\u0131 kod olarak&#8221; (Infrastructure as Code &#8211; IaC) prensiplerini CI\/CD altyap\u0131n\u0131za ta\u015f\u0131man\u0131za olanak tan\u0131r. Amac\u0131m\u0131z, bu entegrasyonun neden \u00f6nemli oldu\u011funu a\u00e7\u0131klamak, temel kavramlar\u0131 tan\u0131tmak ve ad\u0131m ad\u0131m pratik bir uygulama \u00f6rne\u011fi sunarak, Jenkins altyap\u0131n\u0131z\u0131 nas\u0131l daha verimli, tutarl\u0131 ve y\u00f6netilebilir hale getirebilece\u011finizi g\u00f6stermektir.<\/p>\n<h2>Geleneksel Jenkins Kurulumunun Zorluklar\u0131<\/h2>\n<p>Jenkins, g\u00fc\u00e7l\u00fc bir CI\/CD arac\u0131 olmas\u0131na ra\u011fmen, geleneksel kurulum ve y\u00f6netim y\u00f6ntemleri \u00e7e\u015fitli zorluklar\u0131 beraberinde getirebilir. Bu zorluklar, \u00f6zellikle b\u00fcy\u00fck ekipler ve karma\u015f\u0131k projeler i\u00e7in operasyonel y\u00fck\u00fc art\u0131rabilir ve geli\u015ftirme s\u00fcre\u00e7lerini yava\u015flatabilir.<\/p>\n<h3>Manuel Kurulum ve Bak\u0131m<\/h3>\n<p>Jenkins&#8217;in manuel olarak kurulmas\u0131, i\u015fletim sistemi ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n kurulmas\u0131n\u0131, Java ortam\u0131n\u0131n yap\u0131land\u0131r\u0131lmas\u0131n\u0131 ve Jenkins paketinin indirilip y\u00fcklenmesini gerektirir. Bu s\u00fcre\u00e7, her yeni Jenkins \u00f6rne\u011fi i\u00e7in tekrarlanmas\u0131 gereken zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir dizi ad\u0131mdan olu\u015fur. Ayr\u0131ca, Jenkins eklentilerinin ve sistem ayarlar\u0131n\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) \u00fczerinden tek tek yap\u0131land\u0131r\u0131lmas\u0131, \u00f6zellikle \u00e7ok say\u0131da eklenti ve ayar oldu\u011funda yorucu ve tutars\u0131z sonu\u00e7lara yol a\u00e7abilir. Bak\u0131m s\u00fcre\u00e7leri de benzer \u015fekilde manuel m\u00fcdahale gerektirir; y\u00fckseltmeler, eklenti g\u00fcncellemeleri ve hata giderme i\u015flemleri, sistem y\u00f6neticileri i\u00e7in \u00f6nemli bir zaman dilimi ay\u0131rmay\u0131 gerektirebilir.<\/p>\n<h3>Tutars\u0131z Ortamlar<\/h3>\n<p>Manuel kurulumlar, farkl\u0131 Jenkins sunucular\u0131 aras\u0131nda k\u00fc\u00e7\u00fck farkl\u0131l\u0131klar\u0131n ortaya \u00e7\u0131kmas\u0131na neden olabilir. \u00d6rne\u011fin, bir sunucuda y\u00fckl\u00fc olan bir eklentinin veya ayar\u0131n ba\u015fka bir sunucuda eksik olmas\u0131, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sendromuna benzer bir \u015fekilde, CI\/CD s\u00fcre\u00e7lerinde beklenmedik hatalara yol a\u00e7abilir. Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131ndaki bu tutars\u0131zl\u0131klar, da\u011f\u0131t\u0131m \u00f6ncesi testlerin g\u00fcvenilirli\u011fini azalt\u0131r ve \u00fcretimde sorun ya\u015fanma riskini art\u0131r\u0131r.<\/p>\n<h3>Y\u00fckseltme ve Geri Alma Sorunlar\u0131<\/h3>\n<p>Jenkins&#8217;in veya eklentilerinin y\u00fckseltilmesi, bazen mevcut konfig\u00fcrasyonlarla uyumsuzluklara yol a\u00e7abilir. Manuel olarak yap\u0131lan konfig\u00fcrasyon de\u011fi\u015fikliklerinin izlenmesi zor oldu\u011fundan, bir y\u00fckseltme sonras\u0131 olu\u015fan sorunlarda \u00f6nceki stabil duruma geri d\u00f6nmek (rollback) karma\u015f\u0131k bir hal alabilir. Hangi ayar\u0131n ne zaman ve kim taraf\u0131ndan de\u011fi\u015ftirildi\u011fini tespit etmek, denetlenebilirlik eksikli\u011fi nedeniyle neredeyse imkans\u0131z olabilir.<\/p>\n<h3>\u00d6l\u00e7eklenebilirlik Eksikli\u011fi<\/h3>\n<p>Bir projenin b\u00fcy\u00fcmesiyle birlikte yeni Jenkins \u00f6rneklerine veya daha fazla build agent&#8217;a ihtiya\u00e7 duyulabilir. Geleneksel yakla\u015f\u0131mla, her yeni Jenkins sunucusunun manuel olarak kurulmas\u0131 ve yap\u0131land\u0131r\u0131lmas\u0131, \u00f6l\u00e7eklenme s\u00fcrecini yava\u015flat\u0131r ve operasyonel maliyetleri art\u0131r\u0131r. Bu durum, h\u0131zl\u0131 b\u00fcy\u00fcme g\u00f6steren ekipler i\u00e7in ciddi bir darbo\u011faz olu\u015fturabilir.<\/p>\n<h3>G\u00fcvenlik ve Uyumluluk<\/h3>\n<p>Manuel konfig\u00fcrasyonlar, g\u00fcvenlik politikalar\u0131n\u0131n ve uyumluluk standartlar\u0131n\u0131n tutarl\u0131 bir \u015fekilde uygulanmas\u0131n\u0131 zorla\u015ft\u0131r\u0131r. Her sunucunun ayn\u0131 g\u00fcvenlik ayarlar\u0131yla yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131ndan emin olmak, d\u00fczenli denetimler ve s\u00fcrekli manuel do\u011frulama gerektirir. Bu, \u00f6zellikle reg\u00fclasyonlara tabi sekt\u00f6rlerde b\u00fcy\u00fck bir risk fakt\u00f6r\u00fc olabilir.<\/p>\n<p>Bu zorluklar, Jenkins&#8217;in potansiyelini tam olarak kullanmay\u0131 engelleyebilir ve CI\/CD s\u00fcre\u00e7lerinin etkinli\u011fini azaltabilir. Bu nedenle, bu sorunlar\u0131 a\u015fmak i\u00e7in otomasyon ve &#8220;kod olarak altyap\u0131&#8221; prensiplerini benimsemek hayati \u00f6nem ta\u015f\u0131maktad\u0131r.<\/p>\n<h2>Docker ile Jenkins Kurulumunu Basitle\u015ftirme<\/h2>\n<p>Docker, uygulama geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini devrim niteli\u011finde de\u011fi\u015ftiren bir konteyner teknolojisidir. Jenkins gibi karma\u015f\u0131k uygulamalar\u0131n kurulumunu ve y\u00f6netimini basitle\u015ftirmek i\u00e7in ideal bir ara\u00e7t\u0131r.<\/p>\n<h3>Docker Nedir?<\/h3>\n<p>Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, hafif &#8220;konteynerler&#8221; i\u00e7inde paketlemeyi sa\u011flayan bir platformdur. Bir konteyner, uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gereken her \u015feyi (kod, \u00e7al\u0131\u015fma zaman\u0131, sistem ara\u00e7lar\u0131, k\u00fct\u00fcphaneler ve ayarlar) i\u00e7erir. Bu izolasyon, uygulaman\u0131n farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 garanti eder. Docker, sanal makinelerin aksine, i\u015fletim sistemini sanalla\u015ft\u0131rmak yerine, ana makinenin \u00e7ekirde\u011fini kullan\u0131r ve bu da konteynerleri \u00e7ok daha hafif ve h\u0131zl\u0131 hale getirir.<\/p>\n<h3>Neden Jenkins i\u00e7in Docker?<\/h3>\n<p>Jenkins&#8217;i Docker ile \u00e7al\u0131\u015ft\u0131rmak, geleneksel kurulum y\u00f6ntemlerinin bir\u00e7ok zorlu\u011funu ortadan kald\u0131r\u0131r ve \u00f6nemli avantajlar sunar:<\/p>\n<p>*   <strong>H\u0131zl\u0131 Kurulum:<\/strong> Docker imajlar\u0131 sayesinde, Jenkins&#8217;i birka\u00e7 komutla saniyeler i\u00e7inde \u00e7al\u0131\u015f\u0131r duruma getirebilirsiniz. Manuel ba\u011f\u0131ml\u0131l\u0131k kurulumu veya karma\u015f\u0131k yap\u0131land\u0131rma ad\u0131mlar\u0131 gerekmez.<br \/>\n*   <strong>\u0130zole Ortamlar:<\/strong> Jenkins ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 kendi konteynerinde izole bir \u015fekilde \u00e7al\u0131\u015f\u0131r. Bu, ana makine sistemini kirletmez ve farkl\u0131 Jenkins s\u00fcr\u00fcmlerini veya yap\u0131land\u0131rmalar\u0131n\u0131 ayn\u0131 makinede \u00e7ak\u0131\u015fma olmadan \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r.<br \/>\n*   <strong>Ta\u015f\u0131nabilirlik:<\/strong> Bir kez Docker imaj\u0131 olu\u015fturuldu\u011funda, bu imaj Docker&#8217;\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 herhangi bir ortamda (yerel bilgisayar, sanal makine, bulut sunucusu) ayn\u0131 \u015fekilde \u00e7al\u0131\u015facakt\u0131r. Bu, Jenkins ortamlar\u0131n\u0131 farkl\u0131 sunuculara kolayca ta\u015f\u0131man\u0131z\u0131 sa\u011flar.<br \/>\n*   <strong>Versiyon Kontrol\u00fc:<\/strong> Jenkins ortam\u0131n\u0131z\u0131 tan\u0131mlayan Dockerfile, kod olarak versiyon kontrol sistemlerinde (Git gibi) saklanabilir. Bu, ortam de\u011fi\u015fikliklerini izlemenizi, geri alman\u0131z\u0131 ve denetlemenizi kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Kaynak Y\u00f6netimi:<\/strong> Docker, konteynerlere atanacak CPU, bellek gibi kaynaklar\u0131 s\u0131n\u0131rlaman\u0131za olanak tan\u0131r, bu da Jenkins&#8217;in ana makinenin kaynaklar\u0131n\u0131 a\u015f\u0131r\u0131 kullanmas\u0131n\u0131 engeller.<br \/>\n*   <strong>Tekrarlanabilirlik:<\/strong> Ayn\u0131 Docker imaj\u0131ndan her zaman ayn\u0131 Jenkins ortam\u0131n\u0131 elde edersiniz. Bu, geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131k sa\u011flar.<\/p>\n<h3>Docker ile Temel Jenkins Kurulumu<\/h3>\n<p>Jenkins&#8217;i Docker ile \u00e7al\u0131\u015ft\u0131rmak olduk\u00e7a basittir. \u0130\u015fte temel ad\u0131mlar:<\/p>\n<p>1.  <strong>Jenkins LTS (Uzun S\u00fcreli Destek) \u0130maj\u0131n\u0131 \u00c7ekme:<\/strong><br \/>\n    Jenkins resmi Docker Hub deposunda haz\u0131r imajlar sunar. LTS s\u00fcr\u00fcm\u00fcn\u00fc \u00e7ekmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">docker pull jenkins\/jenkins:lts<\/code><\/pre>\n<p>2.  <strong>Jenkins Konteynerini \u00c7al\u0131\u015ft\u0131rma:<\/strong><br \/>\n    Jenkins konteynerini ba\u015flat\u0131rken, Jenkins verilerinin kal\u0131c\u0131 olmas\u0131 i\u00e7in bir Docker volume ba\u011flaman\u0131z ve Jenkins UI&#8217;\u0131na eri\u015fmek i\u00e7in portlar\u0131 e\u015flemeniz \u00f6nemlidir.<\/p>\n<pre><code class=\"language-bash\">docker run -d -p 8080:8080 -p 50000:50000 \\\n      -v jenkins_home:\/var\/jenkins_home \\\n      --name jenkins-server \\\n      jenkins\/jenkins:lts<\/code><\/pre>\n<p>    *   <code>-d<\/code>: Konteyneri arka planda \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n    *   <code>-p 8080:8080<\/code>: Ana makinenin 8080 portunu konteynerin 8080 portuna e\u015fler (Jenkins UI).<br \/>\n    *   <code>-p 50000:50000<\/code>: Ana makinenin 50000 portunu konteynerin 50000 portuna e\u015fler (Jenkins agent&#8217;lar\u0131 i\u00e7in).<br \/>\n    *   <code>-v jenkins_home:\/var\/jenkins_home<\/code>: <code>jenkins_home<\/code> ad\u0131nda bir Docker volume olu\u015fturur ve bunu konteyner i\u00e7indeki <code>\/var\/jenkins_home<\/code> dizinine ba\u011flar. Bu, konteyner silinse bile Jenkins verilerinizin (i\u015fler, eklentiler, ayarlar) kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar.<br \/>\n    *   <code>--name jenkins-server<\/code>: Konteynere <code>jenkins-server<\/code> ad\u0131n\u0131 verir.<br \/>\n    *   <code>jenkins\/jenkins:lts<\/code>: Kullan\u0131lacak Docker imaj\u0131d\u0131r.<\/p>\n<p>3.  <strong>\u0130lk Y\u00f6netici \u015eifresini Alma:<\/strong><br \/>\n    Jenkins ilk \u00e7al\u0131\u015ft\u0131rmada rastgele bir y\u00f6netici \u015fifresi olu\u015fturur. Bu \u015fifreyi konteyner loglar\u0131ndan alabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">docker logs jenkins-server<\/code><\/pre>\n<p>    Loglarda <code>Please use the following password to proceed to installation:<\/code> ile ba\u015flayan sat\u0131r\u0131 aray\u0131n.<\/p>\n<p>4.  <strong>Jenkins UI&#8217;\u0131na Eri\u015fim:<\/strong><br \/>\n    Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8080<\/code> adresine giderek Jenkins UI&#8217;\u0131na eri\u015febilir, ald\u0131\u011f\u0131n\u0131z \u015fifreyi girerek ilk kurulumu tamamlayabilirsiniz (\u00f6nerilen eklentileri y\u00fcklemek gibi).<\/p>\n<h3>\u00d6zel Jenkins Docker \u0130maj\u0131 Olu\u015fturma (Dockerfile)<\/h3>\n<p>Jenkins&#8217;i daha da \u00f6zelle\u015ftirmek i\u00e7in kendi Dockerfile&#8217;\u0131n\u0131z\u0131 olu\u015fturabilirsiniz. Bu, belirli eklentileri \u00f6nceden y\u00fcklemenize, \u00f6zel yap\u0131land\u0131rmalar eklemenize veya belirli bir Java s\u00fcr\u00fcm\u00fcn\u00fc kullanman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-dockerfile\">FROM jenkins\/jenkins:lts\n\n<h2>Jenkins'e \u00f6zel eklentileri y\u00fcklemek i\u00e7in<\/h2>\nCOPY plugins.txt \/usr\/share\/jenkins\/ref\/plugins.txt\nRUN \/usr\/local\/bin\/install-plugins.sh < \/usr\/share\/jenkins\/ref\/plugins.txt\n\n<h2>Ek ayarlar veya dosyalar kopyalanabilir<\/h2>\n<h2>COPY my-custom-config.xml \/var\/jenkins_home\/<\/code><\/pre>\n<\/h2>\n<p><code>plugins.txt<\/code> dosyas\u0131, her sat\u0131rda y\u00fcklenecek bir eklenti ad\u0131n\u0131 i\u00e7erebilir (\u00f6rn: <code>pipeline-utility-steps<\/code>, <code>git<\/code>, <code>docker-workflow<\/code>).<\/p>\n<p>Bu yakla\u015f\u0131m, Jenkins ortam\u0131n\u0131z\u0131n tamamen kod olarak tan\u0131mlanmas\u0131n\u0131 sa\u011flayarak, tekrarlanabilirli\u011fi ve y\u00f6netilebilirli\u011fi maksimize eder. Ancak, Jenkins&#8217;in i\u00e7 konfig\u00fcrasyonlar\u0131n\u0131 da kod olarak y\u00f6netmek i\u00e7in JCasC devreye girer.<\/p>\n<h2>Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC)<\/h2>\n<p>Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (Configuration as Code &#8211; JCasC), Jenkins&#8217;in t\u00fcm ayarlar\u0131n\u0131, eklenti konfig\u00fcrasyonlar\u0131n\u0131, g\u00fcvenlik politikalar\u0131n\u0131 ve di\u011fer sistem yap\u0131land\u0131rmalar\u0131n\u0131 insan taraf\u0131ndan okunabilir, bildirimsel (declarative) YAML dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6netme yakla\u015f\u0131m\u0131d\u0131r. Bu, &#8220;altyap\u0131 kod olarak&#8221; (Infrastructure as Code &#8211; IaC) prensiplerinin Jenkins&#8217;e uygulanmas\u0131 anlam\u0131na gelir.<\/p>\n<h3>JCasC Nedir?<\/h3>\n<p>JCasC, Jenkins&#8217;in geleneksel olarak web UI \u00fczerinden yap\u0131lan t\u00fcm konfig\u00fcrasyonlar\u0131n\u0131n, s\u00fcr\u00fcm kontrol sistemlerinde (Git gibi) saklanabilen ve otomatikle\u015ftirilebilen YAML dosyalar\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesini sa\u011flar. Bu yakla\u015f\u0131m, Jenkins ortam\u0131n\u0131n her zaman ayn\u0131 \u015fekilde yap\u0131land\u0131r\u0131lmas\u0131n\u0131 garanti eder, manuel hatalar\u0131 ortadan kald\u0131r\u0131r ve konfig\u00fcrasyon de\u011fi\u015fikliklerinin izlenebilirli\u011fini art\u0131r\u0131r. JCasC, Jenkins&#8217;in &#8220;Configuration as Code&#8221; eklentisi taraf\u0131ndan desteklenir ve bu eklenti, YAML dosyalar\u0131n\u0131 okuyarak Jenkins \u00f6rne\u011fini yap\u0131land\u0131r\u0131r.<\/p>\n<h3>Neden JCasC Kullanmal\u0131y\u0131z?<\/h3>\n<p>JCasC kullanman\u0131n bir\u00e7ok \u00f6nemli avantaj\u0131 vard\u0131r:<\/p>\n<p>*   <strong>Otomatikle\u015ftirme ve Tekrarlanabilirlik:<\/strong> Yeni bir Jenkins \u00f6rne\u011fi kurarken veya mevcut bir \u00f6rne\u011fi yeniden yap\u0131land\u0131r\u0131rken, t\u00fcm ayarlar otomatik olarak YAML dosyas\u0131ndan uygulan\u0131r. Bu, manuel m\u00fcdahaleye gerek kalmadan ayn\u0131 Jenkins ortam\u0131n\u0131 defalarca olu\u015fturabilece\u011finiz anlam\u0131na gelir.<br \/>\n*   <strong>Versiyon Kontrol\u00fc ve Denetlenebilirlik:<\/strong> T\u00fcm Jenkins konfig\u00fcrasyonlar\u0131 Git gibi bir versiyon kontrol sisteminde sakland\u0131\u011f\u0131ndan, her de\u011fi\u015fiklik izlenebilir, kimin neyi de\u011fi\u015ftirdi\u011fi g\u00f6r\u00fclebilir ve gerekti\u011finde \u00f6nceki bir s\u00fcr\u00fcme geri d\u00f6n\u00fclebilir. Bu, g\u00fcvenlik ve uyumluluk denetimleri i\u00e7in kritik \u00f6neme sahiptir.<br \/>\n*   <strong>Tutarl\u0131l\u0131k ve Standardizasyon:<\/strong> Geli\u015ftirme, test ve \u00fcretim gibi farkl\u0131 ortamlardaki Jenkins sunucular\u0131n\u0131n ayn\u0131 konfig\u00fcrasyona sahip olmas\u0131 garanti edilir. Bu, CI\/CD s\u00fcre\u00e7lerinde tutars\u0131zl\u0131klar\u0131 ve &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sorunlar\u0131n\u0131 ortadan kald\u0131r\u0131r. Ekipler aras\u0131nda standart Jenkins ayarlar\u0131n\u0131n uygulanmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Hata Azaltma:<\/strong> Manuel UI tabanl\u0131 konfig\u00fcrasyonlar, insan hatas\u0131na a\u00e7\u0131kt\u0131r. JCasC ile konfig\u00fcrasyonlar kod olarak yaz\u0131ld\u0131\u011f\u0131ndan, syntax hatalar\u0131 derleme veya do\u011frulama a\u015famas\u0131nda yakalanabilir ve yanl\u0131\u015f yap\u0131land\u0131rma riski azal\u0131r.<br \/>\n*   <strong>Kurtarma ve Felaket Durumlar\u0131:<\/strong> Bir Jenkins sunucusunun \u00e7\u00f6kmesi durumunda, JCasC dosyalar\u0131 sayesinde Jenkins ortam\u0131n\u0131 h\u0131zla ve g\u00fcvenilir bir \u015fekilde yeniden olu\u015fturmak m\u00fcmk\u00fcnd\u00fcr. Bu, i\u015f s\u00fcreklili\u011fi ve felaket kurtarma stratejileri i\u00e7in temel bir bile\u015fendir.<br \/>\n*   <strong>Ortamlar Aras\u0131 Ta\u015f\u0131ma Kolayl\u0131\u011f\u0131:<\/strong> Jenkins konfig\u00fcrasyonunu farkl\u0131 ortamlara (\u00f6rn. \u015firket i\u00e7i sunucudan buluta) ta\u015f\u0131mak, JCasC dosyalar\u0131n\u0131 yeni ortama uygulamak kadar basittir.<\/p>\n<h3>JCasC Temelleri ve Yap\u0131s\u0131<\/h3>\n<p>JCasC konfig\u00fcrasyonlar\u0131 genellikle <code>jenkins.yaml<\/code> veya <code>configuration-as-code.yaml<\/code> gibi bir YAML dosyas\u0131nda tan\u0131mlan\u0131r. Bu dosyalar, Jenkins&#8217;in sistem ayarlar\u0131ndan, g\u00fcvenlik konfig\u00fcrasyonlar\u0131na, eklenti ayarlar\u0131na kadar geni\u015f bir yelpazeyi kapsar.<\/p>\n<p>\u00d6rnek bir JCasC YAML yap\u0131s\u0131 \u015fu \u015fekildedir:<\/p>\n<pre><code class=\"language-yaml\"># jenkins.yaml\njenkins:\n  systemMessage: \"Ho\u015f Geldiniz! Bu Jenkins sunucusu JCasC ile yap\u0131land\u0131r\u0131lm\u0131\u015ft\u0131r.\"\n  numExecutors: 2\n  remotingSecurity:\n    enabled: true\n  disableRememberMe: false\n\nsecurity:\n  apiToken:\n    tokenGenerationOnCreationEnabled: true\n    tokenGenerationOnRevocationEnabled: true\n  globalJobSecurity:\n    enabled: true\n    overrideJobSecurity: false\n  sso:\n    enabled: false\n  # Temel kullan\u0131c\u0131 kimlik do\u011frulamas\u0131\n  securityRealm:\n    local:\n      allowsSignup: false\n      users:\n        - id: \"admin\"\n          password: \"${ADMIN_PASSWORD}\" # Ortam de\u011fi\u015fkeninden al\u0131nacak\n        - id: \"developer\"\n          password: \"${DEVELOPER_PASSWORD}\"\n  authorizationStrategy:\n    loggedInUsersCanDoAnything:\n      allowAnonymousRead: false\n\n<h2>Eklenti ayarlar\u0131<\/h2>\nunclassified:\n  gitHubConfiguration:\n    apiRateLimitChecker: Standard\n  location:\n    url: \"http:\/\/jenkins.example.com\/\" # Jenkins ana URL'si\n\n<h2>Global ara\u00e7 konfig\u00fcrasyonlar\u0131 (JDK, Maven, Git vb.)<\/h2>\ntool:\n  jdk:\n    - name: \"jdk11\"\n      installations:\n        - name: \"jdk-11\"\n          home: \"\/usr\/lib\/jvm\/java-11-openjdk-amd64\" # Konteyner i\u00e7indeki yolu\n  maven:\n    - name: \"maven3\"\n      installations:\n        - name: \"Maven 3.8.6\"\n          home: \"\/opt\/apache-maven-3.8.6\" # Konteyner i\u00e7indeki yolu\n\n<h2>Agent konfig\u00fcrasyonlar\u0131 (\u00d6rnek: SSH agent)<\/h2>\n<h2>cloud:<\/h2>\n<h2>- sshSlaves:<\/h2>\n<h2>name: \"static-agent\"<\/h2>\n<h2>host: \"192.168.1.100\"<\/h2>\n<h2>port: 22<\/h2>\n<h2>credentialsId: \"ssh-key-credential\" # Jenkins Credentials ID<\/h2>\n<h2>remoteFs: \"\/home\/jenkins\"<\/h2>\n<h2>numExecutors: 1<\/h2>\n<h2>labels: \"linux\"<\/h2>\n<h2>javaPath: \"\/usr\/bin\/java\"<\/code><\/pre>\n<\/h2>\n<p>*   <strong><code>jenkins<\/code>:<\/strong> Jenkins sistemine genel ayarlar (sistem mesaj\u0131, executor say\u0131s\u0131).<br \/>\n*   <strong><code>security<\/code>:<\/strong> G\u00fcvenlik ayarlar\u0131, kimlik do\u011frulama (authentication) ve yetkilendirme (authorization) stratejileri. <code>securityRealm<\/code> alt\u0131nda kullan\u0131c\u0131lar\u0131 veya d\u0131\u015f kimlik do\u011frulama sistemlerini (LDAP, OAuth) tan\u0131mlayabilirsiniz.<br \/>\n*   <strong><code>unclassified<\/code>:<\/strong> \u00c7e\u015fitli eklentilerin genel ayarlar\u0131 (\u00f6rn. GitHub entegrasyonu, Jenkins URL&#8217;si).<br \/>\n*   <strong><code>tool<\/code>:<\/strong> Jenkins&#8217;in kullanaca\u011f\u0131 global ara\u00e7lar\u0131n (JDK, Maven, Git) konfig\u00fcrasyonu. Bu, pipeline&#8217;larda bu ara\u00e7lara kolayca referans vermenizi sa\u011flar.<br \/>\n*   <strong>S\u0131rlar (Secrets):<\/strong> JCasC, hassas verileri do\u011frudan YAML dosyas\u0131na yazmak yerine, ortam de\u011fi\u015fkenleri veya Jenkins Credentials gibi d\u0131\u015f kaynaklardan almay\u0131 destekler. \u00d6rne\u011fin, <code>${ADMIN_PASSWORD}<\/code> s\u00f6z dizimi, Jenkins&#8217;in <code>ADMIN_PASSWORD<\/code> adl\u0131 bir ortam de\u011fi\u015fkenini aramas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>JCasC&#8217;yi Jenkins&#8217;e Entegre Etme<\/h3>\n<p>JCasC&#8217;yi kullanmak i\u00e7in \u00f6ncelikle Jenkins&#8217;e &#8220;Configuration as Code&#8221; eklentisini kurman\u0131z gerekir. Bu eklenti y\u00fcklendikten sonra, Jenkins&#8217;i ba\u015flat\u0131rken veya \u00e7al\u0131\u015f\u0131rken JCasC YAML dosyas\u0131n\u0131 y\u00fcklemesini sa\u011flayabilirsiniz.<\/p>\n<p>1.  <strong>Eklentiyi Kurma:<\/strong> Jenkins UI \u00fczerinden &#8220;Manage Jenkins&#8221; -> &#8220;Manage Plugins&#8221; yolunu izleyerek &#8220;Configuration as Code&#8221; eklentisini aray\u0131p kurabilirsiniz. Daha iyisi, Dockerfile i\u00e7inde eklentiyi y\u00fcklemektir.<br \/>\n2.  <strong>Konfig\u00fcrasyonu Y\u00fckleme:<\/strong> JCasC, konfig\u00fcrasyon dosyas\u0131n\u0131 \u00e7e\u015fitli yollarla y\u00fckleyebilir:<br \/>\n    *   <strong>Ortam De\u011fi\u015fkeni:<\/strong> Jenkins konteynerini ba\u015flat\u0131rken <code>JENKINS_CONFIGURATION_AS_CODE<\/code> ortam de\u011fi\u015fkenini YAML dosyas\u0131n\u0131n veya bir dizinin yolu olarak ayarlamak en yayg\u0131n y\u00f6ntemdir.<\/p>\n<pre><code class=\"language-bash\">-e JENKINS_CONFIGURATION_AS_CODE=\/var\/jenkins_home\/casc_configs\/jenkins.yaml<\/code><\/pre>\n<p>    *   <strong>UI \u00dczerinden:<\/strong> Jenkins UI&#8217;\u0131nda &#8220;Manage Jenkins&#8221; -> &#8220;Configuration as Code&#8221; alt\u0131nda &#8220;Apply new configuration&#8221; se\u00e7ene\u011fi ile yerel bir YAML dosyas\u0131n\u0131 y\u00fckleyebilirsiniz (genellikle test ama\u00e7l\u0131).<\/p>\n<p>Bu entegrasyon, Jenkins&#8217;in ba\u015flang\u0131c\u0131nda t\u00fcm konfig\u00fcrasyonlar\u0131n otomatik olarak uygulanmas\u0131n\u0131 sa\u011flar, b\u00f6ylece Jenkins her zaman tan\u0131mlad\u0131\u011f\u0131n\u0131z durumda ba\u015flar.<\/p>\n<h2>Docker ve JCasC ile U\u00e7tan Uca Otomasyon<\/h2>\n<p>Jenkins kurulumunu Docker ve JCasC ile birle\u015ftirmek, CI\/CD altyap\u0131n\u0131z\u0131 tamamen otomatikle\u015ftirilmi\u015f, tekrarlanabilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirmenin en g\u00fc\u00e7l\u00fc yollar\u0131ndan biridir. Bu b\u00f6l\u00fcmde, bu iki teknolojiyi bir araya getiren ad\u0131m ad\u0131m bir uygulama senaryosu sunaca\u011f\u0131z.<\/p>\n<h3>Senaryo Tasar\u0131m\u0131<\/h3>\n<p>Amac\u0131m\u0131z, a\u015fa\u011f\u0131daki bile\u015fenleri i\u00e7eren bir Jenkins ortam\u0131 olu\u015fturmakt\u0131r:<\/p>\n<p>1.  <strong>\u00d6zel Jenkins Docker \u0130maj\u0131:<\/strong> Jenkins&#8217;in temel imaj\u0131n\u0131 kullanarak, JCasC eklentisi ve di\u011fer gerekli eklentileri \u00f6nceden y\u00fcklenmi\u015f bir imaj olu\u015fturaca\u011f\u0131z.<br \/>\n2.  <strong>JCasC Konfig\u00fcrasyon Dosyas\u0131:<\/strong> Jenkins&#8217;in sistem ayarlar\u0131n\u0131, g\u00fcvenlik konfig\u00fcrasyonlar\u0131n\u0131 ve global ara\u00e7 tan\u0131mlar\u0131n\u0131 i\u00e7eren bir YAML dosyas\u0131 haz\u0131rlayaca\u011f\u0131z.<br \/>\n3.  <strong>Docker Compose:<\/strong> Jenkins konteynerini, kal\u0131c\u0131 verileri ve JCasC konfig\u00fcrasyonunu bir arada y\u00f6netmek i\u00e7in <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 kullanaca\u011f\u0131z.<\/p>\n<p>Bu yap\u0131land\u0131rma, Jenkins ortam\u0131n\u0131n tek bir komutla aya\u011fa kald\u0131r\u0131lmas\u0131n\u0131, t\u00fcm ayarlar\u0131n otomatik olarak uygulanmas\u0131n\u0131 ve konteyner silinse bile verilerin korunmas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>Ad\u0131m Ad\u0131m Uygulama<\/h3>\n<p>\u015eimdi, bu senaryoyu ad\u0131m ad\u0131m nas\u0131l uygulayaca\u011f\u0131m\u0131za bakal\u0131m.<\/p>\n<h4>1. Custom Jenkins Dockerfile Olu\u015fturma<\/h4>\n<p>\u0130lk olarak, Jenkins&#8217;in temel Docker imaj\u0131n\u0131 geni\u015fleterek kendi \u00f6zel imaj\u0131m\u0131z\u0131 olu\u015ftural\u0131m. Bu imaj, JCasC eklentisini ve di\u011fer gerekli eklentileri i\u00e7erecektir. Proje dizininizin k\u00f6k\u00fcnde <code>Dockerfile<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-dockerfile\"># Dockerfile\nFROM jenkins\/jenkins:lts\n\nUSER root\n\n<h2>JCasC eklentisini ve di\u011fer temel eklentileri y\u00fcklemek i\u00e7in plugins.txt dosyas\u0131n\u0131 kopyala<\/h2>\nCOPY plugins.txt \/usr\/share\/jenkins\/ref\/plugins.txt\nRUN \/usr\/local\/bin\/install-plugins.sh < \/usr\/share\/jenkins\/ref\/plugins.txt\n\n<h2>JCasC konfig\u00fcrasyon dosyas\u0131n\u0131 kopyala<\/h2>\nCOPY jenkins.yaml \/var\/jenkins_home\/casc_configs\/jenkins.yaml\n\n<h2>Jenkins'in JCasC konfig\u00fcrasyon dosyas\u0131n\u0131 otomatik olarak y\u00fcklemesini sa\u011flamak i\u00e7in ortam de\u011fi\u015fkenini ayarla<\/h2>\nENV JENKINS_CONFIGURATION_AS_CODE=\/var\/jenkins_home\/casc_configs\/jenkins.yaml\n\n<h2>Jenkins'in web UI'\u0131na eri\u015fim portu<\/h2>\nEXPOSE 8080\n<h2>Jenkins agent'lar\u0131 i\u00e7in port<\/h2>\nEXPOSE 50000\n\nUSER jenkins<\/code><\/pre>\n<p>Bu Dockerfile, <code>jenkins\/jenkins:lts<\/code> imaj\u0131n\u0131 temel al\u0131r, <code>plugins.txt<\/code> dosyas\u0131ndaki eklentileri y\u00fckler, <code>jenkins.yaml<\/code> dosyas\u0131n\u0131 konteyner i\u00e7ine kopyalar ve <code>JENKINS_CONFIGURATION_AS_CODE<\/code> ortam de\u011fi\u015fkenini ayarlayarak Jenkins&#8217;in ba\u015flang\u0131\u00e7ta bu YAML dosyas\u0131n\u0131 i\u015flemesini sa\u011flar.<\/p>\n<h4>2. <code>plugins.txt<\/code> \u00d6rne\u011fi<\/h4>\n<p><code>Dockerfile<\/code> ile ayn\u0131 dizinde <code>plugins.txt<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine Jenkins&#8217;e y\u00fcklenecek eklentileri listeleyin. JCasC&#8217;nin kendisi bir eklenti oldu\u011fu i\u00e7in onu da buraya ekliyoruz:<\/p>\n<pre><code class=\"language-\">configuration-as-code\ngit\npipeline-utility-steps\ndocker-workflow\nmaven\njdk-tool<\/code><\/pre>\n<h4>3. <code>jenkins.yaml<\/code> \u00d6rne\u011fi<\/h4>\n<p><code>Dockerfile<\/code> ile ayn\u0131 dizinde <code>jenkins.yaml<\/code> ad\u0131nda bir dosya olu\u015fturun. Bu dosya, Jenkins&#8217;in t\u00fcm sistem ve g\u00fcvenlik konfig\u00fcrasyonlar\u0131n\u0131 i\u00e7erecektir. Hassas veriler (\u015fifreler) i\u00e7in ortam de\u011fi\u015fkenlerini kullanmay\u0131 unutmay\u0131n.<\/p>\n<pre><code class=\"language-yaml\"># jenkins.yaml\njenkins:\n  systemMessage: \"Bu Jenkins sunucusu Docker ve JCasC ile otomatik olarak yap\u0131land\u0131r\u0131lm\u0131\u015ft\u0131r. Ho\u015f Geldiniz!\"\n  numExecutors: 2\n  remotingSecurity:\n    enabled: true\n  disableRememberMe: false\n\nsecurity:\n  apiToken:\n    tokenGenerationOnCreationEnabled: true\n    tokenGenerationOnRevocationEnabled: true\n  globalJobSecurity:\n    enabled: true\n    overrideJobSecurity: false\n  sso:\n    enabled: false\n  securityRealm:\n    local:\n      allowsSignup: false\n      users:\n        - id: \"admin\"\n          password: \"${JENKINS_ADMIN_PASSWORD}\" # Ortam de\u011fi\u015fkeninden al\u0131nacak\n  authorizationStrategy:\n    loggedInUsersCanDoAnything:\n      allowAnonymousRead: false\n\nunclassified:\n  gitHubConfiguration:\n    apiRateLimitChecker: Standard\n  location:\n    url: \"http:\/\/localhost:8080\/\" # Jenkins ana URL'si\n\ntool:\n  jdk:\n    - name: \"jdk11\"\n      installations:\n        - name: \"openjdk11\"\n          home: \"\/usr\/lib\/jvm\/java-11-openjdk-amd64\" # Konteyner i\u00e7indeki Java yolu\n  maven:\n    - name: \"maven3\"\n      installations:\n        - name: \"Maven 3.8.6\"\n          home: \"\/opt\/apache-maven-3.8.6\" # Bu yolu Dockerfile'da veya \u00f6zel bir imajda kurmal\u0131s\u0131n\u0131z.<\/code><\/pre>\n<p><strong>Not:<\/strong> <code>tool<\/code> k\u0131sm\u0131nda belirtilen <code>home<\/code> yollar\u0131n\u0131n, Jenkins konteyneri i\u00e7inde ger\u00e7ekten var olan Java ve Maven kurulumlar\u0131na i\u015faret etmesi gerekir. E\u011fer Jenkins&#8217;in varsay\u0131lan imaj\u0131nda bu yollar yoksa, Dockerfile&#8217;\u0131n\u0131z\u0131 bu ara\u00e7lar\u0131 y\u00fckleyecek \u015fekilde geni\u015fletmeniz gerekebilir. Basitlik ad\u0131na bu \u00f6rnekte varsay\u0131lan yollar\u0131 kulland\u0131k, ancak ger\u00e7ek bir senaryoda \u00f6zel bir imaj olu\u015fturman\u0131z \u00f6nerilir.<\/p>\n<h4>4. <code>docker-compose.yml<\/code> Olu\u015fturma<\/h4>\n<p>Jenkins konteynerini ve kal\u0131c\u0131 verilerini y\u00f6netmek i\u00e7in <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 kullanaca\u011f\u0131z. Bu dosya, Jenkins&#8217;i ba\u015flatmak i\u00e7in gereken t\u00fcm ayarlar\u0131 i\u00e7erir. <code>Dockerfile<\/code> ve <code>jenkins.yaml<\/code> ile ayn\u0131 dizinde <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-yaml\"># docker-compose.yml\nversion: '3.8'\n\nservices:\n  jenkins:\n    build:\n      context: . # Dockerfile'\u0131n bulundu\u011fu dizin\n      dockerfile: Dockerfile\n    container_name: jenkins-server\n    ports:\n      - \"8080:8080\"\n      - \"50000:50000\"\n    volumes:\n      - jenkins_home:\/var\/jenkins_home # Jenkins verileri i\u00e7in kal\u0131c\u0131 volume\n      # JCasC dosyas\u0131n\u0131 d\u0131\u015far\u0131dan ba\u011flamak isterseniz:\n      # - .\/jenkins.yaml:\/var\/jenkins_home\/casc_configs\/jenkins.yaml:ro\n    environment:\n      # JCasC taraf\u0131ndan kullan\u0131lacak y\u00f6netici \u015fifresini g\u00fcvenli bir \u015fekilde aktar\u0131n\n      JENKINS_ADMIN_PASSWORD: your_strong_admin_password_here\n      # JENKINS_ADMIN_PASSWORD: ${JENKINS_ADMIN_PASSWORD} # Daha g\u00fcvenli bir yakla\u015f\u0131m i\u00e7in .env dosyas\u0131ndan okuyun\n      # \u0130lk \u00e7al\u0131\u015ft\u0131rmada Jenkins taraf\u0131ndan olu\u015fturulan \u015fifreyi devre d\u0131\u015f\u0131 b\u0131rak\n      # JCasC'nin kendi kullan\u0131c\u0131lar\u0131n\u0131 tan\u0131mlad\u0131\u011f\u0131 durumlarda bu \u00f6nemlidir.\n      # Ancak JCasC kullan\u0131c\u0131lar\u0131 tan\u0131mlasa bile, ilk \u00e7al\u0131\u015ft\u0131rmada Jenkins yine de ge\u00e7ici bir \u015fifre isteyebilir.\n      # Bu durumu y\u00f6netmek i\u00e7in JCasC'nin kendi g\u00fcvenlik realm'\u0131n\u0131 tam olarak yap\u0131land\u0131rmak gerekir.\n      # \u0130lk seferde manuel \u015fifre giri\u015fini atlamak i\u00e7in:\n      # JENKINS_SLAVE_AGENT_PORT: \"50000\"\n      # JAVA_OPTS: \"-Djenkins.install.runSetupWizard=false\" # Bu, JCasC kullan\u0131rken genellikle \u00f6nerilir.\n      # E\u011fer JCasC ile kullan\u0131c\u0131 tan\u0131mlad\u0131ysan\u0131z, ilk kurulum sihirbaz\u0131n\u0131 atlayabilirsiniz.\n      # Ancak dikkatli olun, sihirbaz\u0131 atlamak, eklenti kurulumunu da atlayabilir.\n      # Genellikle JCasC ile eklentileri ve kullan\u0131c\u0131lar\u0131 y\u00f6netti\u011finizde bu ayar mant\u0131kl\u0131d\u0131r.\n      CASC_JENKINS_CONFIG: \/var\/jenkins_home\/casc_configs\/jenkins.yaml # Dockerfile'da ENV ile zaten ayarland\u0131.\n\nvolumes:\n  jenkins_home:<\/code><\/pre>\n<p><strong>G\u00fcvenlik Notu:<\/strong> <code>JENKINS_ADMIN_PASSWORD<\/code> do\u011frudan <code>docker-compose.yml<\/code> i\u00e7inde yazmak yerine, bir <code>.env<\/code> dosyas\u0131 kullanarak veya Docker secrets gibi daha g\u00fcvenli y\u00f6ntemlerle y\u00f6netmek en iyi uygulamad\u0131r. \u00d6rne\u011fin, <code>JENKINS_ADMIN_PASSWORD: ${JENKINS_ADMIN_PASSWORD}<\/code> \u015feklinde kullan\u0131p, <code>.env<\/code> dosyas\u0131nda <code>JENKINS_ADMIN_PASSWORD=your_strong_admin_password<\/code> tan\u0131mlayabilirsiniz.<\/p>\n<h4>5. Jenkins&#8217;i Ba\u015flatma<\/h4>\n<p>T\u00fcm dosyalar\u0131 haz\u0131rlad\u0131ktan sonra, proje dizininizin k\u00f6k\u00fcnde terminali a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker-compose up -d --build<\/code><\/pre>\n<p>*   <code>--build<\/code>: <code>Dockerfile<\/code>&#8216;da yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikleri alg\u0131lay\u0131p yeni bir Jenkins imaj\u0131 olu\u015fturur.<br \/>\n*   <code>-d<\/code>: Konteyneri arka planda (detached mode) \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<p>Bu komut, \u00f6zel Jenkins imaj\u0131n\u0131z\u0131 olu\u015fturacak, Jenkins konteynerini ba\u015flatacak ve JCasC dosyas\u0131ndaki t\u00fcm konfig\u00fcrasyonlar\u0131 otomatik olarak uygulayacakt\u0131r.<\/p>\n<h4>6. Do\u011frulama<\/h4>\n<p>Jenkins&#8217;in ba\u015far\u0131yla ba\u015flad\u0131\u011f\u0131ndan ve konfig\u00fcrasyonlar\u0131n uyguland\u0131\u011f\u0131ndan emin olmak i\u00e7in:<\/p>\n<p>1.  <strong>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8080<\/code> adresine gidin.<\/strong> Jenkins UI&#8217;\u0131 a\u00e7\u0131lmal\u0131d\u0131r.<br \/>\n2.  <strong>JCasC ile tan\u0131mlad\u0131\u011f\u0131n\u0131z kullan\u0131c\u0131 ad\u0131n\u0131z (<code>admin<\/code>) ve \u015fifrenizle giri\u015f yapmaya \u00e7al\u0131\u015f\u0131n.<\/strong> E\u011fer <code>jenkins.install.runSetupWizard=false<\/code> ayar\u0131n\u0131 kulland\u0131ysan\u0131z, do\u011frudan giri\u015f ekran\u0131na y\u00f6nlendirilirsiniz. Aksi takdirde, ilk kurulum sihirbaz\u0131n\u0131 ge\u00e7meniz gerekebilir, ancak JCasC ayarlar\u0131n\u0131n \u00e7o\u011fu yine de uygulanacakt\u0131r.<br \/>\n3.  <strong>&#8220;Manage Jenkins&#8221; -> &#8220;System&#8221; b\u00f6l\u00fcm\u00fcne gidin.<\/strong> JCasC ile tan\u0131mlad\u0131\u011f\u0131n\u0131z sistem mesaj\u0131n\u0131 g\u00f6rmelisiniz.<br \/>\n4.  <strong>&#8220;Manage Jenkins&#8221; -> &#8220;Tools&#8221; b\u00f6l\u00fcm\u00fcne gidin.<\/strong> JCasC ile tan\u0131mlad\u0131\u011f\u0131n\u0131z JDK ve Maven kurulumlar\u0131n\u0131 g\u00f6rmelisiniz.<br \/>\n5.  <strong>&#8220;Manage Jenkins&#8221; -> &#8220;Configuration as Code&#8221; b\u00f6l\u00fcm\u00fcne gidin.<\/strong> Burada, uygulanan konfig\u00fcrasyonlar\u0131 ve bunlar\u0131n nereden geldi\u011fini g\u00f6rebilirsiniz.<\/p>\n<p>Bu ad\u0131mlar, Jenkins ortam\u0131n\u0131z\u0131n Docker ve JCasC kullan\u0131larak ba\u015far\u0131l\u0131 bir \u015fekilde otomatikle\u015ftirildi\u011fini do\u011frular.<\/p>\n<h2>S\u0131rlar ve G\u00fcvenlik Y\u00f6netimi<\/h2>\n<p>Otomatikle\u015ftirilmi\u015f Jenkins kurulumlar\u0131nda, hassas verilerin (API anahtarlar\u0131, veritaban\u0131 \u015fifreleri, kullan\u0131c\u0131 kimlik bilgileri) g\u00fcvenli bir \u015fekilde y\u00f6netilmesi kritik \u00f6neme sahiptir. JCasC, bu s\u0131rlar\u0131 do\u011frudan YAML dosyas\u0131na yazmak yerine, \u00e7e\u015fitli g\u00fcvenli mekanizmalar arac\u0131l\u0131\u011f\u0131yla y\u00f6netmeyi destekler.<\/p>\n<h3>JCasC&#8217;de S\u0131r Y\u00f6netimi<\/h3>\n<p>JCasC, konfig\u00fcrasyon dosyalar\u0131nda hassas de\u011ferler i\u00e7in placeholder&#8217;lar kullan\u0131lmas\u0131na olanak tan\u0131r. Bu placeholder&#8217;lar, Jenkins ba\u015flat\u0131l\u0131rken ortam de\u011fi\u015fkenlerinden veya di\u011fer s\u0131r y\u00f6netim sistemlerinden doldurulur.<\/p>\n<p>*   <strong>Ortam De\u011fi\u015fkenleri:<\/strong> En basit y\u00f6ntem, hassas verileri Jenkins konteynerine ortam de\u011fi\u015fkenleri olarak sa\u011flamakt\u0131r. JCasC YAML dosyas\u0131nda <code>${ENV_VAR_ADI}<\/code> format\u0131n\u0131 kullanarak bu de\u011fi\u015fkenlere referans verebilirsiniz.<\/p>\n<pre><code class=\"language-yaml\">users:\n      - id: \"admin\"\n        password: \"${JENKINS_ADMIN_PASSWORD}\"<\/code><\/pre>\n<p>    <code>docker-compose.yml<\/code> dosyas\u0131nda:<\/p>\n<pre><code class=\"language-yaml\">environment:\n      JENKINS_ADMIN_PASSWORD: your_secret_password<\/code><\/pre>\n<p>    Bu y\u00f6ntem, geli\u015ftirme ortamlar\u0131 i\u00e7in uygun olsa da, \u00fcretim ortamlar\u0131nda ortam de\u011fi\u015fkenlerinin loglarda veya proses listelerinde g\u00f6r\u00fcnme riski nedeniyle daha geli\u015fmi\u015f \u00e7\u00f6z\u00fcmler tercih edilmelidir.<\/p>\n<p>*   <strong>Jenkins Credentials:<\/strong> Jenkins&#8217;in yerle\u015fik Credentials (Kimlik Bilgileri) sistemi, \u015fifreleri, SSH anahtarlar\u0131n\u0131 ve di\u011fer s\u0131rlar\u0131 g\u00fcvenli bir \u015fekilde saklamak i\u00e7in tasarlanm\u0131\u015ft\u0131r. JCasC, bu kimlik bilgilerini tan\u0131mlaman\u0131za ve daha sonra pipeline&#8217;larda veya di\u011fer konfig\u00fcrasyonlarda kullanman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-yaml\">credentials:\n      system:\n        domain:\n          - global:\n              credentials:\n                - usernamePassword:\n                    id: \"my-github-creds\"\n                    username: \"github_user\"\n                    password: \"${GITHUB_TOKEN}\"\n                    description: \"GitHub API Token\"<\/code><\/pre>\n<p>    Bu kimlik bilgileri, JCasC taraf\u0131ndan tan\u0131mland\u0131ktan sonra Jenkins UI&#8217;\u0131nda &#8220;Manage Credentials&#8221; alt\u0131nda g\u00f6r\u00fcn\u00fcr ve pipeline&#8217;larda <code>withCredentials<\/code> blo\u011fu ile kullan\u0131labilir.<\/p>\n<p>*   <strong>Harici S\u0131r Y\u00f6netim Sistemleri:<\/strong> \u00dcretim ortamlar\u0131nda daha sa\u011flam g\u00fcvenlik i\u00e7in, HashiCorp Vault, Kubernetes Secrets veya AWS Secrets Manager gibi harici s\u0131r y\u00f6netim sistemleriyle entegrasyon \u00f6nerilir.<br \/>\n    *   <strong>Kubernetes Secrets:<\/strong> E\u011fer Jenkins&#8217;iniz Kubernetes \u00fczerinde \u00e7al\u0131\u015f\u0131yorsa, Kubernetes Secrets&#8217;\u0131 kullanarak hassas verileri g\u00fcvenli bir \u015fekilde y\u00f6netebilir ve bunlar\u0131 Jenkins konteynerlerine volume olarak veya ortam de\u011fi\u015fkenleri olarak ba\u011flayabilirsiniz.<br \/>\n    *   <strong>HashiCorp Vault:<\/strong> Vault, merkezi bir s\u0131r y\u00f6netim \u00e7\u00f6z\u00fcm\u00fc sunar. Jenkins konteyneri, Vault&#8217;tan s\u0131rlar\u0131 \u00e7ekmek i\u00e7in yap\u0131land\u0131r\u0131labilir. JCasC&#8217;nin kendisi do\u011frudan Vault entegrasyonu sunmasa da, bir ba\u015flang\u0131\u00e7 beti\u011fi veya \u00f6zel bir eklenti arac\u0131l\u0131\u011f\u0131yla bu entegrasyon sa\u011flanabilir.<\/p>\n<h3>G\u00fcvenlik En \u0130yi Uygulamalar\u0131<\/h3>\n<p>S\u0131r y\u00f6netiminin yan\u0131 s\u0131ra, Jenkins ortam\u0131n\u0131n genel g\u00fcvenli\u011fini sa\u011flamak i\u00e7in a\u015fa\u011f\u0131daki en iyi uygulamalar \u00f6nemlidir:<\/p>\n<p>*   <strong>Minimum Yetki Prensibi:<\/strong> Kullan\u0131c\u0131lara ve Jenkins agent&#8217;lar\u0131na yaln\u0131zca g\u00f6revlerini yerine getirmek i\u00e7in kesinlikle gerekli olan minimum yetkileri verin.<br \/>\n*   <strong>A\u011f \u0130zolasyonu:<\/strong> Jenkins sunucusunu ve agent&#8217;lar\u0131n\u0131, yaln\u0131zca gerekli portlar\u0131n d\u0131\u015far\u0131ya a\u00e7\u0131k oldu\u011fu izole a\u011flarda \u00e7al\u0131\u015ft\u0131r\u0131n.<br \/>\n*   <strong>SSL\/TLS Kullan\u0131m\u0131:<\/strong> Jenkins UI&#8217;\u0131na ve agent ileti\u015fimine her zaman HTTPS\/TLS \u00fczerinden eri\u015fin.<br \/>\n*   <strong>G\u00fcncel Tutma:<\/strong> Jenkins \u00e7ekirde\u011fini, eklentilerini ve Docker imajlar\u0131n\u0131 d\u00fczenli olarak g\u00fcncelleyin. G\u00fcvenlik a\u00e7\u0131klar\u0131 s\u0131k s\u0131k yamalan\u0131r.<br \/>\n*   <strong>Denetim ve Loglama:<\/strong> Jenkins loglar\u0131n\u0131 ve g\u00fcvenlik olaylar\u0131n\u0131 d\u00fczenli olarak izleyin ve merkezi bir loglama sistemine g\u00f6nderin.<br \/>\n*   <strong>Yedekleme:<\/strong> Jenkins verilerini (\u00f6zellikle <code>\/var\/jenkins_home<\/code> dizinini) d\u00fczenli olarak yedekleyin. Docker volume&#8217;leri bu konuda yard\u0131mc\u0131 olur.<\/p>\n<p>Bu g\u00fcvenlik \u00f6nlemleri, otomatikle\u015ftirilmi\u015f Jenkins ortam\u0131n\u0131z\u0131n sadece verimli de\u011fil, ayn\u0131 zamanda g\u00fcvende olmas\u0131n\u0131 da sa\u011flar.<\/p>\n<h2>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Docker ve JCasC ile Jenkins kurulumunu otomatikle\u015ftirirken, verimlili\u011fi, s\u00fcrd\u00fcr\u00fclebilirli\u011fi ve g\u00fcvenli\u011fi art\u0131rmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir.<\/p>\n<h3>Versiyon Kontrol\u00fc<\/h3>\n<p>*   <strong>Her \u015eey Kod Olarak:<\/strong> Dockerfile&#8217;lar\u0131n\u0131z, <code>docker-compose.yml<\/code> dosyalar\u0131n\u0131z, JCasC YAML dosyalar\u0131n\u0131z ve t\u00fcm Jenkinsfile&#8217;lar\u0131n\u0131z (pipeline tan\u0131mlar\u0131) Git gibi bir versiyon kontrol sisteminde saklanmal\u0131d\u0131r. Bu, t\u00fcm Jenkins altyap\u0131n\u0131z\u0131n ve konfig\u00fcrasyonlar\u0131n\u0131z\u0131n izlenebilir, denetlenebilir ve tekrarlanabilir olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Bran\u015flama ve \u0130nceleme:<\/strong> Konfig\u00fcrasyon de\u011fi\u015fiklikleri i\u00e7in standart geli\u015ftirme i\u015f ak\u0131\u015flar\u0131n\u0131 (\u00f6zellik dallar\u0131, \u00e7ekme istekleri\/birle\u015ftirme istekleri, kod incelemeleri) uygulay\u0131n. Bu, yanl\u0131\u015f yap\u0131land\u0131rmalar\u0131n \u00fcretime gitmesini engeller.<\/p>\n<h3>Mod\u00fcler JCasC Dosyalar\u0131<\/h3>\n<p>*   <strong>B\u00f6l ve Y\u00f6net:<\/strong> Tek bir b\u00fcy\u00fck <code>jenkins.yaml<\/code> dosyas\u0131 yerine, konfig\u00fcrasyonlar\u0131n\u0131z\u0131 mant\u0131ksal b\u00f6l\u00fcmlere ay\u0131rarak daha k\u00fc\u00e7\u00fck, daha y\u00f6netilebilir YAML dosyalar\u0131 olu\u015fturun (\u00f6rn. <code>security.yaml<\/code>, <code>tools.yaml<\/code>, <code>plugins.yaml<\/code>).<br \/>\n*   <strong><code>includes<\/code> Kullan\u0131m\u0131:<\/strong> JCasC, bir ana YAML dosyas\u0131ndan di\u011fer YAML dosyalar\u0131n\u0131 dahil etme yetene\u011fine sahiptir. Bu, konfig\u00fcrasyonlar\u0131n\u0131z\u0131 mod\u00fcler hale getirmenizi ve farkl\u0131 ortamlar i\u00e7in farkl\u0131 dosyalar\u0131 birle\u015ftirmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-yaml\">jenkins:\n      systemMessage: \"Ana sistem mesaj\u0131\"\n    # Di\u011fer YAML dosyalar\u0131n\u0131 dahil et\n    include:\n      - file: \"\/var\/jenkins_home\/casc_configs\/security.yaml\"\n      - file: \"\/var\/jenkins_home\/casc_configs\/tools.yaml\"<\/code><\/pre>\n<h3>Test Ortamlar\u0131<\/h3>\n<p>*   <strong>De\u011fi\u015fiklikleri Test Edin:<\/strong> JCasC veya Dockerfile&#8217;da yap\u0131lan herhangi bir de\u011fi\u015fikli\u011fi \u00f6nce bir geli\u015ftirme veya test ortam\u0131nda deneyin. \u00dcretim ortam\u0131na do\u011frudan de\u011fi\u015fiklik uygulamaktan ka\u00e7\u0131n\u0131n. Bu, beklenmedik sorunlar\u0131 \u00f6nler.<br \/>\n*   <strong>CI\/CD Pipeline&#8217;\u0131 Kullan\u0131n:<\/strong> Jenkins konfig\u00fcrasyon dosyalar\u0131n\u0131z i\u00e7in de bir CI\/CD pipeline&#8217;\u0131 olu\u015fturun. Bu pipeline, JCasC YAML dosyalar\u0131n\u0131n syntax&#8217;\u0131n\u0131 do\u011frulayabilir ve hatta bir test Jenkins \u00f6rne\u011fini aya\u011fa kald\u0131r\u0131p konfig\u00fcrasyonlar\u0131 otomatik olarak uygulayarak test edebilir.<\/p>\n<h3>Minimum Yetki Prensibi<\/h3>\n<p>*   <strong>Kullan\u0131c\u0131 ve Agent Yetkileri:<\/strong> Jenkins&#8217;te kullan\u0131c\u0131lar ve agent&#8217;lar i\u00e7in en az yetki prensibini uygulay\u0131n. Yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 izinleri verin ve gereksiz yetkileri k\u0131s\u0131tlay\u0131n.<br \/>\n*   <strong>Konteyner Yetkileri:<\/strong> Jenkins Docker konteynerini <code>root<\/code> kullan\u0131c\u0131s\u0131 yerine <code>jenkins<\/code> kullan\u0131c\u0131s\u0131 ile \u00e7al\u0131\u015ft\u0131rmaya \u00f6zen g\u00f6sterin. Gerekmedik\u00e7e <code>privileged<\/code> modunu kullanmaktan ka\u00e7\u0131n\u0131n.<\/p>\n<h3>S\u00fcrekli G\u00fcncelleme<\/h3>\n<p>*   <strong>Jenkins ve Eklentileri:<\/strong> Jenkins \u00e7ekirde\u011fini ve kullan\u0131lan t\u00fcm eklentileri d\u00fczenli olarak g\u00fcncelleyin. Bu, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapat\u0131r, yeni \u00f6zellikler sunar ve kararl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r. Dockerfile&#8217;\u0131n\u0131zdaki <code>FROM<\/code> sat\u0131r\u0131n\u0131 ve <code>plugins.txt<\/code> dosyas\u0131n\u0131 g\u00fcncel tutun.<br \/>\n*   <strong>Docker \u0130majlar\u0131:<\/strong> Temel Docker imajlar\u0131n\u0131 (\u00f6rn. <code>jenkins\/jenkins:lts<\/code>) d\u00fczenli olarak g\u00fcncelleyin.<\/p>\n<h3>Geri Alma Stratejileri<\/h3>\n<p>*   <strong>Git ile Kolay Geri Alma:<\/strong> T\u00fcm konfig\u00fcrasyonlar\u0131n\u0131z Git&#8217;te oldu\u011fu i\u00e7in, bir sorun durumunda \u00f6nceki bir stabil s\u00fcr\u00fcme geri d\u00f6nmek (git revert) olduk\u00e7a kolayd\u0131r.<br \/>\n*   <strong>Yedekleme:<\/strong> JCasC ve Docker volume&#8217;leri kurtarmay\u0131 kolayla\u015ft\u0131rsa da, periyodik olarak Jenkins&#8217;in kal\u0131c\u0131 verilerini (volume&#8217;leri) yedeklemek her zaman iyi bir uygulamad\u0131r.<\/p>\n<h3>Monitoring ve Loglama<\/h3>\n<p>*   <strong>Jenkins Loglar\u0131:<\/strong> Jenkins konteyner loglar\u0131n\u0131 (<code>docker logs jenkins-server<\/code>) ve Jenkins&#8217;in kendi i\u00e7 loglar\u0131n\u0131 d\u00fczenli olarak izleyin. Sorun giderme ve performans analizi i\u00e7in hayati \u00f6neme sahiptir.<br \/>\n*   <strong>Konteyner Kaynaklar\u0131:<\/strong> Jenkins konteynerinin CPU, bellek ve disk kullan\u0131m\u0131 gibi kaynak t\u00fcketimini izleyin. Bu, performans sorunlar\u0131n\u0131 erkenden tespit etmenize yard\u0131mc\u0131 olur.<\/p>\n<p>Bu en iyi uygulamalar\u0131 takip ederek, Docker ve JCasC ile otomatikle\u015ftirilmi\u015f Jenkins kurulumunuzu daha sa\u011flam, g\u00fcvenli ve y\u00f6netilebilir hale getirebilirsiniz.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Jenkins, modern CI\/CD s\u00fcre\u00e7lerinin temel ta\u015flar\u0131ndan biri olmaya devam ederken, geleneksel kurulum ve y\u00f6netim y\u00f6ntemlerinin getirdi\u011fi zorluklar, ekiplerin h\u0131z\u0131n\u0131 ve verimlili\u011fini olumsuz etkileyebilir. Bu makalede ele ald\u0131\u011f\u0131m\u0131z Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) yakla\u015f\u0131mlar\u0131, bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in g\u00fc\u00e7l\u00fc ve modern \u00e7\u00f6z\u00fcmler sunmaktad\u0131r.<\/p>\n<p>Docker ile Jenkins&#8217;i \u00e7al\u0131\u015ft\u0131rmak, ortam\u0131n izole, ta\u015f\u0131nabilir ve h\u0131zl\u0131 bir \u015fekilde kurulabilmesini sa\u011flarken, JCasC ise Jenkins&#8217;in t\u00fcm konfig\u00fcrasyonlar\u0131n\u0131n kod olarak tan\u0131mlanmas\u0131na, versiyon kontrol\u00fcne al\u0131nmas\u0131na ve otomatik olarak uygulanmas\u0131na olanak tan\u0131r. Bu iki teknolojinin birle\u015fimi, Jenkins altyap\u0131n\u0131z\u0131n &#8220;altyap\u0131 kod olarak&#8221; prensiplerine uygun olarak y\u00f6netilmesini sa\u011flayarak, a\u015fa\u011f\u0131daki temel faydalar\u0131 beraberinde getirir:<\/p>\n<p>*   <strong>Tutarl\u0131l\u0131k:<\/strong> Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda Jenkins konfig\u00fcrasyonlar\u0131n\u0131n tam tutarl\u0131l\u0131\u011f\u0131 garanti edilir.<br \/>\n*   <strong>H\u0131z ve Verimlilik:<\/strong> Yeni Jenkins \u00f6rnekleri saniyeler i\u00e7inde aya\u011fa kald\u0131r\u0131labilir ve manuel yap\u0131land\u0131rma s\u00fcre\u00e7leri ortadan kalkar.<br \/>\n*   <strong>G\u00fcvenilirlik:<\/strong> \u0130nsan hatas\u0131 riski azal\u0131r ve konfig\u00fcrasyonlar her zaman beklenen \u015fekilde uygulan\u0131r.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> \u0130htiya\u00e7 duyuldu\u011funda yeni Jenkins sunucular\u0131 kolayca ve h\u0131zl\u0131 bir \u015fekilde \u00e7o\u011falt\u0131labilir.<br \/>\n*   <strong>Denetlenebilirlik:<\/strong> T\u00fcm konfig\u00fcrasyon de\u011fi\u015fiklikleri versiyon kontrol sistemlerinde izlenebilir, bu da g\u00fcvenlik ve uyumluluk denetimlerini kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Felaket Kurtarma:<\/strong> Bir sorun durumunda Jenkins ortam\u0131n\u0131n h\u0131zla ve g\u00fcvenilir bir \u015fekilde yeniden olu\u015fturulmas\u0131 m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>Jenkins&#8217;in ve CI\/CD s\u00fcre\u00e7lerinin gelece\u011fi, otomasyon ve &#8220;kod olarak her \u015fey&#8221; felsefesinin benimsenmesinden ge\u00e7mektedir. Docker ve JCasC, bu felsefeyi Jenkins altyap\u0131n\u0131za entegre etmeniz i\u00e7in sa\u011flam bir temel sunar. Bu yakla\u015f\u0131mlar\u0131 benimseyerek, ekipleriniz daha h\u0131zl\u0131, daha g\u00fcvenilir ve daha y\u00f6netilebilir yaz\u0131l\u0131m geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri elde edebilirler. Jenkins kurulumunuzu ve y\u00f6netimini otomatikle\u015ftirerek, geli\u015ftiricilerin daha \u00e7ok kod yazmaya ve daha az altyap\u0131 y\u00f6netimiyle u\u011fra\u015fmaya odaklanmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu da nihayetinde daha kaliteli yaz\u0131l\u0131mlar\u0131n daha k\u0131sa s\u00fcrede pazara sunulmas\u0131na katk\u0131da bulunacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131","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":[1407],"tags":[],"class_list":{"0":"post-36850","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","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>Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme - 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\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme\" \/>\n<meta property=\"og:description\" content=\"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-23T21:41:07+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=\"27 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme\",\"datePublished\":\"2025-12-23T21:41:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/\"},\"wordCount\":4499,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/\",\"name\":\"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-23T21:41:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme\"}]},{\"@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":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme - 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\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme","og_description":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-23T21:41:07+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"27 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme","datePublished":"2025-12-23T21:41:07+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/"},"wordCount":4499,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/","name":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-23T21:41:07+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ve-jenkins-konfigurasyonunu-kod-olarak-yonetme-jcasc-ile-jenkins-kurulumunu-otomatiklestirme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker ve Jenkins Konfig\u00fcrasyonunu Kod Olarak Y\u00f6netme (JCasC) ile Jenkins Kurulumunu Otomatikle\u015ftirme"}]},{"@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\/36850","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=36850"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36850\/revisions"}],"predecessor-version":[{"id":36851,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36850\/revisions\/36851"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}