RehberSalesforce

Salesforce DevOps Otomasyonu: Github Actions ile Verimli Geliştirme Süreçleri

Salesforce platformunda uygulama geliştirme süreçlerini yönetmek, özellikle büyük ekipler ve karmaşık projeler söz konusu olduğunda zorlayıcı olabilir. Geleneksel geliştirme yaklaşımları, manuel kontroller ve değişim yönetimi süreçleri zaman alıcı olmanın yanı sıra hata riskini de artırır. DevOps prensiplerinin Salesforce ekosistemiyle buluşması, bu zorlukların üstesinden gelmenin en etkili yollarından biridir.

Github Actions, Salesforce DevOps süreçlerinizi otomatikleştirmek için güçlü bir araç sunar. Bu yazıda, Salesforce geliştirme ekiplerinin Github Actions kullanarak nasıl daha verimli, güvenilir ve tutarlı bir geliştirme süreci oluşturabileceklerini inceleyeceğiz. Kod kalitesini artıran, deployment süreçlerini hızlandıran ve ekip işbirliğini geliştiren Github Actions entegrasyonları hakkında pratik bilgiler sunacağız.

Salesforce DevOps’un Temelleri

DevOps, yazılım geliştirme (Development) ve operasyon (Operations) süreçlerinin birleştirilmesini ifade eden bir kültür ve uygulama setidir. Salesforce ekosisteminde DevOps, geleneksel “change set” tabanlı yaklaşımdan sürüm kontrolü, otomatik testler ve sürekli entegrasyon/sürekli dağıtım (CI/CD) odaklı modern bir yaklaşıma geçiş anlamına gelir.

Geleneksel Salesforce geliştirme süreçlerinde, geliştiriciler doğrudan bir sandbox ortamında çalışır, değişikliklerini manuel olarak test eder ve sonra change set’ler veya benzer araçlarla bu değişiklikleri prodüksiyon ortamına aktarırlar. Bu yaklaşım, birkaç sorun doğurur:

  • Paralel çalışma zorluğu: Birden fazla geliştirici aynı komponentler üzerinde çalıştığında çakışmalar yaşanabilir
  • Sürüm kontrolü eksikliği: Değişikliklerin geçmişini takip etmek zorlaşır
  • Manuel testler: Test süreçleri tutarlı değildir ve insan hatası riski yüksektir
  • Yavaş deployment: Değişiklikleri üretim ortamına almak zaman alır

Salesforce DevOps ise bu sorunları şu temel prensipler etrafında çözer:

  1. Sürüm kontrolü: Tüm metadata ve kod değişiklikleri Git gibi bir sürüm kontrol sisteminde saklanır
  2. Otomasyon: Test, build ve deployment süreçleri otomatikleştirilir
  3. Sürekli entegrasyon: Değişiklikler sürekli olarak test edilir ve ana dala entegre edilir
  4. Sürekli dağıtım: Doğrulanan değişiklikler otomatik olarak hedef ortamlara dağıtılır

Bu prensiplerin uygulanmasında otomasyon kritik bir rol oynar. Tam da bu noktada Github Actions devreye girer ve Salesforce DevOps süreçlerinizi otomatikleştirmenin güçlü bir yolunu sunar.

Github Actions ile Salesforce CI/CD Pipeline Oluşturma

Github Actions, Github repository’lerinizde yazılım geliştirme workflow’larını otomatikleştirmenizi sağlayan bir CI/CD platformudur. Salesforce uygulamaları için özellikle kullanışlıdır çünkü Salesforce DX CLI ile sorunsuz entegre olur ve birçok hazır bileşen sunar.

Temel Workflow Yapısı

Github Actions workflow’ları, repository’nizin .github/workflows dizininde yer alan YAML dosyalarında tanımlanır. Temel bir Salesforce CI/CD workflow’u şu bileşenleri içerir:

name: Salesforce CI/CD

on:
    push:
       branches: [ main, develop ]   pull_request:
       branches: [ main, develop ]

jobs:
    validate-and-test:
        runs-on: ubuntu-latest
        steps:
               – uses: actions/checkout@v3
               – name: Setup Node.js
                  uses: actions/setup-node@v3
                  with:
                      node-version: ’16’

               – name: Install SFDX CLI
                  run: npm install -g sfdx-cli

               – name: Authorize Dev Hub
                  run: |
                      echo ${{ secrets.SFDX_AUTH_URL }} > ./SFDX_AUTH_URL.txt
                      sfdx auth:sfdxurl:store -f ./SFDX_AUTH_URL.txt -a DevHub

               – name: Create Scratch Org
                  run: sfdx force:org:create -f config/project-scratch-def.json -a scratch-org -s

               – name: Deploy to Scratch Org
                  run: sfdx force:source:push -u scratch-org

               – name: Run Apex Tests
                  run: sfdx force:apex:test:run -u scratch-org –codecoverage –resultformat json

