Sürekli Entegrasyon (CI) ve Sürekli Dağıtım (CD) süreçleri, modern yazılım geliştirmenin temel taşlarından biridir. Bu süreçler, kod değişikliklerinin otomatik olarak test edilmesini, derlenmesini ve dağıtılmasını sağlayarak geliştirme döngüsünü hızlandırır ve hataları azaltır. Drone, Docker tabanlı, kullanımı kolay ve oldukça esnek bir CI/CD platformudur.
Bu rehberde, Ubuntu 16.04 işletim sistemi üzerinde Drone CI/CD sunucusunu ve agent’ını nasıl kuracağınızı ve yapılandıracağınızı adım adım öğreneceksiniz. Ubuntu 16.04’ün yaşam döngüsünün sonuna geldiğini (End Of Life – EOL) ve yeni projeler için daha güncel LTS (Long Term Support) sürümlerinin tercih edilmesi gerektiğini unutmayın. Ancak bu rehber, özel bir gereksinim nedeniyle Ubuntu 16.04 kullanmanız durumunda size yol gösterecektir.
Kuruluma başlamadan önce aşağıdaki önkoşullara sahip olduğunuzdan emin olun:
- Ubuntu 16.04 yüklü bir sunucu.
- Sunucuda Docker kurulu ve çalışır durumda.
- GitHub, GitLab veya Gitea gibi bir Git sağlayıcısında bir hesap. Drone, bu sağlayıcılar aracılığıyla depolarınıza erişim sağlar.
- Drone sunucunuz için bir alan adı veya alt alan adı (örn:
ci.ornek.com).
Ortam Hazırlığı ve Önkoşullar
Drone ve Docker’ın düzgün çalışabilmesi için Ubuntu 16.04 sunucunuzu hazırlamamız gerekiyor. Bu bölümde, sisteminizi güncelleyecek, Docker’ı kuracak (eğer kurulu değilse) ve gerekli ağ ayarlarını yapılandıracağız.
Sistem Güncellemesi
Herhangi bir kuruluma başlamadan önce sistem paket listesini güncelleyelim ve mevcut paketleri yükseltelim:
sudo apt-get update
sudo apt-get upgrade -y
Docker Kurulumu (Eğer Kurulu Değilse)
Drone tamamen Docker tabanlı çalıştığı için sunucunuzda Docker’ın kurulu olması şarttır. Eğer kurulu değilse, aşağıdaki adımları izleyerek Docker CE (Community Edition) sürümünü kurabilirsiniz:
# Gerekli paketleri kurun
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
Docker'ın GPG anahtarını ekleyin
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Docker deposunu sisteminize ekleyin
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Paket listesini tekrar güncelleyin ve Docker CE'yi kurun
sudo apt-get update
sudo apt-get install -y docker-ce
Docker servisinin başladığından ve sistem başlangıcında etkin olduğundan emin olun
sudo systemctl enable docker
sudo systemctl start docker
Kurulumdan sonra, mevcut kullanıcınızı docker grubuna ekleyerek sudo kullanmadan Docker komutlarını çalıştırabilirsiniz. Bu değişikliğin etkili olması için oturumu kapatıp tekrar açmanız veya sunucuyu yeniden başlatmanız gerekebilir.
sudo usermod -aG docker $USER
DNS Kaydı ve Güvenlik Duvarı Ayarları
Drone sunucusuna alan adınız üzerinden erişebilmek için DNS sağlayıcınızda sunucunuzun IP adresine işaret eden bir A kaydı oluşturmanız gerekmektedir (örn: ci.ornek.com -> sunucu_ip_adresiniz).
Güvenlik duvarı (UFW) kullanıyorsanız, Drone’un erişilebilir olması için HTTP (80) ve HTTPS (443) portlarını açmanız gerekir:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable # Eğer UFW etkin değilse
sudo ufw status # Kuralları kontrol edin
Drone Server Kurulumu
Drone sunucusu, Git depolarınızla etkileşime giren, CI/CD işlerini yöneten ve web arayüzünü sunan ana bileşendir. Kurulum için öncelikle bir OAuth uygulaması oluşturmamız gerekiyor.
Git Sağlayıcınızda OAuth Uygulaması Oluşturma
Drone’un Git depolarınıza erişebilmesi ve kullanıcıların Git sağlayıcınız üzerinden oturum açabilmesi için bir OAuth uygulaması oluşturmanız gerekir. Bu rehberde GitHub örneğini kullanacağız, ancak GitLab veya Gitea için de süreç benzerdir.
- GitHub hesabınıza giriş yapın.
- Ayarlar (Settings) -> Geliştirici Ayarları (Developer settings) -> OAuth Uygulamaları (OAuth Apps) bölümüne gidin.
- Yeni OAuth Uygulaması (New OAuth App) butonuna tıklayın.
- Aşağıdaki bilgileri girin:
- Uygulama Adı (Application name): Drone CI (veya istediğiniz bir isim)
- Anasayfa URL’si (Homepage URL):
https://ci.ornek.com(kendi alan adınızla değiştirin) - Yetkilendirme Geri Çağırma URL’si (Authorization callback URL):
https://ci.ornek.com/login(kendi alan adınızla değiştirin)
- Uygulamayı kaydettikten sonra size bir Client ID ve Client Secret verilecektir. Bu bilgileri güvenli bir yerde saklayın, Drone kurulumunda kullanacağız.
Drone Sunucusunu Docker ile Çalıştırma
Şimdi Drone sunucusunu Docker konteyneri olarak çalıştırabiliriz. Aşağıdaki komutta yer alan yer tutucuları kendi bilgilerinizle değiştirmeyi unutmayın.
: GitHub’dan aldığınız Client ID.: GitHub’dan aldığınız Client Secret.ci.ornek.com: Kendi alan adınız.: Drone sunucusu ile agent’ları arasındaki iletişimi güvence altına almak için kullanılan bir sır. Bunu aşağıdaki komutla oluşturabilirsiniz:openssl rand -hex 16Örnek çıktı: 5c85114a7966f3621421f114e9e034a1
Drone sunucusunu başlatmak için aşağıdaki Docker komutunu kullanın:
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITHUB_CLIENT_ID= \
--env=DRONE_GITHUB_CLIENT_SECRET= \
--env=DRONE_RPC_SECRET= \
--env=DRONE_SERVER_HOST=ci.ornek.com \
--env=DRONE_SERVER_PROTO=https \
--env=DRONE_TLS_AUTOCERT=true \
--publish=80:80 \
--publish=443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
Yukarıdaki komutta:
--volume=/var/lib/drone:/data: Drone’un verilerini (yapılandırma, veritabanı vb.) kalıcı olarak saklaması için bir Docker volume’ü bağlar.DRONE_SERVER_PROTO=httpsveDRONE_TLS_AUTOCERT=true: Drone’un otomatik olarak Let’s Encrypt aracılığıyla HTTPS sertifikası almasını ve kullanmasını sağlar. Bu, web arayüzüne güvenli erişim için önemlidir.--publish=80:80 --publish=443:443: Sunucunun 80 ve 443 numaralı portlarını Docker konteynerinin aynı portlarına yönlendirir.--name=drone: Konteynerin adını belirler.drone/drone:1: Kullanılacak Drone sunucusu Docker imajıdır (Drone v1).
Konteynerin çalıştığını doğrulamak için:
docker ps -a | grep drone
docker logs drone
Drone Agent Kurulumu ve Yapılandırması
Drone Agent, CI/CD işlerini (build, test, deploy adımları) fiilen yürüten bileşendir. Agent’lar, Docker daemon’ına erişerek işleri konteynerler içinde çalıştırır. Birden fazla agent kurarak paralel iş yüklerini yönetebilirsiniz.
Drone Agent’ı Docker ile Çalıştırma
Agent’ı başlatmak için aşağıdaki Docker komutunu kullanın. Burada dikkat etmeniz gereken en önemli nokta, DRONE_RPC_SECRET değişkeninin Drone sunucusunda kullandığınız sır ile aynı olması gerektiğidir.
docker run \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_SECRET= \
--env=DRONE_SERVER_HOST=ci.ornek.com \
--env=DRONE_SERVER_PROTO=https \
--restart=always \
--detach=true \
--name=drone-agent \
drone/agent:1
Yukarıdaki komutta:
--volume=/var/run/docker.sock:/var/run/docker.sock: Bu, agent’ın sunucudaki Docker daemon’ına erişmesini sağlar. Agent, build adımlarını çalıştırmak için Docker’ı kullanır. Bu, agent’ın düzgün çalışması için kritik bir ayardır.DRONE_RPC_SECRET: Sunucu ile agent arasındaki kimlik doğrulama sırrıdır.DRONE_SERVER_HOSTveDRONE_SERVER_PROTO: Agent’ın hangi Drone sunucusuna bağlanacağını belirtir.
Agent’ın çalıştığını ve sunucuya bağlandığını doğrulamak için:
docker ps -a | grep drone-agent
docker logs drone-agent
Loglarda agent’ın sunucuya başarıyla bağlandığına dair mesajlar görmelisiniz.
Drone Kullanımı ve İlk Proje
Drone sunucusu ve agent’ı kurulduktan sonra, artık web arayüzü üzerinden depolarınızı etkinleştirmeye ve ilk CI/CD projenizi oluşturmaya hazırsınız.
Drone Web Arayüzüne Erişim
Web tarayıcınızı açın ve Drone sunucunuzun alan adına gidin (örn: https://ci.ornek.com). Karşınıza Git sağlayıcınız (örn: GitHub) ile oturum açma ekranı gelecektir. OAuth uygulaması oluştururken kullandığınız Git hesabınızla giriş yapın.
Depo Etkinleştirme
Giriş yaptıktan sonra, Drone arayüzünde Git hesabınızdaki depoların bir listesini göreceksiniz. Bir depoyu CI/CD süreçlerine dahil etmek için:
- Sol menüden “Repositories” (Depolar) seçeneğine tıklayın.
- Depolarınızın listesi görünmüyorsa “Sync” (Senkronize Et) butonuna tıklayarak depolarınızı güncelleyin.
- CI/CD çalıştırmak istediğiniz deponun yanındaki “Activate” (Etkinleştir) butonuna tıklayın.
- Açılan pencerede gerekli izinleri onaylayın ve depo ayarlarını kaydedin.
.drone.yml Dosyası Oluşturma
Drone, her projenin kök dizininde bulunan .drone.yml adlı bir yapılandırma dosyası aracılığıyla CI/CD adımlarını tanımlar. Bu dosya, Drone’a ne zaman hangi adımları çalıştırması gerektiğini söyler.
Örnek olarak, basit bir Node.js projesi için .drone.yml dosyası şöyle görünebilir:
kind: pipeline
name: default
steps:
- name: build
image: node:16 # Build için Node.js 16 Docker imajını kullan
commands:
- npm install # Bağımlılıkları yükle
- npm test # Testleri çalıştır
trigger:
branch:
- main # Yalnızca 'main' dalına yapılan push'larda çalıştır
event:
- push # 'push' olaylarında çalıştır
Bu .drone.yml dosyası, main dalına her push yapıldığında bir pipeline başlatır. Bu pipeline, node:16 Docker imajını kullanarak npm install ve npm test komutlarını çalıştıran tek bir build adımına sahiptir.
Değişiklikleri Git’e Yükleme
.drone.yml dosyasını oluşturduktan sonra, bu dosyayı projenizin kök dizinine kaydedin ve Git deponuza commit edip push yapın:
git add .drone.yml
git commit -m "Add Drone CI configuration"
git push origin main
Değişiklikleri push yaptığınızda, Drone otomatik olarak bu olayı algılayacak ve .drone.yml dosyasında tanımlanan pipeline’ı çalıştıracaktır.
Build Durumunu İzleme
Drone web arayüzüne geri dönün. Etkinleştirdiğiniz deponun altında yeni bir build’in başladığını ve adımlarının durumunu göreceksiniz. Her adımın loglarına tıklayarak detaylı çıktıları inceleyebilirsiniz. Build başarılı olduğunda yeşil, başarısız olduğunda kırmızı renkle işaretlenecektir.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Ubuntu 16.04 üzerinde Drone CI/CD sunucusunu ve agent’ını kurmayı ve temel bir CI/CD pipeline’ı oluşturmayı öğrendiniz. Drone’un Docker-native yapısı sayesinde, projeleriniz için hızlı, izole ve ölçeklenebilir CI/CD süreçleri oluşturabilirsiniz. Daha karmaşık pipeline’lar için Drone belgelerini inceleyerek dağıtım adımları, bildirimler, matris build’leri ve daha fazlasını keşfedebilirsiniz.
Sıkça Sorulan Sorular (SSS)
S: Drone neden çalışmıyor veya build’ler başlamıyor?
C: İlk olarak, Docker konteynerlerinin çalıştığından emin olun: docker ps -a. Ardından, Drone sunucusu ve agent’ının loglarını kontrol edin: docker logs drone ve docker logs drone-agent. Ortam değişkenlerinin (özellikle DRONE_RPC_SECRET) sunucu ve agent arasında eşleştiğinden emin olun. Güvenlik duvarınızın (UFW) 80 ve 443 portlarını açtığından da emin olun.
S: Birden fazla agent kullanabilir miyim?
C: Evet, kesinlikle. Aynı DRONE_RPC_SECRET ve DRONE_SERVER_HOST değişkenlerini kullanarak istediğiniz kadar Drone agent’ı çalıştırabilirsiniz. Drone, gelen işleri mevcut agent’lar arasında otomatik olarak dengeleyecektir. Bu, paralel build’ler için harikadır.
S: Ubuntu 16.04 yerine daha yeni bir sürüm kullanmalı mıyım?
C: Şiddetle tavsiye edilir. Ubuntu 16.04 artık Canonical tarafından desteklenmiyor ve güvenlik güncellemeleri almıyor. Üretim ortamları için Ubuntu 20.04 LTS veya 22.04 LTS gibi güncel ve desteklenen bir işletim sistemi kullanmanız, sisteminizin güvenliği ve kararlılığı için kritik öneme sahiptir. Bu rehber sadece isteğiniz üzerine 16.04’ü hedef almıştır.
S: HTTPS kurmak zorunda mıyım?
C: Evet, özellikle GitHub/GitLab gibi harici Git sağlayıcılarla entegrasyon yapıyorsanız HTTPS zorunludur. Bu rehberdeki DRONE_TLS_AUTOCERT=true ayarı, Drone’un otomatik olarak Let’s Encrypt sertifikaları alıp kullanmasını sağlayarak süreci basitleştirir. Kendi sertifikalarınızı kullanmak isterseniz, bir ters proxy (Nginx, Caddy) arkasında Drone’u çalıştırabilirsiniz.
S: DRONE_RPC_SECRET nedir ve neden önemlidir?
C: DRONE_RPC_SECRET, Drone sunucusu ile Drone agent’ları arasındaki iletişimi güvence altına almak için kullanılan paylaşılan bir sırdır. Bu sır, agent’ların sunucuya kimlik doğrulaması yapmasını sağlar. Sunucu ve tüm agent’lar arasında aynı değere sahip olmalıdır. Bu sırrı güvenli bir şekilde saklayın ve başkalarıyla paylaşmayın.