Takip et

Ortam Hazırlığı ve Önkoşullar

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 d

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.

  1. GitHub hesabınıza giriş yapın.
  2. Ayarlar (Settings) -> Geliştirici Ayarları (Developer settings) -> OAuth Uygulamaları (OAuth Apps) bölümüne gidin.
  3. Yeni OAuth Uygulaması (New OAuth App) butonuna tıklayın.
  4. 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)
  5. 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=https ve DRONE_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_HOST ve DRONE_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:

  1. Sol menüden “Repositories” (Depolar) seçeneğine tıklayın.
  2. Depolarınızın listesi görünmüyorsa “Sync” (Senkronize Et) butonuna tıklayarak depolarınızı güncelleyin.
  3. CI/CD çalıştırmak istediğiniz deponun yanındaki “Activate” (Etkinleştir) butonuna tıklayın.
  4. 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.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.