Ana içeriğe atla

1. Desteklenen Sistem ve Gereksinimler

İşletim Sistemi Uyumluluğu

Bu doküman ve pipeline scripti aşağıdaki sistemler için hazırlanmıştır:
  • Linux tabanlı Jenkins agent’ları (Önerilir)
    • Ubuntu 24.04
    • CentOS 7+
  • Shell: bash
  • curl yüklü olmalıdır
⚠️ Jenkins Windows agent üzerinde çalışıyorsa sh yerine bat kullanılmalı ve curl PATH içinde bulunmalıdır.

Jenkins Versiyonu

Test edilen versiyon:
  • Jenkins jenkins/jenkins:lts

Gerekli Jenkins Eklentileri ve Versiyonları

Aşağıdaki eklentiler kurulu olmalıdır:
  • Pipeline (2.6+)
  • Pipeline Utility Steps (2.15.0+)
  • Credentials Binding Plugin (1.27+)
Kontrol etmek için: Manage Jenkins → Plugin Manager → Installed Plugins

Gerekli Harici Araçlar

  • curl 7.68+
  • Java 11 (Jenkins runtime için önerilir)

2. Credential (Token) Tanımlama

API Token’lar Jenkins içerisinde Secret Text olarak tanımlanmalıdır. Eklemek için: Manage Jenkins → Credentials → (Global) → Add Credentials
Kind: Secret Text
Oluşturulması gereken credential’lar:
  • APINIZER_TEST_TOKEN → Kaynak ortam token’ı
  • APINIZER_PROD_TOKEN → Hedef ortam token’ı
Apinizer üzerinde token almak için: Sağ üst profil ikonu → Profile → Personal API Access Tokens

3. Script Nereye Yazılır?

Bu script bir Jenkins Pipeline Job içerisine eklenmelidir. İki yöntem vardır:

Seçenek A — Jenkins Arayüzünden

  1. New Item
  2. Pipeline seç
  3. Pipeline bölümüne git
  4. “Pipeline script” seç
  5. Groovy kodunu yapıştır

4. Pipeline Çalışma Mantığı

Pipeline tek bir ana stage içerir:

Sync TEST → PROD

A. Kimlik Doğrulama

withCredentials bloğu token’ları güvenli şekilde yükler:
  • $TEST_TOKEN
  • $PROD_TOKEN
Log’larda maskelenir.

B. TEST Ortamından Proxy Listesini Çekme

TEST projesindeki (test-cid) tüm proxy’ler JSON formatında alınır. Export API dokümanı:
https://docs.apinizer.com/api-reference/api-proxies/crud/export-api-proxy

C. Export İşlemi

Her proxy TEST ortamından .zip olarak export edilir.

D. Import İşlemi (PROD)

Export edilen .zip ve metadata.json dosyası HTTP PUT metodu ile PROD ortamına gönderilir. Import API dokümanı:
https://docs.apinizer.com/api-reference/api-proxies/crud/import-api-proxy

5. Pipeline Scripti (Groovy)

pipeline {
    agent any
    stages {
        stage('Sync TEST → PROD') {
            steps {
                withCredentials([
                    string(credentialsId: 'APINIZER_TEST_TOKEN', variable: 'TEST_TOKEN'),
                    string(credentialsId: 'APINIZER_PROD_TOKEN', variable: 'PROD_TOKEN')
                ]) {
                    script {

                        sh 'curl -sf -H "Authorization: Bearer $TEST_TOKEN" https://test.apinizer.com/apiops/projects/test-cid/apiProxies/ -o test.json'
                        
                        def test = readJSON file: 'test.json'
                        def testList = test?.resultList ?: []

                        testList.each { proxy ->
                            def proxyName = proxy.name
                            def encodedName = java.net.URLEncoder.encode(proxyName, "UTF-8").replace("+", "%20")
                            echo "--- Aktarılıyor: ${proxyName} ---"

                            sh """
                                set -e
                                
                                curl -s -H "Authorization: Bearer \$TEST_TOKEN" \
                                "https://test.apinizer.com/apiops/projects/test-cid/apiProxies/${encodedName}/export/" \
                                -o "export_tmp.zip"
                                
                                echo '{}' > metadata.json
                                
                                curl -s -X PUT \
                                     -H "Authorization: Bearer \$PROD_TOKEN" \
                                     -F "apiProxyExportFile=@export_tmp.zip" \
                                     -F "metadata=@metadata.json;type=application/json" \
                                     "https://prod.apinizer.com/apiops/projects/prod-cid/apiProxies/${encodedName}/import/" \
                                     -o import_response.json
                                
                                cat import_response.json
                            """
                        }
                    }
                }
            }
        }
    }
}

6. Hata Yönetimi ve Bildirim Mekanizması

Hata Durumu

set -e sayesinde:
  • Export başarısız olursa
  • Import başarısız olursa
  • curl hata kodu dönerse
Pipeline otomatik olarak durur ve build durumu: FAILED olarak işaretlenir.

Hatalı Durum Kime Bildirilir?

Varsayılan olarak Jenkins sadece build’i FAILED yapar. Bildirim için aşağıdaki entegrasyonlardan biri yapılandırılmalıdır:
  • Email Notification
  • Slack
  • Microsoft Teams Webhook
  • Jira
Önerilen yapı:
post {
    failure {
        mail to: 'devops-team@company.com',
             subject: "TEST → PROD Senkronizasyon Hatası",
             body: "Detaylar için Jenkins loglarını kontrol ediniz."
    }
}
Bu yapı sayesinde DevOps veya API ekibi otomatik olarak bilgilendirilir.

7. Önemli Notlar

  • metadata.json şu anda {} (varsayılan) olarak kullanılmaktadır
  • Ortamlar arası endpoint farklılıkları metadata ile yönetilebilir
  • test-cid ve prod-cid proje ID’lerinin doğru olduğundan emin olun
  • PROD senkronizasyonu aktif edilmeden önce test ortamında doğrulama yapılmalıdır

Doküman Versiyonu: 1.1
Kapsam: TEST → PROD API Proxy Senkronizasyonu
Amaç: CI/CD Otomasyonu