Bu basit workflow, kod değişiklikleri yapıldığında veya Pull Request açıldığında otomatik olarak çalışır. Kodunuzu doğrular, bir scratch org oluşturur, değişiklikleri bu ortama deploy eder ve Apex testlerini çalıştırır.

SFDX CLI Entegrasyonu

Github Actions’ın Salesforce DevOps süreçleriyle entegrasyonunda en önemli unsur, Salesforce DX Command Line Interface (SFDX CLI) kullanımıdır. SFDX CLI, Salesforce ortamları üzerinde programatik işlemler yapmanızı sağlayan güçlü bir araçtır.

Github Actions workflow’larında, SFDX CLI şu görevleri otomatikleştirmek için kullanılabilir:

  • Ortam Yetkilendirme: JWT veya SFDX Auth URL kullanarak DevHub veya sandbox ortamlarına bağlanma
  • Org Oluşturma: Test için scratch org’lar oluşturma
  • Kod Dağıtımı: Metadata’yı hedef ortamlara deploy etme
  • Veri İşlemleri: Test verisi yükleme veya çıkarma
  • Test Çalıştırma: Apex testlerini çalıştırma ve sonuçları analiz etme
  • Statik Analiz: PMD veya ESLint gibi araçlarla kod kalitesi kontrolü

Kapsamlı Bir CI/CD Pipeline Örneği

Daha gelişmiş bir Salesforce CI/CD pipeline’ı, şu aşamaları içerebilir:

  1. Kod Doğrulama: Syntax hataları ve kod standartlarını kontrol etme
  2. Statik Kod Analizi: Kod kalitesini ve güvenlik açıklarını analiz etme
  3. Birim Testleri: Apex testlerini çalıştırma ve kod kapsamını kontrol etme
  4. Paket Oluşturma: Dağıtım için paket sürümü oluşturma
  5. İntegrasyon Testleri: Entegrasyon ortamında end-to-end testler
  6. UAT/Staging Deployment: Kullanıcı kabul testi için staging ortamına deploy
  7. Prodüksiyon Deployment: Onaylanan değişiklikleri prodüksiyona deploy etme

Github Actions, bu aşamaların tamamını otomatikleştirebilir ve workflow’larınızı branch’lere, ortamlara veya özel koşullara göre yapılandırmanıza olanak tanır.

Salesforce DevOps Otomasyonunda Best Practice’ler

Salesforce DevOps süreçlerinizi Github Actions ile otomatikleştirirken, verimlilik ve güvenliği artırmak için bazı best practice’leri izlemeniz önemlidir.

Kod Doğrulama ve Test Otomasyonu

Kod kalitesini sağlamak için her commit ve pull request için otomatik doğrulama süreçleri oluşturun:

  • Apex PMD ile statik kod analizi yaparak potansiyel sorunları erken tespit edin
  • ApexDox ile otomatik dokümantasyon oluşturun
  • Minimum test kapsamı eşikleri belirleyin (genellikle %75-85)
  • Eskimiş API kullanımlarını otomatik olarak tespit edin

name: Run PMD Analysis 
    run: |
        wget https://github.com/pmd/pmd/releases/download/pmd_releases%2F6.55.0/pmd-bin-6.55.0.zip
        unzip pmd-bin-6.55.0.zip
        ./pmd-bin-6.55.0/bin/run.sh pmd -d force-app/ -R rulesets/apex/quickstart.xml -f text

Branch Yönetimi ve Deployment Stratejileri

Etkili bir git-flow stratejisi uygulayarak deployment süreçlerinizi yapılandırın:

  • Feature Branches: Her yeni özellik için ayrı branch’ler
  • Develop Branch: Tüm feature’ların birleştirildiği entegrasyon branch’i
  • Release Branches: Sürüm bazlı deployment’lar için
  • Hotfix Branches: Acil düzeltmeler için

Github Actions workflow’larınızı bu branch stratejinize göre yapılandırın:

