FreeBSD Üzerinde Buildbot Kurulumu ve Yapılandırması: Kapsamlı Bir Rehber
Giriş
Günümüzün hızlı yazılım geliştirme dünyasında, sürekli entegrasyon (CI) ve sürekli dağıtım (CD) pratikleri, projelerin başarısı için vazgeçilmez hale gelmiştir. Bu pratikler, kod değişikliklerinin düzenli olarak entegre edilmesini, otomatik testlerden geçirilmesini ve dağıtıma hazır hale getirilmesini sağlayarak, hataları erken aşamada tespit etmeye, geliştirme süreçlerini hızlandırmaya ve ürün kalitesini artırmaya yardımcı olur. Buildbot, bu tür otomasyon süreçlerini yönetmek için tasarlanmış güçlü, esnek ve açık kaynaklı bir çerçevedir. Python ile yazılmış olması, genişletilebilirliğini ve özelleştirilebilirliğini artırır.
Sürekli Entegrasyon ve Dağıtımın Önemi
Sürekli entegrasyon, geliştiricilerin kodlarını günde birkaç kez ana depoya entegre etmeleri ve her entegrasyonun otomatik bir derleme ve test süreciyle doğrulanması prensibine dayanır. Bu, entegrasyon sorunlarının erken aşamada fark edilmesini ve çözülmesini sağlar. Sürekli dağıtım ise, bu entegre edilmiş ve test edilmiş kodun otomatik olarak üretim ortamına veya bir ara aşamaya dağıtılması sürecidir. Bu iki pratik, yazılım geliştirme yaşam döngüsünü otomatikleştirerek insan hatasını azaltır, teslimat sürelerini kısaltır ve ekiplerin daha verimli çalışmasına olanak tanır. Buildbot gibi araçlar, bu karmaşık süreçleri yönetmek için merkezi bir platform sunar.
FreeBSD’nin Rolü
FreeBSD, güçlü ağ yetenekleri, üstün güvenlik özellikleri ve kararlılığı ile sunucu ortamları için popüler bir işletim sistemidir. Buildbot gibi kritik bir sürekli entegrasyon sistemini barındırmak için mükemmel bir temel sağlar. FreeBSD’nin ports ve packages sistemi, yazılımların kolayca kurulmasına ve yönetilmesine olanak tanırken, rc.d altyapısı servislerin güvenilir bir şekilde başlatılmasını ve durdurulmasını sağlar. Bu makalede, Buildbot’un FreeBSD üzerinde nasıl kurulacağını, yapılandırılacağını ve yönetileceğini adım adım inceleyeceğiz.
Buildbot Nedir ve Neden Kullanılır?
Buildbot, yazılım derleme, test ve dağıtım süreçlerini otomatikleştirmek için tasarlanmış, dağıtık bir sürekli entegrasyon sistemidir. Çok çeşitli platformlarda çalışabilir ve farklı kaynak kontrol sistemleri, derleme araçları ve test çerçeveleriyle entegre olabilir. Esnekliği sayesinde, basit projelerden karmaşık, çok aşamalı derleme boru hatlarına kadar her türlü ihtiyaca cevap verebilir.
Temel Bileşenler
Buildbot sistemi temel olarak üç ana bileşenden oluşur:
* Buildbot Master (Ana Sunucu): Tüm derleme süreçlerini koordine eden merkezi bir sunucudur. Yapılandırma dosyalarını (Python kodu olarak yazılır), derleme kuyruklarını, planlayıcıları ve raporlama mekanizmalarını barındırır. Web arayüzü aracılığıyla kullanıcı etkileşimini sağlar.
* Buildbot Worker (İşçi Sunucu): Master’dan derleme işlerini alan ve bunları yerel olarak yürüten bağımsız bir sunucudur. Kaynak kodu çeker, derlemeleri çalıştırır, testleri yapar ve sonuçları Master’a geri gönderir. Bir Master birden fazla Worker ile çalışabilir ve bu Worker’lar farklı işletim sistemlerinde bile olabilir.
* Scheduler (Planlayıcı): Hangi koşullar altında hangi derlemelerin başlatılacağını belirler. Zamanlanmış derlemeler, kod deposundaki değişiklikler üzerine tetiklenen derlemeler veya manuel olarak başlatılan derlemeler gibi çeşitli planlama stratejileri sunar.
Avantajları
Buildbot’un tercih edilmesinin başlıca nedenleri şunlardır:
* Esneklik: Python tabanlı yapılandırması sayesinde, neredeyse her türlü derleme veya test senaryosunu otomatikleştirmek mümkündür.
* Dağıtık Mimari: İş yükünü birden fazla Worker’a dağıtarak ölçeklenebilirlik ve performans sağlar.
* Çoklu Platform Desteği: Worker’lar farklı işletim sistemlerinde çalışabilir, bu da platformlar arası test ve derleme için idealdir.
* Genişletilebilirlik: Eklentiler (plugins) ve özel komut dosyaları aracılığıyla kolayca genişletilebilir.
* Açık Kaynak: Topluluk desteği ve sürekli geliştirme ile desteklenen ücretsiz bir çözümdür.
Ön Gereksinimler
Buildbot kurulumuna başlamadan önce, FreeBSD sistemimizde bazı temel gereksinimleri karşılamamız gerekmektedir.
Sistem Gereksinimleri
* İşletim Sistemi: FreeBSD 13.x veya daha yeni bir sürüm tavsiye edilir.
* RAM: En az 2 GB RAM, derleme işlemlerinin karmaşıklığına göre daha fazlası gerekebilir.
* Disk Alanı: İşletim sistemi, Buildbot ve derlenecek projeler için yeterli disk alanı (en az 20 GB).
* CPU: En az 2 çekirdekli bir işlemci.
Gerekli Paketler
FreeBSD’nin pkg paket yöneticisini kullanarak gerekli yazılımları kuracağız.
Python ve pip
Buildbot Python ile yazıldığı için, Python’ın sistemde kurulu olması zorunludur. Genellikle FreeBSD’de varsayılan olarak Python’ın eski bir sürümü bulunabilir, ancak Buildbot için daha yeni bir sürüm (Python 3.8 veya üzeri) ve pip paket yöneticisi önerilir.
sudo pkg install python3 py38-pip
Git
Kaynak kodunu depolardan çekmek için Git gereklidir.
sudo pkg install git
PostgreSQL veya SQLite (Veritabanı)
Buildbot, derleme geçmişi ve diğer meta verileri depolamak için bir veritabanı kullanır. Küçük ve orta ölçekli kurulumlar için SQLite yeterli olabilirken, büyük ölçekli ve üretim ortamları için PostgreSQL veya MySQL gibi harici bir veritabanı sunucusu önerilir. Bu rehberde SQLite ile başlayacak, ancak PostgreSQL kurulumunu da kısaca değineceğiz.
* SQLite için: Genellikle Python ile birlikte gelir veya py38-sqlite3 paketi ile kurulabilir.
* PostgreSQL için:
sudo pkg install postgresql13-server py38-psycopg2
sudo sysrc postgresql_enable="YES"
sudo service postgresql initdb
sudo service postgresql start
# PostgreSQL kullanıcı ve veritabanı oluşturma adımları ayrıca yapılmalıdır.
# Örneğin: sudo -u postgres createuser --pwprompt buildbot
# sudo -u postgres createdb -O buildbot buildbotdb
Diğer Bağımlılıklar
Derlenecek projenin ihtiyaç duyduğu derleyiciler (GCC, Clang), make araçları veya diğer kütüphaneler (örneğin, Node.js, Java Development Kit) de kurulu olmalıdır. Bunlar Buildbot Worker üzerinde bulunmalıdır.
sudo pkg install gmake gcc
Buildbot Kurulumu
Buildbot’u kurmadan önce, sistemimizde izole bir Python ortamı oluşturmak en iyi uygulamadır. Bu, Buildbot’un bağımlılıklarının sistem genelindeki diğer Python uygulamalarıyla çakışmasını önler.
Python Ortamının Hazırlanması
Buildbot ve bağımlılıklarını izole etmek için virtualenv kullanacağız. Öncelikle, virtualenv paketini kuralım:
sudo pip install virtualenv
Şimdi Buildbot için bir kullanıcı oluşturalım ve bu kullanıcının ev dizininde bir virtualenv ortamı oluşturalım. Güvenlik ve düzen açısından Buildbot’u ayrı bir kullanıcı altında çalıştırmak önerilir.
sudo adduser
Kullanıcı adı: buildbot
Shell: /bin/sh (veya tercih ettiğiniz bir shell)
Diğer seçenekleri varsayılan bırakabilirsiniz.
sudo su - buildbot
mkdir ~/buildbot_env
virtualenv ~/buildbot_env
source ~/buildbot_env/bin/activate
source ~/buildbot_env/bin/activate komutu, Buildbot sanal ortamını etkinleştirir. Bundan sonra çalıştıracağınız pip komutları, paketleri bu sanal ortama kuracaktır. Ortamdan çıkmak için deactivate komutunu kullanabilirsiniz.
Buildbot Paketlerinin Kurulumu
Sanal ortamımız etkinleştirildikten sonra, Buildbot Master ve Worker paketlerini kurabiliriz. Bu rehberde Master ve Worker’ı aynı FreeBSD sunucusunda kuracağız, ancak farklı sunucularda da olabilirler.
# Sanal ortam etkinleştirilmişken (source ~/buildbot_env/bin/activate)
pip install 'buildbot[sqlite]'
pip install buildbot-worker
buildbot[sqlite] ifadesi, Buildbot’u SQLite veritabanı desteğiyle kurar. Eğer PostgreSQL kullanacaksanız, pip install 'buildbot[postgres]' kullanmalısınız.
Buildbot Yapılandırması
Buildbot kurulumu tamamlandıktan sonra, sistemimizi çalıştırmak için yapılandırmamız gerekir. Yapılandırma, Buildbot Master’ın nasıl davranacağını, hangi Worker’ları kullanacağını, hangi projeleri derleyeceğini ve nasıl raporlama yapacağını belirler.
Genel Bakış
Buildbot Master’ın yapılandırması, bir Python dosyası olan master.cfg üzerinden yapılır. Bu dosya, Buildbot’un tüm davranışlarını tanımlayan bir dizi Python nesnesi içerir.
Dizin Yapısı
Buildbot için düzenli bir dizin yapısı oluşturmak, yönetimi kolaylaştırır. buildbot kullanıcısının ev dizininde master ve worker dizinleri oluşturalım.
# buildbot kullanıcısı olarak
cd ~
mkdir master
mkdir worker
Buildbot Master Yapılandırması
Master’ı başlatmadan önce, temel bir yapılandırma dosyası oluşturmamız gerekiyor.
Master Oluşturma
buildbot create-master komutu, master dizini içinde temel bir master.cfg dosyası ve diğer gerekli dosyaları oluşturur.
# buildbot kullanıcısı, sanal ortam etkinleştirilmişken
cd ~/master
buildbot create-master .
Bu komut, geçerli dizinde bir Buildbot Master örneği oluşturur. .env ve master.cfg.sample gibi dosyalar oluşacaktır. master.cfg.sample dosyasını master.cfg olarak kopyalayarak düzenlemeye başlayacağız.
cp master.cfg.sample master.cfg
master.cfg Dosyasının Düzenlenmesi
master.cfg dosyası, Buildbot’un kalbidir. Bu dosya, Python sözdizimini kullanarak Buildbot’un tüm yönlerini tanımlar. Bir metin düzenleyici ile ~/master/master.cfg dosyasını açın.
# nano veya vi kullanabilirsiniz
nano ~/master/master.cfg
İşte temel bir master.cfg dosyasında bulunması gereken bazı önemli bölümler ve örnek yapılandırmalar:
Workers Tanımlama
Master, derleme işlerini Worker’lara atar. Her Worker’ın benzersiz bir adı ve Master ile iletişim kurmak için kullanılan bir şifresi olmalıdır.
# master.cfg içinde bir yere ekleyin
from buildbot.worker import Worker
c['workers'] = [
Worker("freebsd-worker-1", "sifrenizburaya")
]
Burada “freebsd-worker-1”, Worker’ın adı, “sifrenizburaya” ise Master ile Worker arasında paylaşılan gizli şifredir.
Schedulers Tanımlama
Schedulers, derlemelerin ne zaman ve hangi koşullar altında başlatılacağını belirler. En yaygın olanları ForceScheduler (manuel tetikleme), SingleBranchScheduler (belirli bir daldaki kod değişiklikleri) ve Nightly (zamanlanmış) planlayıcılardır.
# master.cfg içinde bir yere ekleyin
from buildbot.schedulers.basic import SingleBranchScheduler
from buildbot.schedulers.forcesched import ForceScheduler
from buildbot.changes.gitpoller import GitPoller
from buildbot.www.hooks.github import GitHubEventHandler
c['schedulers'] = [
SingleBranchScheduler(
name="main_branch_build",
change_filter=util.ChangeFilter(branch='main'),
treeStableTimer=None, # Değişiklik geldiği anda tetikle
builderNames=["freebsd-project-builder"]
),
ForceScheduler(
name="force_build",
builderNames=["freebsd-project-builder"]
)
]
GitHub entegrasyonu için (opsiyonel)
c['www'].update({
'change_hook_dialects': {
'github': {
'secret': 'YOUR_GITHUB_WEBHOOK_SECRET'
}
}
})
c['services'].append(GitHubEventHandler(
master=c,
secret='YOUR_GITHUB_WEBHOOK_SECRET',
builderNames=['freebsd-project-builder']
))
Git deposunu düzenli aralıklarla kontrol etmek için (alternatif)
c['services'].append(GitPoller(
'https://github.com/buildbot/hello-world.git', # Kendi depo URL'nizi girin
pollinterval=300, # 5 dakikada bir kontrol et
branches=['main'],
project='HelloWorld',
# username='git_user', # Özel depolar için
# password='git_password', # Özel depolar için
# buildbotURL='http://localhost:8010/', # Webhook için gerekli olabilir
))
SingleBranchScheduler, main dalındaki değişiklikleri izlerken, ForceScheduler web arayüzünden manuel tetiklemeye izin verir. GitPoller ise belirli aralıklarla Git deposunu kontrol ederek değişiklikleri algılar.
Builders Tanımlama
Builders, Master’ın Worker’lara atayacağı gerçek derleme işlerini tanımlar. Her Builder, bir veya daha fazla Worker üzerinde çalışabilir ve bir dizi “step” (adım) içerir.
# master.cfg içinde bir yere ekleyin
from buildbot.config import BuilderConfig
from buildbot.steps.source.git import Git
from buildbot.steps.shell import ShellCommand
from buildbot.steps.worker import SetPropertyFromWorker
c['builders'] = [
util.BuilderConfig(
name="freebsd-project-builder",
workerNames=["freebsd-worker-1"],
factory=util.BuildFactory([
Git(repourl='https://github.com/buildbot/hello-world.git', branch='main'),
ShellCommand(command=["ls", "-la"]),
ShellCommand(command=["python3", "setup.py", "test"]),
ShellCommand(command=["python3", "setup.py", "install"]),
# Örnek bir derleme adımı:
# ShellCommand(command=["make"]),
# ShellCommand(command=["make", "test"]),
# ShellCommand(command=["make", "install"]),
])
)
]
Bu örnekte, freebsd-project-builder adında bir Builder tanımlanmıştır. Bu Builder, freebsd-worker-1 üzerinde çalışacak ve önce Git deposundan kodu çekecek, ardından ls -la komutunu çalıştıracak, sonra setup.py test ve setup.py install komutlarını çalıştıracaktır.
Reporters (Bildirimciler)
Derleme sonuçlarını e-posta, Slack veya diğer hizmetlere bildirmek için Reporters kullanılır.
# master.cfg içinde bir yere ekleyin
from buildbot.reporters.mail import MailNotifier
from buildbot.reporters.base import ReporterBase
from buildbot.reporters.github import GitHubStatusPush
E-posta bildirimi (örnek)
c['services'].append(MailNotifier(
fromaddr="buildbot@example.com",
sendto=["devteam@example.com"],
mode="failing", # Sadece başarısız derlemelerde bildirim gönder
smtp_host="localhost",
smtp_port=25,
# smtp_user="user",
# smtp_password="password",
# use_tls=True
))
GitHub durum bildirimi (opsiyonel)
c['services'].append(GitHubStatusPush(
oauth_token="YOUR_GITHUB_OAUTH_TOKEN", # GitHub'dan alınacak kişisel erişim jetonu
context="Buildbot CI",
verbose=True
))
Kimlik Doğrulama ve Yetkilendirme
Web arayüzüne erişimi kısıtlamak için kimlik doğrulama ve yetkilendirme yapılandırılabilir.
# master.cfg içinde bir yere ekleyin
from buildbot.www.auth import LocalAuth
from buildbot.www.authz import Authz
c['www']['auth'] = LocalAuth([
('admin', 'adminpassword') # Kullanıcı adı ve şifre
])
c['www']['authz'] = Authz(
allowRules=[
util.AnyEndpointMatcher(role="admin"),
util.AnyControlEndpointMatcher(role="admin"),
util.AnyViewEndpointMatcher(role="admin"),
util.AnyEndpointMatcher(role="users"),
util.AnyControlEndpointMatcher(role="users"),
util.AnyViewEndpointMatcher(role="users"),
],
roleMatchers=[
util.RolesFromUsername(roles=['admin'], usernames=['admin']),
util.RolesFromUsername(roles=['users'], usernames=['guest']),
]
)
Veritabanı Yapılandırması
master.cfg dosyasının en başında veya uygun bir yerde veritabanı yapılandırması bulunur. SQLite için varsayılan olarak sqlite:///state.sqlite kullanılır. PostgreSQL için şöyle bir yapılandırma gereklidir:
# master.cfg içinde c['db'] = ... satırını düzenleyin
SQLite için:
c['db'] = {
'db_url': "sqlite:///state.sqlite",
}
PostgreSQL için (örnek):
c['db'] = {
'db_url': "postgresql://buildbot:sifreniz@localhost/buildbotdb",
}
master.cfg dosyasını kaydettikten sonra, yapılandırma dosyasında bir hata olup olmadığını kontrol etmek iyi bir uygulamadır:
# buildbot kullanıcısı, sanal ortam etkinleştirilmişken
cd ~/master
buildbot checkconfig .
Eğer çıktı Configuration OK ise, yapılandırmanız doğru demektir.
Master’ı Başlatma ve Yönetme
Master’ı manuel olarak başlatabiliriz:
# buildbot kullanıcısı, sanal ortam etkinleştirilmişken
cd ~/master
buildbot start .
Master’ı durdurmak için:
cd ~/master
buildbot stop .
Master’ın durumunu kontrol etmek için:
cd ~/master
buildbot status .
Servis Olarak Çalıştırma (rc.d script)
Üretim ortamında Buildbot Master’ı bir servis olarak çalıştırmak esastır. FreeBSD’nin rc.d sistemi bunun için idealdir.
Öncelikle, buildbot kullanıcısı için sanal ortam yolunu içeren bir buildbot_master_wrapper.sh dosyası oluşturalım:
# root olarak veya sudo ile
sudo nano /usr/local/etc/rc.d/buildbot_master
İçeriği aşağıdaki gibi düzenleyin:
#!/bin/sh
PROVIDE: buildbot_master
REQUIRE: DAEMON
KEYWORD: shutdown
. /etc/rc.subr
name="buildbot_master"
rcvar="buildbot_master_enable"
buildbot_user="buildbot"
buildbot_home="/home/buildbot"
buildbot_master_dir="${buildbot_home}/master"
buildbot_env="${buildbot_home}/buildbot_env"
command="/usr/bin/env"
command_args="BUILDMASTER_CONFIG=${buildbot_master_dir}/master.cfg ${buildbot_env}/bin/buildbot"
pidfile="${buildbot_master_dir}/twistd.pid"
extra_commands="reload"
load_rc_config $name
buildbot_master_enable=${buildbot_master_enable:-"NO"}
start_cmd="${command} ${command_args} start --nodaemon --logfile=${buildbot_master_dir}/twistd.log --pidfile=${pidfile}"
stop_cmd="${command} ${command_args} stop --pidfile=${pidfile}"
status_cmd="${command} ${command_args} status --pidfile=${pidfile}"
reload_cmd="${command} ${command_args} reconfig --config=${buildbot_master_dir}/master.cfg"
run_rc_command "$@"
Dosyayı kaydedin ve çalıştırılabilir yapın:
sudo chmod +x /usr/local/etc/rc.d/buildbot_master
rc.conf dosyasına Buildbot Master’ı etkinleştirmek için bir satır ekleyin:
sudo sysrc buildbot_master_enable="YES"
Şimdi Master’ı başlatabilirsiniz:
sudo service buildbot_master start
Bu, Buildbot Master’ı sistem başlangıcında otomatik olarak başlatılacak şekilde ayarlar.
Buildbot Worker Yapılandırması
Buildbot Worker, Master’dan aldığı derleme görevlerini çalıştıran bağımsız bir süreçtir.
Worker Oluşturma
Worker’ı oluşturmak için buildbot-worker create-worker komutunu kullanırız.
# buildbot kullanıcısı, sanal ortam etkinleştirilmişken
cd ~/worker
buildbot-worker create-worker . localhost:9989 freebsd-worker-1 sifrenizburaya
Burada:
* .: Worker dizini.
* localhost:9989: Master’ın adresi ve portu (varsayılan Buildbot portu 9989’dur). Eğer Master farklı bir sunucuda ise, master_ip_adresi:9989 şeklinde belirtmelisiniz.
* freebsd-worker-1: Worker’ın adı. Bu, master.cfg dosyasında tanımladığınız Worker adı ile eşleşmelidir.
* sifrenizburaya: Master ile Worker arasında paylaşılan şifre. Bu da master.cfg dosyasındaki şifre ile aynı olmalıdır.
Bu komut, Worker dizini içinde buildbot.tac gibi gerekli dosyaları oluşturur.
Worker’ı Başlatma ve Yönetme
Worker’ı manuel olarak başlatmak için:
# buildbot kullanıcısı, sanal ortam etkinleştirilmişken
cd ~/worker
buildbot-worker start .
Worker’ı durdurmak için:
cd ~/worker
buildbot-worker stop .
Worker’ın durumunu kontrol etmek için:
cd ~/worker
buildbot-worker status .
Servis Olarak Çalıştırma (rc.d script)
Buildbot Worker’ı da Master gibi bir rc.d servisi olarak çalıştırmak iyi bir uygulamadır.
# root olarak veya sudo ile
sudo nano /usr/local/etc/rc.d/buildbot_worker
İçeriği aşağıdaki gibi düzenleyin:
#!/bin/sh
PROVIDE: buildbot_worker
REQUIRE: DAEMON
KEYWORD: shutdown
. /etc/rc.subr
name="buildbot_worker"
rcvar="buildbot_worker_enable"
buildbot_user="buildbot"
buildbot_home="/home/buildbot"
buildbot_worker_dir="${buildbot_home}/worker"
buildbot_env="${buildbot_home}/buildbot_env"
command="/usr/bin/env"
command_args="${buildbot_env}/bin/buildbot-worker"
pidfile="${buildbot_worker_dir}/twistd.pid"
load_rc_config $name
buildbot_worker_enable=${buildbot_worker_enable:-"NO"}
start_cmd="${command} ${command_args} start --nodaemon --logfile=${buildbot_worker_dir}/twistd.log --pidfile=${pidfile} ${buildbot_worker_dir}"
stop_cmd="${command} ${command_args} stop --pidfile=${pidfile} ${buildbot_worker_dir}"
status_cmd="${command} ${command_args} status --pidfile=${pidfile} ${buildbot_worker_dir}"
run_rc_command "$@"
Dosyayı kaydedin ve çalıştırılabilir yapın:
sudo chmod +x /usr/local/etc/rc.d/buildbot_worker
rc.conf dosyasına Buildbot Worker’ı etkinleştirmek için bir satır ekleyin:
sudo sysrc buildbot_worker_enable="YES"
Şimdi Worker’ı başlatabilirsiniz:
sudo service buildbot_worker start
Buildbot Arayüzü ve Kullanımı
Buildbot Master başarılı bir şekilde başlatıldıktan sonra, web arayüzüne erişebilirsiniz.
Web Arayüzüne Erişim
Varsayılan olarak, Buildbot web arayüzü 8010 portundan yayın yapar. Tarayıcınızdan http://:8010 adresine giderek erişebilirsiniz. Eğer master.cfg dosyasında kimlik doğrulama yapılandırdıysanız, giriş yapmanız istenecektir.
Web arayüzü, çalışan derlemeleri, geçmiş derlemeleri, Worker durumlarını, planlayıcıları ve genel sistem durumunu gösteren kapsamlı bir görünüm sunar.
Yapılandırma Değişiklikleri ve Yeniden Yükleme
master.cfg dosyasında herhangi bir değişiklik yaptığınızda, Master’ı yeniden başlatmak yerine reconfig komutunu kullanarak yapılandırmayı yeniden yükleyebilirsiniz. Bu, çalışan derlemelerin kesintiye uğramamasını sağlar.
# buildbot kullanıcısı, sanal ortam etkinleştirilmişken
cd ~/master
buildbot reconfig .
Eğer Master’ı rc.d servisi olarak çalıştırıyorsanız:
sudo service buildbot_master reload
Derleme Süreçlerini İzleme
Web arayüzünde “Builders” sekmesi altında tanımladığınız Builder’ları göreceksiniz. Bir Builder’a tıklayarak o Builder’ın geçmiş derlemelerini ve mevcut durumunu inceleyebilirsiniz. Her derleme için ayrıntılı loglar, hangi adımların başarıyla tamamlandığı veya nerede hata oluştuğu gibi bilgiler sunulur.
Kullanıcı ve Rol Yönetimi
master.cfg dosyasında tanımladığınız LocalAuth ve Authz ayarları ile web arayüzüne kimlerin erişebileceğini ve hangi işlemleri yapabileceğini kontrol edebilirsiniz. Daha gelişmiş senaryolar için LDAP veya OAuth gibi harici kimlik doğrulama sağlayıcılarıyla entegrasyon mümkündür.
Gelişmiş Yapılandırma ve Entegrasyonlar
Buildbot’un gücü, esnek yapılandırma seçeneklerinde ve diğer araçlarla entegrasyon yeteneğinde yatar.
Kaynak Kontrol Sistemleri (Source Control Systems)
Buildbot, Git, Subversion (SVN), Mercurial ve Perforce gibi popüler VCS’lerle entegre olabilir. GitPoller veya GitHubEventHandler gibi servisler aracılığıyla kod değişikliklerini otomatik olarak algılayabilir ve derlemeleri tetikleyebilir.
Test Çerçeveleri
Buildbot, Python’ın unittest, pytest, Java’nın JUnit, JavaScript’in Jest gibi çeşitli test çerçevelerinin çıktılarını işleyebilir. Test sonuçlarını web arayüzünde göstererek geliştiricilere hızlı geri bildirim sağlar. ShellCommand adımları arasına test komutlarınızı ekleyerek bu entegrasyonu sağlayabilirsiniz.
Bildirimler
MailNotifier ile e-posta bildirimleri gönderebilirsiniz. Ayrıca, buildbot-slack eklentisi ile Slack’e, buildbot-telegram ile Telegram’a bildirim göndermek de mümkündür. GitHub’a derleme durumu göndermek için GitHubStatusPush kullanılmıştır.
Paralel Derlemeler
Birden fazla Worker’a sahipseniz, Buildbot farklı Builder’ları veya aynı Builder’ın farklı derlemelerini aynı anda farklı Worker’lar üzerinde çalıştırarak paralel derlemeleri destekler. Bu, derleme sürelerini önemli ölçüde kısaltabilir.
Sorun Giderme ve İpuçları
Herhangi bir karmaşık sistemde olduğu gibi, Buildbot kurulumunda da sorunlarla karşılaşabilirsiniz. İşte bazı yaygın sorun giderme yöntemleri ve ipuçları:
Log Dosyaları
Buildbot Master ve Worker’ın log dosyaları, sorun gidermenin ilk adımıdır.
* Master Logları: ~/master/twistd.log
* Worker Logları: ~/worker/twistd.log
Bu log dosyaları, hataların nedenlerini ve derleme süreçlerinin ayrıntılarını içerir.
Yaygın Hatalar
* Worker Bağlantı Sorunları: Master ve Worker arasındaki şifrenin eşleştiğinden emin olun. Master’ın IP adresi ve portunun doğru olduğundan emin olun. Güvenlik duvarı (firewall) ayarlarını kontrol edin (9989 portu açık olmalı).
* Yapılandırma Hataları (master.cfg): buildbot checkconfig . komutunu kullanarak yapılandırma dosyasındaki sözdizimi hatalarını kontrol edin.
* Bağımlılık Eksiklikleri: Worker üzerinde derleme adımlarının gerektirdiği tüm yazılımların (derleyiciler, kütüphaneler, Python paketleri vb.) kurulu olduğundan emin olun.
* İzin Sorunları: Buildbot kullanıcısının gerekli dosya ve dizinlere yazma/okuma izinlerine sahip olduğundan emin olun. Özellikle Worker’ın kaynak kodunu çekmek veya derleme çıktılarını yazmak için izinlere ihtiyacı vardır.
* Sanal Ortam Sorunları: buildbot veya buildbot-worker komutlarını çalıştırmadan önce sanal ortamın etkinleştirildiğinden (source ~/buildbot_env/bin/activate) emin olun.
Performans Optimizasyonu
* Yeterli Kaynaklar: Master ve Worker sunucularına yeterli CPU, RAM ve disk alanı tahsis edin.
* Paralel Worker’lar: İş yükünüz arttıkça birden fazla Worker kullanarak derlemeleri paralelleştirin.
* Gereksiz Adımları Kaldırma: Derleme adımlarını optimize edin ve gereksiz komutları kaldırın.
* Önbellekleme: Derleme süreçlerinde sık kullanılan bağımlılıkları veya derleme çıktılarını önbelleğe alarak derleme sürelerini kısaltabilirsiniz.
Sonuç
Bu kapsamlı rehberde, FreeBSD işletim sistemi üzerinde Buildbot sürekli entegrasyon sisteminin nasıl kurulacağını ve yapılandırılacağını adım adım inceledik. Buildbot Master ve Worker bileşenlerinin kurulumundan, temel master.cfg yapılandırmasına, rc.d servisleri aracılığıyla sistem başlangıcında otomatik çalıştırmaya kadar birçok konuya değindik.
Özet
Buildbot, yazılım geliştirme süreçlerinizi otomatikleştirmek için son derece esnek ve güçlü bir araçtır. FreeBSD’nin kararlılığı ve güvenilirliği ile birleştiğinde, projeleriniz için sağlam bir sürekli entegrasyon ve dağıtım platformu sunar. Doğru yapılandırma ve yönetimle, Buildbot geliştirme ekiplerinizin verimliliğini artırabilir, hataları erken aşamada yakalayabilir ve yazılım teslimat süreçlerinizi hızlandırabilir.
Gelecek Perspektifleri
Kurulumu tamamladıktan sonra, Buildbot’u projenizin özel ihtiyaçlarına göre daha da özelleştirebilirsiniz. Daha karmaşık derleme boru hatları oluşturabilir, farklı test çerçevelerini entegre edebilir, özel bildirimler kurabilir ve güvenlik ayarlarınızı güçlendirebilirsiniz. Buildbot’un geniş eklenti ekosistemi ve Python tabanlı yapısı, neredeyse sınırsız özelleştirme ve entegrasyon olanakları sunar. Sürekli entegrasyon ve dağıtım yolculuğunuzda Buildbot, size güçlü bir müttefik olacaktır.
