{"id":32309,"date":"2025-10-20T07:41:01","date_gmt":"2025-10-20T04:41:01","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32309"},"modified":"2025-10-20T07:41:01","modified_gmt":"2025-10-20T04:41:01","slug":"freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/","title":{"rendered":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, s\u00fcrekli entegrasyon (CI) ve s\u00fcrekli da\u011f\u0131t\u0131m (CD) pratikleri, projelerin ba\u015far\u0131s\u0131 i\u00e7in vazge\u00e7ilmez hale gelmi\u015ftir. Bu pratikler, kod de\u011fi\u015fikliklerinin d\u00fczenli olarak entegre edilmesini, otomatik testlerden ge\u00e7irilmesini ve da\u011f\u0131t\u0131ma haz\u0131r hale getirilmesini sa\u011flayarak, hatalar\u0131 erken a\u015famada tespit etmeye, geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131rmaya ve \u00fcr\u00fcn kalitesini art\u0131rmaya yard\u0131mc\u0131 olur. Buildbot, bu t\u00fcr otomasyon s\u00fcre\u00e7lerini y\u00f6netmek i\u00e7in tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc, esnek ve a\u00e7\u0131k kaynakl\u0131 bir \u00e7er\u00e7evedir. Python ile yaz\u0131lm\u0131\u015f olmas\u0131, geni\u015fletilebilirli\u011fini ve \u00f6zelle\u015ftirilebilirli\u011fini art\u0131r\u0131r.<\/p>\n<h3>S\u00fcrekli Entegrasyon ve Da\u011f\u0131t\u0131m\u0131n \u00d6nemi<\/h3>\n<p>S\u00fcrekli entegrasyon, geli\u015ftiricilerin kodlar\u0131n\u0131 g\u00fcnde birka\u00e7 kez ana depoya entegre etmeleri ve her entegrasyonun otomatik bir derleme ve test s\u00fcreciyle do\u011frulanmas\u0131 prensibine dayan\u0131r. Bu, entegrasyon sorunlar\u0131n\u0131n erken a\u015famada fark edilmesini ve \u00e7\u00f6z\u00fclmesini sa\u011flar. S\u00fcrekli da\u011f\u0131t\u0131m ise, bu entegre edilmi\u015f ve test edilmi\u015f kodun otomatik olarak \u00fcretim ortam\u0131na veya bir ara a\u015famaya da\u011f\u0131t\u0131lmas\u0131 s\u00fcrecidir. Bu iki pratik, yaz\u0131l\u0131m geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc otomatikle\u015ftirerek insan hatas\u0131n\u0131 azalt\u0131r, teslimat s\u00fcrelerini k\u0131salt\u0131r ve ekiplerin daha verimli \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131r. Buildbot gibi ara\u00e7lar, bu karma\u015f\u0131k s\u00fcre\u00e7leri y\u00f6netmek i\u00e7in merkezi bir platform sunar.<\/p>\n<h3>FreeBSD&#8217;nin Rol\u00fc<\/h3>\n<p>FreeBSD, g\u00fc\u00e7l\u00fc a\u011f yetenekleri, \u00fcst\u00fcn g\u00fcvenlik \u00f6zellikleri ve kararl\u0131l\u0131\u011f\u0131 ile sunucu ortamlar\u0131 i\u00e7in pop\u00fcler bir i\u015fletim sistemidir. Buildbot gibi kritik bir s\u00fcrekli entegrasyon sistemini bar\u0131nd\u0131rmak i\u00e7in m\u00fckemmel bir temel sa\u011flar. FreeBSD&#8217;nin ports ve packages sistemi, yaz\u0131l\u0131mlar\u0131n kolayca kurulmas\u0131na ve y\u00f6netilmesine olanak tan\u0131rken, <code>rc.d<\/code> altyap\u0131s\u0131 servislerin g\u00fcvenilir bir \u015fekilde ba\u015flat\u0131lmas\u0131n\u0131 ve durdurulmas\u0131n\u0131 sa\u011flar. Bu makalede, Buildbot&#8217;un FreeBSD \u00fczerinde nas\u0131l kurulaca\u011f\u0131n\u0131, yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ve y\u00f6netilece\u011fini ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<h3>Buildbot Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>Buildbot, yaz\u0131l\u0131m derleme, test ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini otomatikle\u015ftirmek i\u00e7in tasarlanm\u0131\u015f, da\u011f\u0131t\u0131k bir s\u00fcrekli entegrasyon sistemidir. \u00c7ok \u00e7e\u015fitli platformlarda \u00e7al\u0131\u015fabilir ve farkl\u0131 kaynak kontrol sistemleri, derleme ara\u00e7lar\u0131 ve test \u00e7er\u00e7eveleriyle entegre olabilir. Esnekli\u011fi sayesinde, basit projelerden karma\u015f\u0131k, \u00e7ok a\u015famal\u0131 derleme boru hatlar\u0131na kadar her t\u00fcrl\u00fc ihtiyaca cevap verebilir.<\/p>\n<h3>Temel Bile\u015fenler<\/h3>\n<p>Buildbot sistemi temel olarak \u00fc\u00e7 ana bile\u015fenden olu\u015fur:<br \/>\n*   <strong>Buildbot Master (Ana Sunucu):<\/strong> T\u00fcm derleme s\u00fcre\u00e7lerini koordine eden merkezi bir sunucudur. Yap\u0131land\u0131rma dosyalar\u0131n\u0131 (Python kodu olarak yaz\u0131l\u0131r), derleme kuyruklar\u0131n\u0131, planlay\u0131c\u0131lar\u0131 ve raporlama mekanizmalar\u0131n\u0131 bar\u0131nd\u0131r\u0131r. Web aray\u00fcz\u00fc arac\u0131l\u0131\u011f\u0131yla kullan\u0131c\u0131 etkile\u015fimini sa\u011flar.<br \/>\n*   <strong>Buildbot Worker (\u0130\u015f\u00e7i Sunucu):<\/strong> Master&#8217;dan derleme i\u015flerini alan ve bunlar\u0131 yerel olarak y\u00fcr\u00fcten ba\u011f\u0131ms\u0131z bir sunucudur. Kaynak kodu \u00e7eker, derlemeleri \u00e7al\u0131\u015ft\u0131r\u0131r, testleri yapar ve sonu\u00e7lar\u0131 Master&#8217;a geri g\u00f6nderir. Bir Master birden fazla Worker ile \u00e7al\u0131\u015fabilir ve bu Worker&#8217;lar farkl\u0131 i\u015fletim sistemlerinde bile olabilir.<br \/>\n*   <strong>Scheduler (Planlay\u0131c\u0131):<\/strong> Hangi ko\u015fullar alt\u0131nda hangi derlemelerin ba\u015flat\u0131laca\u011f\u0131n\u0131 belirler. Zamanlanm\u0131\u015f derlemeler, kod deposundaki de\u011fi\u015fiklikler \u00fczerine tetiklenen derlemeler veya manuel olarak ba\u015flat\u0131lan derlemeler gibi \u00e7e\u015fitli planlama stratejileri sunar.<\/p>\n<h3>Avantajlar\u0131<\/h3>\n<p>Buildbot&#8217;un tercih edilmesinin ba\u015fl\u0131ca nedenleri \u015funlard\u0131r:<br \/>\n*   <strong>Esneklik:<\/strong> Python tabanl\u0131 yap\u0131land\u0131rmas\u0131 sayesinde, neredeyse her t\u00fcrl\u00fc derleme veya test senaryosunu otomatikle\u015ftirmek m\u00fcmk\u00fcnd\u00fcr.<br \/>\n*   <strong>Da\u011f\u0131t\u0131k Mimari:<\/strong> \u0130\u015f y\u00fck\u00fcn\u00fc birden fazla Worker&#8217;a da\u011f\u0131tarak \u00f6l\u00e7eklenebilirlik ve performans sa\u011flar.<br \/>\n*   <strong>\u00c7oklu Platform Deste\u011fi:<\/strong> Worker&#8217;lar farkl\u0131 i\u015fletim sistemlerinde \u00e7al\u0131\u015fabilir, bu da platformlar aras\u0131 test ve derleme i\u00e7in idealdir.<br \/>\n*   <strong>Geni\u015fletilebilirlik:<\/strong> Eklentiler (plugins) ve \u00f6zel komut dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla kolayca geni\u015fletilebilir.<br \/>\n*   <strong>A\u00e7\u0131k Kaynak:<\/strong> Topluluk deste\u011fi ve s\u00fcrekli geli\u015ftirme ile desteklenen \u00fccretsiz bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Buildbot kurulumuna ba\u015flamadan \u00f6nce, FreeBSD sistemimizde baz\u0131 temel gereksinimleri kar\u015f\u0131lamam\u0131z gerekmektedir.<\/p>\n<h3>Sistem Gereksinimleri<\/h3>\n<p>*   <strong>\u0130\u015fletim Sistemi:<\/strong> FreeBSD 13.x veya daha yeni bir s\u00fcr\u00fcm tavsiye edilir.<br \/>\n*   <strong>RAM:<\/strong> En az 2 GB RAM, derleme i\u015flemlerinin karma\u015f\u0131kl\u0131\u011f\u0131na g\u00f6re daha fazlas\u0131 gerekebilir.<br \/>\n*   <strong>Disk Alan\u0131:<\/strong> \u0130\u015fletim sistemi, Buildbot ve derlenecek projeler i\u00e7in yeterli disk alan\u0131 (en az 20 GB).<br \/>\n*   <strong>CPU:<\/strong> En az 2 \u00e7ekirdekli bir i\u015flemci.<\/p>\n<h3>Gerekli Paketler<\/h3>\n<p>FreeBSD&#8217;nin <code>pkg<\/code> paket y\u00f6neticisini kullanarak gerekli yaz\u0131l\u0131mlar\u0131 kuraca\u011f\u0131z.<\/p>\n<h4>Python ve pip<\/h4>\n<p>Buildbot Python ile yaz\u0131ld\u0131\u011f\u0131 i\u00e7in, Python&#8217;\u0131n sistemde kurulu olmas\u0131 zorunludur. Genellikle FreeBSD&#8217;de varsay\u0131lan olarak Python&#8217;\u0131n eski bir s\u00fcr\u00fcm\u00fc bulunabilir, ancak Buildbot i\u00e7in daha yeni bir s\u00fcr\u00fcm (Python 3.8 veya \u00fczeri) ve <code>pip<\/code> paket y\u00f6neticisi \u00f6nerilir.<\/p>\n<pre><code class=\"language-bash\">sudo pkg install python3 py38-pip<\/code><\/pre>\n<h4>Git<\/h4>\n<p>Kaynak kodunu depolardan \u00e7ekmek i\u00e7in Git gereklidir.<\/p>\n<pre><code class=\"language-bash\">sudo pkg install git<\/code><\/pre>\n<h4>PostgreSQL veya SQLite (Veritaban\u0131)<\/h4>\n<p>Buildbot, derleme ge\u00e7mi\u015fi ve di\u011fer meta verileri depolamak i\u00e7in bir veritaban\u0131 kullan\u0131r. K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli kurulumlar i\u00e7in SQLite yeterli olabilirken, b\u00fcy\u00fck \u00f6l\u00e7ekli ve \u00fcretim ortamlar\u0131 i\u00e7in PostgreSQL veya MySQL gibi harici bir veritaban\u0131 sunucusu \u00f6nerilir. Bu rehberde SQLite ile ba\u015flayacak, ancak PostgreSQL kurulumunu da k\u0131saca de\u011finece\u011fiz.<\/p>\n<p>*   <strong>SQLite i\u00e7in:<\/strong> Genellikle Python ile birlikte gelir veya <code>py38-sqlite3<\/code> paketi ile kurulabilir.<br \/>\n*   <strong>PostgreSQL i\u00e7in:<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo pkg install postgresql13-server py38-psycopg2\n    sudo sysrc postgresql_enable=\"YES\"\n    sudo service postgresql initdb\n    sudo service postgresql start\n    # PostgreSQL kullan\u0131c\u0131 ve veritaban\u0131 olu\u015fturma ad\u0131mlar\u0131 ayr\u0131ca yap\u0131lmal\u0131d\u0131r.\n    # \u00d6rne\u011fin: sudo -u postgres createuser --pwprompt buildbot\n    #          sudo -u postgres createdb -O buildbot buildbotdb<\/code><\/pre>\n<h4>Di\u011fer Ba\u011f\u0131ml\u0131l\u0131klar<\/h4>\n<p>Derlenecek projenin ihtiya\u00e7 duydu\u011fu derleyiciler (GCC, Clang), make ara\u00e7lar\u0131 veya di\u011fer k\u00fct\u00fcphaneler (\u00f6rne\u011fin, Node.js, Java Development Kit) de kurulu olmal\u0131d\u0131r. Bunlar Buildbot Worker \u00fczerinde bulunmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo pkg install gmake gcc<\/code><\/pre>\n<h3>Buildbot Kurulumu<\/h3>\n<p>Buildbot&#8217;u kurmadan \u00f6nce, sistemimizde izole bir Python ortam\u0131 olu\u015fturmak en iyi uygulamad\u0131r. Bu, Buildbot&#8217;un ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n sistem genelindeki di\u011fer Python uygulamalar\u0131yla \u00e7ak\u0131\u015fmas\u0131n\u0131 \u00f6nler.<\/p>\n<h3>Python Ortam\u0131n\u0131n Haz\u0131rlanmas\u0131<\/h3>\n<p>Buildbot ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in <code>virtualenv<\/code> kullanaca\u011f\u0131z. \u00d6ncelikle, <code>virtualenv<\/code> paketini kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo pip install virtualenv<\/code><\/pre>\n<p>\u015eimdi Buildbot i\u00e7in bir kullan\u0131c\u0131 olu\u015ftural\u0131m ve bu kullan\u0131c\u0131n\u0131n ev dizininde bir <code>virtualenv<\/code> ortam\u0131 olu\u015ftural\u0131m. G\u00fcvenlik ve d\u00fczen a\u00e7\u0131s\u0131ndan Buildbot&#8217;u ayr\u0131 bir kullan\u0131c\u0131 alt\u0131nda \u00e7al\u0131\u015ft\u0131rmak \u00f6nerilir.<\/p>\n<pre><code class=\"language-bash\">sudo adduser\n<h2>Kullan\u0131c\u0131 ad\u0131: buildbot<\/h2>\n<h2>Shell: \/bin\/sh (veya tercih etti\u011finiz bir shell)<\/h2>\n<h2>Di\u011fer se\u00e7enekleri varsay\u0131lan b\u0131rakabilirsiniz.<\/h2>\n\nsudo su - buildbot\nmkdir ~\/buildbot_env\nvirtualenv ~\/buildbot_env\nsource ~\/buildbot_env\/bin\/activate<\/code><\/pre>\n<p><code>source ~\/buildbot_env\/bin\/activate<\/code> komutu, Buildbot sanal ortam\u0131n\u0131 etkinle\u015ftirir. Bundan sonra \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z <code>pip<\/code> komutlar\u0131, paketleri bu sanal ortama kuracakt\u0131r. Ortamdan \u00e7\u0131kmak i\u00e7in <code>deactivate<\/code> komutunu kullanabilirsiniz.<\/p>\n<h3>Buildbot Paketlerinin Kurulumu<\/h3>\n<p>Sanal ortam\u0131m\u0131z etkinle\u015ftirildikten sonra, Buildbot Master ve Worker paketlerini kurabiliriz. Bu rehberde Master ve Worker&#8217;\u0131 ayn\u0131 FreeBSD sunucusunda kuraca\u011f\u0131z, ancak farkl\u0131 sunucularda da olabilirler.<\/p>\n<pre><code class=\"language-bash\"># Sanal ortam etkinle\u015ftirilmi\u015fken (source ~\/buildbot_env\/bin\/activate)\npip install 'buildbot[sqlite]'\npip install buildbot-worker<\/code><\/pre>\n<p><code>buildbot[sqlite]<\/code> ifadesi, Buildbot&#8217;u SQLite veritaban\u0131 deste\u011fiyle kurar. E\u011fer PostgreSQL kullanacaksan\u0131z, <code>pip install 'buildbot[postgres]'<\/code> kullanmal\u0131s\u0131n\u0131z.<\/p>\n<h3>Buildbot Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Buildbot kurulumu tamamland\u0131ktan sonra, sistemimizi \u00e7al\u0131\u015ft\u0131rmak i\u00e7in yap\u0131land\u0131rmam\u0131z gerekir. Yap\u0131land\u0131rma, Buildbot Master&#8217;\u0131n nas\u0131l davranaca\u011f\u0131n\u0131, hangi Worker&#8217;lar\u0131 kullanaca\u011f\u0131n\u0131, hangi projeleri derleyece\u011fini ve nas\u0131l raporlama yapaca\u011f\u0131n\u0131 belirler.<\/p>\n<h3>Genel Bak\u0131\u015f<\/h3>\n<p>Buildbot Master&#8217;\u0131n yap\u0131land\u0131rmas\u0131, bir Python dosyas\u0131 olan <code>master.cfg<\/code> \u00fczerinden yap\u0131l\u0131r. Bu dosya, Buildbot&#8217;un t\u00fcm davran\u0131\u015flar\u0131n\u0131 tan\u0131mlayan bir dizi Python nesnesi i\u00e7erir.<\/p>\n<h3>Dizin Yap\u0131s\u0131<\/h3>\n<p>Buildbot i\u00e7in d\u00fczenli bir dizin yap\u0131s\u0131 olu\u015fturmak, y\u00f6netimi kolayla\u015ft\u0131r\u0131r. <code>buildbot<\/code> kullan\u0131c\u0131s\u0131n\u0131n ev dizininde <code>master<\/code> ve <code>worker<\/code> dizinleri olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\"># buildbot kullan\u0131c\u0131s\u0131 olarak\ncd ~\nmkdir master\nmkdir worker<\/code><\/pre>\n<h3>Buildbot Master Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Master&#8217;\u0131 ba\u015flatmadan \u00f6nce, temel bir yap\u0131land\u0131rma dosyas\u0131 olu\u015fturmam\u0131z gerekiyor.<\/p>\n<h3>Master Olu\u015fturma<\/h3>\n<p><code>buildbot create-master<\/code> komutu, <code>master<\/code> dizini i\u00e7inde temel bir <code>master.cfg<\/code> dosyas\u0131 ve di\u011fer gerekli dosyalar\u0131 olu\u015fturur.<\/p>\n<pre><code class=\"language-bash\"># buildbot kullan\u0131c\u0131s\u0131, sanal ortam etkinle\u015ftirilmi\u015fken\ncd ~\/master\nbuildbot create-master .<\/code><\/pre>\n<p>Bu komut, ge\u00e7erli dizinde bir Buildbot Master \u00f6rne\u011fi olu\u015fturur. <code>.env<\/code> ve <code>master.cfg.sample<\/code> gibi dosyalar olu\u015facakt\u0131r. <code>master.cfg.sample<\/code> dosyas\u0131n\u0131 <code>master.cfg<\/code> olarak kopyalayarak d\u00fczenlemeye ba\u015flayaca\u011f\u0131z.<\/p>\n<pre><code class=\"language-bash\">cp master.cfg.sample master.cfg<\/code><\/pre>\n<h3><code>master.cfg<\/code> Dosyas\u0131n\u0131n D\u00fczenlenmesi<\/h3>\n<p><code>master.cfg<\/code> dosyas\u0131, Buildbot&#8217;un kalbidir. Bu dosya, Python s\u00f6zdizimini kullanarak Buildbot&#8217;un t\u00fcm y\u00f6nlerini tan\u0131mlar. Bir metin d\u00fczenleyici ile <code>~\/master\/master.cfg<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n.<\/p>\n<pre><code class=\"language-bash\"># nano veya vi kullanabilirsiniz\nnano ~\/master\/master.cfg<\/code><\/pre>\n<p>\u0130\u015fte temel bir <code>master.cfg<\/code> dosyas\u0131nda bulunmas\u0131 gereken baz\u0131 \u00f6nemli b\u00f6l\u00fcmler ve \u00f6rnek yap\u0131land\u0131rmalar:<\/p>\n<h4>Workers Tan\u0131mlama<\/h4>\n<p>Master, derleme i\u015flerini Worker&#8217;lara atar. Her Worker&#8217;\u0131n benzersiz bir ad\u0131 ve Master ile ileti\u015fim kurmak i\u00e7in kullan\u0131lan bir \u015fifresi olmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-python\"># master.cfg i\u00e7inde bir yere ekleyin\nfrom buildbot.worker import Worker\nc['workers'] = [\n    Worker(\"freebsd-worker-1\", \"sifrenizburaya\")\n]<\/code><\/pre>\n<p>Burada &#8220;freebsd-worker-1&#8221;, Worker&#8217;\u0131n ad\u0131, &#8220;sifrenizburaya&#8221; ise Master ile Worker aras\u0131nda payla\u015f\u0131lan gizli \u015fifredir.<\/p>\n<h4>Schedulers Tan\u0131mlama<\/h4>\n<p>Schedulers, derlemelerin ne zaman ve hangi ko\u015fullar alt\u0131nda ba\u015flat\u0131laca\u011f\u0131n\u0131 belirler. En yayg\u0131n olanlar\u0131 <code>ForceScheduler<\/code> (manuel tetikleme), <code>SingleBranchScheduler<\/code> (belirli bir daldaki kod de\u011fi\u015fiklikleri) ve <code>Nightly<\/code> (zamanlanm\u0131\u015f) planlay\u0131c\u0131lard\u0131r.<\/p>\n<pre><code class=\"language-python\"># master.cfg i\u00e7inde bir yere ekleyin\nfrom buildbot.schedulers.basic import SingleBranchScheduler\nfrom buildbot.schedulers.forcesched import ForceScheduler\nfrom buildbot.changes.gitpoller import GitPoller\nfrom buildbot.www.hooks.github import GitHubEventHandler\n\nc['schedulers'] = [\n    SingleBranchScheduler(\n        name=\"main_branch_build\",\n        change_filter=util.ChangeFilter(branch='main'),\n        treeStableTimer=None, # De\u011fi\u015fiklik geldi\u011fi anda tetikle\n        builderNames=[\"freebsd-project-builder\"]\n    ),\n    ForceScheduler(\n        name=\"force_build\",\n        builderNames=[\"freebsd-project-builder\"]\n    )\n]\n\n<h2>GitHub entegrasyonu i\u00e7in (opsiyonel)<\/h2>\n<h2>c['www'].update({<\/h2>\n<h2>'change_hook_dialects': {<\/h2>\n<h2>'github': {<\/h2>\n<h2>'secret': 'YOUR_GITHUB_WEBHOOK_SECRET'<\/h2>\n<h2>}<\/h2>\n<h2>}<\/h2>\n<h2>})<\/h2>\n<h2>c['services'].append(GitHubEventHandler(<\/h2>\n<h2>master=c,<\/h2>\n<h2>secret='YOUR_GITHUB_WEBHOOK_SECRET',<\/h2>\n<h2>builderNames=['freebsd-project-builder']<\/h2>\n<h2>))<\/h2>\n\n<h2>Git deposunu d\u00fczenli aral\u0131klarla kontrol etmek i\u00e7in (alternatif)<\/h2>\nc['services'].append(GitPoller(\n    'https:\/\/github.com\/buildbot\/hello-world.git', # Kendi depo URL'nizi girin\n    pollinterval=300, # 5 dakikada bir kontrol et\n    branches=['main'],\n    project='HelloWorld',\n    # username='git_user', # \u00d6zel depolar i\u00e7in\n    # password='git_password', # \u00d6zel depolar i\u00e7in\n    # buildbotURL='http:\/\/localhost:8010\/', # Webhook i\u00e7in gerekli olabilir\n))<\/code><\/pre>\n<p><code>SingleBranchScheduler<\/code>, <code>main<\/code> dal\u0131ndaki de\u011fi\u015fiklikleri izlerken, <code>ForceScheduler<\/code> web aray\u00fcz\u00fcnden manuel tetiklemeye izin verir. <code>GitPoller<\/code> ise belirli aral\u0131klarla Git deposunu kontrol ederek de\u011fi\u015fiklikleri alg\u0131lar.<\/p>\n<h4>Builders Tan\u0131mlama<\/h4>\n<p>Builders, Master&#8217;\u0131n Worker&#8217;lara atayaca\u011f\u0131 ger\u00e7ek derleme i\u015flerini tan\u0131mlar. Her Builder, bir veya daha fazla Worker \u00fczerinde \u00e7al\u0131\u015fabilir ve bir dizi &#8220;step&#8221; (ad\u0131m) i\u00e7erir.<\/p>\n<pre><code class=\"language-python\"># master.cfg i\u00e7inde bir yere ekleyin\nfrom buildbot.config import BuilderConfig\nfrom buildbot.steps.source.git import Git\nfrom buildbot.steps.shell import ShellCommand\nfrom buildbot.steps.worker import SetPropertyFromWorker\n\nc['builders'] = [\n    util.BuilderConfig(\n        name=\"freebsd-project-builder\",\n        workerNames=[\"freebsd-worker-1\"],\n        factory=util.BuildFactory([\n            Git(repourl='https:\/\/github.com\/buildbot\/hello-world.git', branch='main'),\n            ShellCommand(command=[\"ls\", \"-la\"]),\n            ShellCommand(command=[\"python3\", \"setup.py\", \"test\"]),\n            ShellCommand(command=[\"python3\", \"setup.py\", \"install\"]),\n            # \u00d6rnek bir derleme ad\u0131m\u0131:\n            # ShellCommand(command=[\"make\"]),\n            # ShellCommand(command=[\"make\", \"test\"]),\n            # ShellCommand(command=[\"make\", \"install\"]),\n        ])\n    )\n]<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>freebsd-project-builder<\/code> ad\u0131nda bir Builder tan\u0131mlanm\u0131\u015ft\u0131r. Bu Builder, <code>freebsd-worker-1<\/code> \u00fczerinde \u00e7al\u0131\u015facak ve \u00f6nce Git deposundan kodu \u00e7ekecek, ard\u0131ndan <code>ls -la<\/code> komutunu \u00e7al\u0131\u015ft\u0131racak, sonra <code>setup.py test<\/code> ve <code>setup.py install<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131racakt\u0131r.<\/p>\n<h4>Reporters (Bildirimciler)<\/h4>\n<p>Derleme sonu\u00e7lar\u0131n\u0131 e-posta, Slack veya di\u011fer hizmetlere bildirmek i\u00e7in Reporters kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-python\"># master.cfg i\u00e7inde bir yere ekleyin\nfrom buildbot.reporters.mail import MailNotifier\nfrom buildbot.reporters.base import ReporterBase\nfrom buildbot.reporters.github import GitHubStatusPush\n\n<h2>E-posta bildirimi (\u00f6rnek)<\/h2>\n<h2>c['services'].append(MailNotifier(<\/h2>\n<h2>fromaddr=\"buildbot@example.com\",<\/h2>\n<h2>sendto=[\"devteam@example.com\"],<\/h2>\n<h2>mode=\"failing\", # Sadece ba\u015far\u0131s\u0131z derlemelerde bildirim g\u00f6nder<\/h2>\n<h2>smtp_host=\"localhost\",<\/h2>\n<h2>smtp_port=25,<\/h2>\n<h2># smtp_user=\"user\",<\/h2>\n<h2># smtp_password=\"password\",<\/h2>\n<h2># use_tls=True<\/h2>\n<h2>))<\/h2>\n\n<h2>GitHub durum bildirimi (opsiyonel)<\/h2>\n<h2>c['services'].append(GitHubStatusPush(<\/h2>\n<h2>oauth_token=\"YOUR_GITHUB_OAUTH_TOKEN\", # GitHub'dan al\u0131nacak ki\u015fisel eri\u015fim jetonu<\/h2>\n<h2>context=\"Buildbot CI\",<\/h2>\n<h2>verbose=True<\/h2>\n<h2>))<\/code><\/pre>\n<\/h2>\n<h4>Kimlik Do\u011frulama ve Yetkilendirme<\/h4>\n<p>Web aray\u00fcz\u00fcne eri\u015fimi k\u0131s\u0131tlamak i\u00e7in kimlik do\u011frulama ve yetkilendirme yap\u0131land\u0131r\u0131labilir.<\/p>\n<pre><code class=\"language-python\"># master.cfg i\u00e7inde bir yere ekleyin\nfrom buildbot.www.auth import LocalAuth\nfrom buildbot.www.authz import Authz\n\nc['www']['auth'] = LocalAuth([\n    ('admin', 'adminpassword') # Kullan\u0131c\u0131 ad\u0131 ve \u015fifre\n])\n\nc['www']['authz'] = Authz(\n    allowRules=[\n        util.AnyEndpointMatcher(role=\"admin\"),\n        util.AnyControlEndpointMatcher(role=\"admin\"),\n        util.AnyViewEndpointMatcher(role=\"admin\"),\n        util.AnyEndpointMatcher(role=\"users\"),\n        util.AnyControlEndpointMatcher(role=\"users\"),\n        util.AnyViewEndpointMatcher(role=\"users\"),\n    ],\n    roleMatchers=[\n        util.RolesFromUsername(roles=['admin'], usernames=['admin']),\n        util.RolesFromUsername(roles=['users'], usernames=['guest']),\n    ]\n)<\/code><\/pre>\n<h4>Veritaban\u0131 Yap\u0131land\u0131rmas\u0131<\/h4>\n<p><code>master.cfg<\/code> dosyas\u0131n\u0131n en ba\u015f\u0131nda veya uygun bir yerde veritaban\u0131 yap\u0131land\u0131rmas\u0131 bulunur. SQLite i\u00e7in varsay\u0131lan olarak <code>sqlite:\/\/\/state.sqlite<\/code> kullan\u0131l\u0131r. PostgreSQL i\u00e7in \u015f\u00f6yle bir yap\u0131land\u0131rma gereklidir:<\/p>\n<pre><code class=\"language-python\"># master.cfg i\u00e7inde c['db'] = ... sat\u0131r\u0131n\u0131 d\u00fczenleyin\n<h2>SQLite i\u00e7in:<\/h2>\nc['db'] = {\n    'db_url': \"sqlite:\/\/\/state.sqlite\",\n}\n\n<h2>PostgreSQL i\u00e7in (\u00f6rnek):<\/h2>\n<h2>c['db'] = {<\/h2>\n<h2>'db_url': \"postgresql:\/\/buildbot:sifreniz@localhost\/buildbotdb\",<\/h2>\n<h2>}<\/code><\/pre>\n<\/h2>\n<p><code>master.cfg<\/code> dosyas\u0131n\u0131 kaydettikten sonra, yap\u0131land\u0131rma dosyas\u0131nda bir hata olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek iyi bir uygulamad\u0131r:<\/p>\n<pre><code class=\"language-bash\"># buildbot kullan\u0131c\u0131s\u0131, sanal ortam etkinle\u015ftirilmi\u015fken\ncd ~\/master\nbuildbot checkconfig .<\/code><\/pre>\n<p>E\u011fer \u00e7\u0131kt\u0131 <code>Configuration OK<\/code> ise, yap\u0131land\u0131rman\u0131z do\u011fru demektir.<\/p>\n<h3>Master&#8217;\u0131 Ba\u015flatma ve Y\u00f6netme<\/h3>\n<p>Master&#8217;\u0131 manuel olarak ba\u015flatabiliriz:<\/p>\n<pre><code class=\"language-bash\"># buildbot kullan\u0131c\u0131s\u0131, sanal ortam etkinle\u015ftirilmi\u015fken\ncd ~\/master\nbuildbot start .<\/code><\/pre>\n<p>Master&#8217;\u0131 durdurmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">cd ~\/master\nbuildbot stop .<\/code><\/pre>\n<p>Master&#8217;\u0131n durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">cd ~\/master\nbuildbot status .<\/code><\/pre>\n<h4>Servis Olarak \u00c7al\u0131\u015ft\u0131rma (rc.d script)<\/h4>\n<p>\u00dcretim ortam\u0131nda Buildbot Master&#8217;\u0131 bir servis olarak \u00e7al\u0131\u015ft\u0131rmak esast\u0131r. FreeBSD&#8217;nin <code>rc.d<\/code> sistemi bunun i\u00e7in idealdir.<br \/>\n\u00d6ncelikle, <code>buildbot<\/code> kullan\u0131c\u0131s\u0131 i\u00e7in sanal ortam yolunu i\u00e7eren bir <code>buildbot_master_wrapper.sh<\/code> dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\"># root olarak veya sudo ile\nsudo nano \/usr\/local\/etc\/rc.d\/buildbot_master<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi d\u00fczenleyin:<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/sh\n\n<h2>PROVIDE: buildbot_master<\/h2>\n<h2>REQUIRE: DAEMON<\/h2>\n<h2>KEYWORD: shutdown<\/h2>\n\n. \/etc\/rc.subr\n\nname=\"buildbot_master\"\nrcvar=\"buildbot_master_enable\"\n\nbuildbot_user=\"buildbot\"\nbuildbot_home=\"\/home\/buildbot\"\nbuildbot_master_dir=\"${buildbot_home}\/master\"\nbuildbot_env=\"${buildbot_home}\/buildbot_env\"\ncommand=\"\/usr\/bin\/env\"\ncommand_args=\"BUILDMASTER_CONFIG=${buildbot_master_dir}\/master.cfg ${buildbot_env}\/bin\/buildbot\"\n\npidfile=\"${buildbot_master_dir}\/twistd.pid\"\nextra_commands=\"reload\"\n\nload_rc_config $name\n\nbuildbot_master_enable=${buildbot_master_enable:-\"NO\"}\n\nstart_cmd=\"${command} ${command_args} start --nodaemon --logfile=${buildbot_master_dir}\/twistd.log --pidfile=${pidfile}\"\nstop_cmd=\"${command} ${command_args} stop --pidfile=${pidfile}\"\nstatus_cmd=\"${command} ${command_args} status --pidfile=${pidfile}\"\nreload_cmd=\"${command} ${command_args} reconfig --config=${buildbot_master_dir}\/master.cfg\"\n\nrun_rc_command \"$@\"<\/code><\/pre>\n<p>Dosyay\u0131 kaydedin ve \u00e7al\u0131\u015ft\u0131r\u0131labilir yap\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo chmod +x \/usr\/local\/etc\/rc.d\/buildbot_master<\/code><\/pre>\n<p><code>rc.conf<\/code> dosyas\u0131na Buildbot Master&#8217;\u0131 etkinle\u015ftirmek i\u00e7in bir sat\u0131r ekleyin:<\/p>\n<pre><code class=\"language-bash\">sudo sysrc buildbot_master_enable=\"YES\"<\/code><\/pre>\n<p>\u015eimdi Master&#8217;\u0131 ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service buildbot_master start<\/code><\/pre>\n<p>Bu, Buildbot Master&#8217;\u0131 sistem ba\u015flang\u0131c\u0131nda otomatik olarak ba\u015flat\u0131lacak \u015fekilde ayarlar.<\/p>\n<h3>Buildbot Worker Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>Buildbot Worker, Master&#8217;dan ald\u0131\u011f\u0131 derleme g\u00f6revlerini \u00e7al\u0131\u015ft\u0131ran ba\u011f\u0131ms\u0131z bir s\u00fcre\u00e7tir.<\/p>\n<h3>Worker Olu\u015fturma<\/h3>\n<p>Worker&#8217;\u0131 olu\u015fturmak i\u00e7in <code>buildbot-worker create-worker<\/code> komutunu kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-bash\"># buildbot kullan\u0131c\u0131s\u0131, sanal ortam etkinle\u015ftirilmi\u015fken\ncd ~\/worker\nbuildbot-worker create-worker . localhost:9989 freebsd-worker-1 sifrenizburaya<\/code><\/pre>\n<p>Burada:<br \/>\n*   <code>.<\/code>: Worker dizini.<br \/>\n*   <code>localhost:9989<\/code>: Master&#8217;\u0131n adresi ve portu (varsay\u0131lan Buildbot portu 9989&#8217;dur). E\u011fer Master farkl\u0131 bir sunucuda ise, <code>master_ip_adresi:9989<\/code> \u015feklinde belirtmelisiniz.<br \/>\n*   <code>freebsd-worker-1<\/code>: Worker&#8217;\u0131n ad\u0131. Bu, <code>master.cfg<\/code> dosyas\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131z Worker ad\u0131 ile e\u015fle\u015fmelidir.<br \/>\n*   <code>sifrenizburaya<\/code>: Master ile Worker aras\u0131nda payla\u015f\u0131lan \u015fifre. Bu da <code>master.cfg<\/code> dosyas\u0131ndaki \u015fifre ile ayn\u0131 olmal\u0131d\u0131r.<\/p>\n<p>Bu komut, Worker dizini i\u00e7inde <code>buildbot.tac<\/code> gibi gerekli dosyalar\u0131 olu\u015fturur.<\/p>\n<h3>Worker&#8217;\u0131 Ba\u015flatma ve Y\u00f6netme<\/h3>\n<p>Worker&#8217;\u0131 manuel olarak ba\u015flatmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\"># buildbot kullan\u0131c\u0131s\u0131, sanal ortam etkinle\u015ftirilmi\u015fken\ncd ~\/worker\nbuildbot-worker start .<\/code><\/pre>\n<p>Worker&#8217;\u0131 durdurmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">cd ~\/worker\nbuildbot-worker stop .<\/code><\/pre>\n<p>Worker&#8217;\u0131n durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">cd ~\/worker\nbuildbot-worker status .<\/code><\/pre>\n<h4>Servis Olarak \u00c7al\u0131\u015ft\u0131rma (rc.d script)<\/h4>\n<p>Buildbot Worker&#8217;\u0131 da Master gibi bir <code>rc.d<\/code> servisi olarak \u00e7al\u0131\u015ft\u0131rmak iyi bir uygulamad\u0131r.<\/p>\n<pre><code class=\"language-bash\"># root olarak veya sudo ile\nsudo nano \/usr\/local\/etc\/rc.d\/buildbot_worker<\/code><\/pre>\n<p>\u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi d\u00fczenleyin:<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/sh\n\n<h2>PROVIDE: buildbot_worker<\/h2>\n<h2>REQUIRE: DAEMON<\/h2>\n<h2>KEYWORD: shutdown<\/h2>\n\n. \/etc\/rc.subr\n\nname=\"buildbot_worker\"\nrcvar=\"buildbot_worker_enable\"\n\nbuildbot_user=\"buildbot\"\nbuildbot_home=\"\/home\/buildbot\"\nbuildbot_worker_dir=\"${buildbot_home}\/worker\"\nbuildbot_env=\"${buildbot_home}\/buildbot_env\"\ncommand=\"\/usr\/bin\/env\"\ncommand_args=\"${buildbot_env}\/bin\/buildbot-worker\"\n\npidfile=\"${buildbot_worker_dir}\/twistd.pid\"\n\nload_rc_config $name\n\nbuildbot_worker_enable=${buildbot_worker_enable:-\"NO\"}\n\nstart_cmd=\"${command} ${command_args} start --nodaemon --logfile=${buildbot_worker_dir}\/twistd.log --pidfile=${pidfile} ${buildbot_worker_dir}\"\nstop_cmd=\"${command} ${command_args} stop --pidfile=${pidfile} ${buildbot_worker_dir}\"\nstatus_cmd=\"${command} ${command_args} status --pidfile=${pidfile} ${buildbot_worker_dir}\"\n\nrun_rc_command \"$@\"<\/code><\/pre>\n<p>Dosyay\u0131 kaydedin ve \u00e7al\u0131\u015ft\u0131r\u0131labilir yap\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo chmod +x \/usr\/local\/etc\/rc.d\/buildbot_worker<\/code><\/pre>\n<p><code>rc.conf<\/code> dosyas\u0131na Buildbot Worker&#8217;\u0131 etkinle\u015ftirmek i\u00e7in bir sat\u0131r ekleyin:<\/p>\n<pre><code class=\"language-bash\">sudo sysrc buildbot_worker_enable=\"YES\"<\/code><\/pre>\n<p>\u015eimdi Worker&#8217;\u0131 ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service buildbot_worker start<\/code><\/pre>\n<h3>Buildbot Aray\u00fcz\u00fc ve Kullan\u0131m\u0131<\/h3>\n<p>Buildbot Master ba\u015far\u0131l\u0131 bir \u015fekilde ba\u015flat\u0131ld\u0131ktan sonra, web aray\u00fcz\u00fcne eri\u015febilirsiniz.<\/p>\n<h3>Web Aray\u00fcz\u00fcne Eri\u015fim<\/h3>\n<p>Varsay\u0131lan olarak, Buildbot web aray\u00fcz\u00fc 8010 portundan yay\u0131n yapar. Taray\u0131c\u0131n\u0131zdan <code>http:\/\/<FreeBSD_sunucu_IP_adresi>:8010<\/code> adresine giderek eri\u015febilirsiniz. E\u011fer <code>master.cfg<\/code> dosyas\u0131nda kimlik do\u011frulama yap\u0131land\u0131rd\u0131ysan\u0131z, giri\u015f yapman\u0131z istenecektir.<\/p>\n<p>Web aray\u00fcz\u00fc, \u00e7al\u0131\u015fan derlemeleri, ge\u00e7mi\u015f derlemeleri, Worker durumlar\u0131n\u0131, planlay\u0131c\u0131lar\u0131 ve genel sistem durumunu g\u00f6steren kapsaml\u0131 bir g\u00f6r\u00fcn\u00fcm sunar.<\/p>\n<h3>Yap\u0131land\u0131rma De\u011fi\u015fiklikleri ve Yeniden Y\u00fckleme<\/h3>\n<p><code>master.cfg<\/code> dosyas\u0131nda herhangi bir de\u011fi\u015fiklik yapt\u0131\u011f\u0131n\u0131zda, Master&#8217;\u0131 yeniden ba\u015flatmak yerine <code>reconfig<\/code> komutunu kullanarak yap\u0131land\u0131rmay\u0131 yeniden y\u00fckleyebilirsiniz. Bu, \u00e7al\u0131\u015fan derlemelerin kesintiye u\u011framamas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-bash\"># buildbot kullan\u0131c\u0131s\u0131, sanal ortam etkinle\u015ftirilmi\u015fken\ncd ~\/master\nbuildbot reconfig .<\/code><\/pre>\n<p>E\u011fer Master&#8217;\u0131 <code>rc.d<\/code> servisi olarak \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z:<\/p>\n<pre><code class=\"language-bash\">sudo service buildbot_master reload<\/code><\/pre>\n<h3>Derleme S\u00fcre\u00e7lerini \u0130zleme<\/h3>\n<p>Web aray\u00fcz\u00fcnde &#8220;Builders&#8221; sekmesi alt\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131z Builder&#8217;lar\u0131 g\u00f6receksiniz. Bir Builder&#8217;a t\u0131klayarak o Builder&#8217;\u0131n ge\u00e7mi\u015f derlemelerini ve mevcut durumunu inceleyebilirsiniz. Her derleme i\u00e7in ayr\u0131nt\u0131l\u0131 loglar, hangi ad\u0131mlar\u0131n ba\u015far\u0131yla tamamland\u0131\u011f\u0131 veya nerede hata olu\u015ftu\u011fu gibi bilgiler sunulur.<\/p>\n<h3>Kullan\u0131c\u0131 ve Rol Y\u00f6netimi<\/h3>\n<p><code>master.cfg<\/code> dosyas\u0131nda tan\u0131mlad\u0131\u011f\u0131n\u0131z <code>LocalAuth<\/code> ve <code>Authz<\/code> ayarlar\u0131 ile web aray\u00fcz\u00fcne kimlerin eri\u015febilece\u011fini ve hangi i\u015flemleri yapabilece\u011fini kontrol edebilirsiniz. Daha geli\u015fmi\u015f senaryolar i\u00e7in LDAP veya OAuth gibi harici kimlik do\u011frulama sa\u011flay\u0131c\u0131lar\u0131yla entegrasyon m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h3>Geli\u015fmi\u015f Yap\u0131land\u0131rma ve Entegrasyonlar<\/h3>\n<p>Buildbot&#8217;un g\u00fcc\u00fc, esnek yap\u0131land\u0131rma se\u00e7eneklerinde ve di\u011fer ara\u00e7larla entegrasyon yetene\u011finde yatar.<\/p>\n<h3>Kaynak Kontrol Sistemleri (Source Control Systems)<\/h3>\n<p>Buildbot, Git, Subversion (SVN), Mercurial ve Perforce gibi pop\u00fcler VCS&#8217;lerle entegre olabilir. <code>GitPoller<\/code> veya <code>GitHubEventHandler<\/code> gibi servisler arac\u0131l\u0131\u011f\u0131yla kod de\u011fi\u015fikliklerini otomatik olarak alg\u0131layabilir ve derlemeleri tetikleyebilir.<\/p>\n<h3>Test \u00c7er\u00e7eveleri<\/h3>\n<p>Buildbot, Python&#8217;\u0131n <code>unittest<\/code>, <code>pytest<\/code>, Java&#8217;n\u0131n <code>JUnit<\/code>, JavaScript&#8217;in <code>Jest<\/code> gibi \u00e7e\u015fitli test \u00e7er\u00e7evelerinin \u00e7\u0131kt\u0131lar\u0131n\u0131 i\u015fleyebilir. Test sonu\u00e7lar\u0131n\u0131 web aray\u00fcz\u00fcnde g\u00f6stererek geli\u015ftiricilere h\u0131zl\u0131 geri bildirim sa\u011flar. <code>ShellCommand<\/code> ad\u0131mlar\u0131 aras\u0131na test komutlar\u0131n\u0131z\u0131 ekleyerek bu entegrasyonu sa\u011flayabilirsiniz.<\/p>\n<h3>Bildirimler<\/h3>\n<p><code>MailNotifier<\/code> ile e-posta bildirimleri g\u00f6nderebilirsiniz. Ayr\u0131ca, <code>buildbot-slack<\/code> eklentisi ile Slack&#8217;e, <code>buildbot-telegram<\/code> ile Telegram&#8217;a bildirim g\u00f6ndermek de m\u00fcmk\u00fcnd\u00fcr. GitHub&#8217;a derleme durumu g\u00f6ndermek i\u00e7in <code>GitHubStatusPush<\/code> kullan\u0131lm\u0131\u015ft\u0131r.<\/p>\n<h3>Paralel Derlemeler<\/h3>\n<p>Birden fazla Worker&#8217;a sahipseniz, Buildbot farkl\u0131 Builder&#8217;lar\u0131 veya ayn\u0131 Builder&#8217;\u0131n farkl\u0131 derlemelerini ayn\u0131 anda farkl\u0131 Worker&#8217;lar \u00fczerinde \u00e7al\u0131\u015ft\u0131rarak paralel derlemeleri destekler. Bu, derleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131saltabilir.<\/p>\n<h3>Sorun Giderme ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Herhangi bir karma\u015f\u0131k sistemde oldu\u011fu gibi, Buildbot kurulumunda da sorunlarla kar\u015f\u0131la\u015fabilirsiniz. \u0130\u015fte baz\u0131 yayg\u0131n sorun giderme y\u00f6ntemleri ve ipu\u00e7lar\u0131:<\/p>\n<h3>Log Dosyalar\u0131<\/h3>\n<p>Buildbot Master ve Worker&#8217;\u0131n log dosyalar\u0131, sorun gidermenin ilk ad\u0131m\u0131d\u0131r.<br \/>\n*   <strong>Master Loglar\u0131:<\/strong> <code>~\/master\/twistd.log<\/code><br \/>\n*   <strong>Worker Loglar\u0131:<\/strong> <code>~\/worker\/twistd.log<\/code><br \/>\nBu log dosyalar\u0131, hatalar\u0131n nedenlerini ve derleme s\u00fcre\u00e7lerinin ayr\u0131nt\u0131lar\u0131n\u0131 i\u00e7erir.<\/p>\n<h3>Yayg\u0131n Hatalar<\/h3>\n<p>*   <strong>Worker Ba\u011flant\u0131 Sorunlar\u0131:<\/strong> Master ve Worker aras\u0131ndaki \u015fifrenin e\u015fle\u015fti\u011finden emin olun. Master&#8217;\u0131n IP adresi ve portunun do\u011fru oldu\u011fundan emin olun. G\u00fcvenlik duvar\u0131 (firewall) ayarlar\u0131n\u0131 kontrol edin (9989 portu a\u00e7\u0131k olmal\u0131).<br \/>\n*   <strong>Yap\u0131land\u0131rma Hatalar\u0131 (<code>master.cfg<\/code>):<\/strong> <code>buildbot checkconfig .<\/code> komutunu kullanarak yap\u0131land\u0131rma dosyas\u0131ndaki s\u00f6zdizimi hatalar\u0131n\u0131 kontrol edin.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Eksiklikleri:<\/strong> Worker \u00fczerinde derleme ad\u0131mlar\u0131n\u0131n gerektirdi\u011fi t\u00fcm yaz\u0131l\u0131mlar\u0131n (derleyiciler, k\u00fct\u00fcphaneler, Python paketleri vb.) kurulu oldu\u011fundan emin olun.<br \/>\n*   <strong>\u0130zin Sorunlar\u0131:<\/strong> Buildbot kullan\u0131c\u0131s\u0131n\u0131n gerekli dosya ve dizinlere yazma\/okuma izinlerine sahip oldu\u011fundan emin olun. \u00d6zellikle Worker&#8217;\u0131n kaynak kodunu \u00e7ekmek veya derleme \u00e7\u0131kt\u0131lar\u0131n\u0131 yazmak i\u00e7in izinlere ihtiyac\u0131 vard\u0131r.<br \/>\n*   <strong>Sanal Ortam Sorunlar\u0131:<\/strong> <code>buildbot<\/code> veya <code>buildbot-worker<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce sanal ortam\u0131n etkinle\u015ftirildi\u011finden (<code>source ~\/buildbot_env\/bin\/activate<\/code>) emin olun.<\/p>\n<h3>Performans Optimizasyonu<\/h3>\n<p>*   <strong>Yeterli Kaynaklar:<\/strong> Master ve Worker sunucular\u0131na yeterli CPU, RAM ve disk alan\u0131 tahsis edin.<br \/>\n*   <strong>Paralel Worker&#8217;lar:<\/strong> \u0130\u015f y\u00fck\u00fcn\u00fcz artt\u0131k\u00e7a birden fazla Worker kullanarak derlemeleri paralelle\u015ftirin.<br \/>\n*   <strong>Gereksiz Ad\u0131mlar\u0131 Kald\u0131rma:<\/strong> Derleme ad\u0131mlar\u0131n\u0131 optimize edin ve gereksiz komutlar\u0131 kald\u0131r\u0131n.<br \/>\n*   <strong>\u00d6nbellekleme:<\/strong> Derleme s\u00fcre\u00e7lerinde s\u0131k kullan\u0131lan ba\u011f\u0131ml\u0131l\u0131klar\u0131 veya derleme \u00e7\u0131kt\u0131lar\u0131n\u0131 \u00f6nbelle\u011fe alarak derleme s\u00fcrelerini k\u0131saltabilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, FreeBSD i\u015fletim sistemi \u00fczerinde Buildbot s\u00fcrekli entegrasyon sisteminin nas\u0131l kurulaca\u011f\u0131n\u0131 ve yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceledik. Buildbot Master ve Worker bile\u015fenlerinin kurulumundan, temel <code>master.cfg<\/code> yap\u0131land\u0131rmas\u0131na, <code>rc.d<\/code> servisleri arac\u0131l\u0131\u011f\u0131yla sistem ba\u015flang\u0131c\u0131nda otomatik \u00e7al\u0131\u015ft\u0131rmaya kadar bir\u00e7ok konuya de\u011findik.<\/p>\n<h3>\u00d6zet<\/h3>\n<p>Buildbot, yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinizi otomatikle\u015ftirmek i\u00e7in son derece esnek ve g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. FreeBSD&#8217;nin kararl\u0131l\u0131\u011f\u0131 ve g\u00fcvenilirli\u011fi ile birle\u015fti\u011finde, projeleriniz i\u00e7in sa\u011flam bir s\u00fcrekli entegrasyon ve da\u011f\u0131t\u0131m platformu sunar. Do\u011fru yap\u0131land\u0131rma ve y\u00f6netimle, Buildbot geli\u015ftirme ekiplerinizin verimlili\u011fini art\u0131rabilir, hatalar\u0131 erken a\u015famada yakalayabilir ve yaz\u0131l\u0131m teslimat s\u00fcre\u00e7lerinizi h\u0131zland\u0131rabilir.<\/p>\n<h3>Gelecek Perspektifleri<\/h3>\n<p>Kurulumu tamamlad\u0131ktan sonra, Buildbot&#8217;u projenizin \u00f6zel ihtiya\u00e7lar\u0131na g\u00f6re daha da \u00f6zelle\u015ftirebilirsiniz. Daha karma\u015f\u0131k derleme boru hatlar\u0131 olu\u015fturabilir, farkl\u0131 test \u00e7er\u00e7evelerini entegre edebilir, \u00f6zel bildirimler kurabilir ve g\u00fcvenlik ayarlar\u0131n\u0131z\u0131 g\u00fc\u00e7lendirebilirsiniz. Buildbot&#8217;un geni\u015f eklenti ekosistemi ve Python tabanl\u0131 yap\u0131s\u0131, neredeyse s\u0131n\u0131rs\u0131z \u00f6zelle\u015ftirme ve entegrasyon olanaklar\u0131 sunar. S\u00fcrekli entegrasyon ve da\u011f\u0131t\u0131m yolculu\u011funuzda Buildbot, size g\u00fc\u00e7l\u00fc bir m\u00fcttefik olacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, s\u00fcre","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":[1],"tags":[],"class_list":{"0":"post-32309","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber - 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\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, s\u00fcre\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-20T04:41:01+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\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-10-20T04:41:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/\"},\"wordCount\":2953,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/\",\"name\":\"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-20T04:41:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber\"}]},{\"@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":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber - 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\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber","og_description":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zl\u0131 yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, s\u00fcre","og_url":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-20T04:41:01+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\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber","datePublished":"2025-10-20T04:41:01+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/"},"wordCount":2953,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/","name":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-20T04:41:01+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/freebsd-uzerinde-buildbot-kurulumu-ve-yapilandirmasi-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"FreeBSD \u00dczerinde Buildbot Kurulumu ve Yap\u0131land\u0131rmas\u0131: Kapsaml\u0131 Bir Rehber"}]},{"@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\/32309","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=32309"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32309\/revisions"}],"predecessor-version":[{"id":32310,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32309\/revisions\/32310"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}