on:
   push:
        branches: [ develop, release/*, hotfix/* ]    pull_request:
        branches: [ develop, main ]

Metadata Yönetimi ve Konflikt Çözümü

Salesforce metadata yönetimi, DevOps süreçlerindeki en zorlu alanlardan biridir. Şu best practice’leri izleyin:

  • Package.xml bazlı deployment yerine source format kullanın
  • Destructive Changes (silinecek öğeler) için ayrı bir süreç tanımlayın
  • Metadata API yerine mümkün olduğunca Source API kullanın
  • Conflict Detection için pre-deployment check’ler ekleyin
  • Repo’yu parçalara ayırarak (monorepo vs multirepo) büyük projeleri yönetin

Gerçek Dünya Senaryoları ve Çözümleri

Büyük Salesforce Organizasyonları için Çözümler

Kurumsal ölçekte Salesforce uygulamaları geliştirenler için özel zorluklar vardır:

  • Multi-Org Stratejisi: Birden fazla Salesforce org’u yönetirken, tekrarlanan metadata için paylaşılabilir paketler oluşturun ve bunları merkezi bir repository’den yönetin.
  • Koordineli Releases: Birbirine bağımlı komponentler için release koordinasyonu gerekir. Github Actions’da koşullu workflow’lar oluşturarak bağımlılıkları yönetin:

jobs:
identify-changes:
runs-on: ubuntu-latest
outputs:
core-changed: ${{ steps.filter.outputs.core }}
ui-changed: ${{ steps.filter.outputs.ui }}
 steps:
uses: actions/checkout@v3
uses: dorny/paths-filter@v2
id: filter
with:
filters: |
core:
– ‘force-app/core/**’
ui:
‘force-app/ui/**’

deploy-core:
needs: identify-changes
if: ${{ needs.identify-changes.outputs.core-changed == ‘true’ }}
runs-on: ubuntu-latest
steps:
# Core deployment steps

Yaygın Problemler ve Çözüm Önerileri

  1. Süreli Github Actions Görevleri: Salesforce deployment’ları büyük org’larda uzun sürebilir ve Github Actions’ın 6 saatlik zaman sınırına takılabilir. Bu durumda deployment işlemlerini parçalara ayırın: 

    name: Deploy Core Components
       run: sfdx force:source:deploy -p force-app/core- name: Deploy UI Components
    run: sfdx force:source:deploy -p force-app/ui

     

  2. Güvenlik Kimlik Bilgileri Yönetimi: Github Secrets kullanarak hassas bilgileri güvende tutun ve JWT tabanlı kimlik doğrulama tercih edin:name: JWT Auth to Salesforce
    run: |
    echo “${{ secrets.SF_PRIVATE_KEY }}” > server.key
             sfdx auth:jwt:grant –clientid ${{ secrets.SF_CONSUMER_KEY }} –jwtkeyfile server.key –username ${{ secrets.SF_USERNAME }} –instanceurl ${{ secrets.SF_LOGIN_URL }}

     

  3. Test Coverage Problems: Düşük test kapsamı sorunları için otomatik analiz ekleyin:

name: Check Test Coverage
run: |
 COVERAGE=$(sfdx force:apex:test:run -c -r json | jq ‘.result.coverage.coverage’)
       if (( $(echo “$COVERAGE < 75” | bc -l) )); then
          echo “Test coverage is below 75%”
          exit 1
      fi

Vaka Çalışması: Başarılı Salesforce DevOps Dönüşümü

Finansal hizmetler sektöründe faaliyet gösteren bir şirket, manual deployment’lardan kaynaklanan sorunlarla boğuşuyordu:

  • Deployment’lar ortalama 4-5 saat sürüyordu
  • Ayda 2-3 kez prodüksiyon hataları yaşanıyordu
  • Geliştiricilerin %40’ı deployment süreçlerine dahil oluyordu

Github Actions tabanlı Salesforce DevOps otomasyonu uyguladıktan sonra:

  • Deployment süresi 20 dakikaya düştü
  • Prodüksiyon hataları %90 azaldı
  • Geliştiricilerin sadece %5’i deployment süreçlerine dahil oluyor
  • Release frekansı haftada bire yükseldi

Bu dönüşümün temelinde, tam otomatik test, statik kod analizi ve çok aşamalı deployment pipeline gibi Github Actions workflow’ları vardı.

DevOps Otomasyonuyla Geleceğe Adım Atın

Salesforce DevOps otomasyonu, sadece deployment süreçlerini hızlandırmakla kalmaz, aynı zamanda kod kalitesini artırır, riski azaltır ve geliştirme ekiplerinin daha yenilikçi projeler üzerine odaklanmasını sağlar. Github Actions ile bu süreçleri otomatikleştirmek, modern Salesforce geliştirme ekipleri için artık bir tercih değil, rekabetçi kalabilmek için bir zorunluluktur.

Önümüzdeki dönemde, Salesforce DevOps trendleri şu yönlerde ilerleyecek:

  • Low-Code DevOps: Geliştiriciler dışındaki ekip üyelerinin de DevOps süreçlerine katılımı
  • DevSecOps: Güvenlik kontrollerinin CI/CD pipeline’larına daha derin entegrasyonu
  • AI Destekli Otomasyonlar: Deployment risklerini tahmin eden ve optimize eden yapay zeka uygulamaları
  • Cross-Cloud DevOps: Salesforce dışındaki sistemlerle entegre DevOps süreçleri

Organizasyonunuzun DevOps yolculuğunda bir sonraki adımı atmak için, başlangıç olarak basit Github Actions workflow’ları oluşturun ve zamanla bunları genişleterek tam kapsamlı bir CI/CD pipeline’a dönüştürün. Küçük başlayın, ölçün ve büyütün – başarılı DevOps dönüşümlerinin ortak özelliği budur.

İlgili Makaleler

Bir yanıt yazın

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

Başa dön tuşu