GitHub Actions — güçlü bir otomasyon aracıdır: testleri başlatır, uygulamaları dağıtır, veri toplar ve diğer birçok görevi yerine getirir. Ancak iş akışı dış kaynaklara — pazar yerlerine, reklam platformlarına, yurtdışı API'lerine — erişmeye başladığında, coğrafi engeller ve IP sınırlamaları ile karşılaşır. Tek çözüm: proxy'yi doğrudan pipeline'a bağlamak.
GitHub Actions'ta Proxy Neden Gereklidir: Gerçek Senaryolar
Birçok ekip, GitHub Actions'ı yalnızca kod dağıtımı için değil, aynı zamanda iş görevlerini otomatikleştirmek için de kullanıyor: rakip fiyatlarını izleme, pazar yerlerinden veri toplama, reklam hesaplarının otomatik kontrolü ve farklı bölgelerden web sitelerini test etme. Tüm bu görevlerin ortak bir sorunu var — GitHub Actions runner'ı, Microsoft Azure'un sabit bir IP'sine sahiptir ve birçok hizmet bunu engeller veya sınırlar.
İşte proxy olmadan geçilemeyecek belirli durumlar:
- Wildberries, Ozon, Avito'yu Parselleme — bu platformlar, bulut sağlayıcılarının IP aralıklarını kara listeye almıştır. GitHub Actions runner'ından gelen bir istek, 2-3 denemeden sonra engellenecek veya CAPTCHA ile karşılaşacaktır.
- Coğrafi Hedefleme Testi — pazarlamacılar ve QA mühendisleri, web sitesinin veya reklamın Moskova, Berlin veya New York'taki kullanıcılar için nasıl göründüğünü kontrol eder. Proxy olmadan, runner her zaman tek bir bölge için içeriği "görecektir".
- Bölgeye Göre Sınırlı API'lerle Çalışma — bazı API'ler (örneğin, bölgesel Google Ads sürümleri, belirli ayarlarla Facebook Marketing API) isteğin coğrafi konumuna bağlı olarak farklı veriler döndürür.
- Rakip İzleme — otomatik fiyat, kampanya ve ürün çeşitliliği toplama, tekrar eden veri merkezi IP'si ile kolayca tespit edilir.
- Reklam Kontrollerinin Otomasyonu — aracı ve performans pazarlamacıları, CI/CD'deki scriptler aracılığıyla reklamların durumu, bakiyeleri ve metrikleri için otomatik kontroller başlatır.
- Dış Hizmetlerle Entegrasyon Testleri — bazı hizmetler, güvenlik nedenleriyle Azure aralıklarından gelen istekleri engeller ve testler açıklama olmadan başarısız olur.
Tüm bu durumlarda proxy, sorunu köklü bir şekilde çözer: iş akışı, Microsoft'un bulut sunucusundan değil, gerekli şehirden sıradan bir kullanıcıdan gelen bir istek gibi görünmeye başlar.
GitHub Actions Ağ ile Nasıl Çalışır
Proxy'yi ayarlamadan önce, GitHub Actions'taki ağ mimarisini anlamak önemlidir. Standart bir ubuntu-latest runner'ında iş akışını başlattığınızda, görev Microsoft Azure altyapısındaki sanal bir makinede çalışır. Bu tür her makinenin Azure aralıklarından bir genel IP'si vardır — ve dış hizmetler bu IP'yi görür.
GitHub Actions'taki ağın ana özellikleri:
- Her başlatmada IP değişir — ancak bilinen Azure aralıkları içinde kalır, bu da kolayca tespit edilir.
- Proxy desteği yoktur — GitHub, trafiği proxy'leme için yerel bir mekanizma sağlamaz.
- Ortam değişkenleri küresel olarak çalışır —
HTTP_PROXY'yu iş düzeyinde ayarlarsanız, bu iş içindeki tüm adımlar proxy'yi kullanır. - Self-hosted runners — kendi sunucunuzda bir runner çalıştırdığınız alternatif. Bu durumda, proxy sunucu düzeyinde, iş akışı düzeyinde değil ayarlanır.
Çoğu görev için en iyi yaklaşım, proxy'yi doğrudan iş akışı dosyasında ortam değişkenleri aracılığıyla ayarlamaktır (.github/workflows/your-workflow.yml). Bu, çoğu araç için çalışan evrensel bir yöntemdir: curl, wget, Python requests, Node.js http, Go net/http ve diğerleri.
CI/CD için Hangi Proxy Türü Seçilmeli
Proxy türü seçimi, göreve bağlıdır. CI/CD pipeline'ları için üç seçenek geçerlidir ve her birinin kendi nişi vardır:
| Proxy Türü | Hangi Görevler İçin | Hız | Güven Seviyesi |
|---|---|---|---|
| Konut Proxy'leri | Korunan siteleri parselleme, coğrafi hedefleme, pazar yerlerini izleme | Orta | Yüksek — gerçek ev IP'leri |
| Mobil Proxy'ler | Mobil versiyonları test etme, sosyal medya ile çalışma, Facebook/TikTok API | Orta | Maksimum — operatör IP'leri |
| Veri Merkezi Proxy'leri | Entegrasyon testleri, korumasız API'lere istekler, yüksek yük | Yüksek | Orta |
Pratik Kural: Eğer iş akışınız Wildberries, Ozon veya diğer bot koruma sistemine sahip pazar yerlerini parseliyorsa — konut proxy'leri alın. Facebook Ads veya TikTok Ads reklam hesaplarını test ediyorsanız — mobil proxy'ler kullanın. Basit entegrasyon testleri ve açık API istekleri için veri merkezi proxy'leri yeterlidir: daha hızlı ve daha ucuzdur.
💡 Protokoller Hakkında Önemli Bilgiler
GitHub Actions için HTTP/HTTPS proxy kullanmak daha tercih edilir — bunlar, ek ayar gerektirmeden çoğu araç tarafından desteklenir. SOCKS5 de çalışır, ancak her araçta açıkça belirtilmesi gerekir. Sağlayıcınız her iki protokolü de destekliyorsa — HTTP ile başlayın.
Proxy'yi Ortam Değişkenleri ile Ayarlama
GitHub Actions'ta proxy'yi bağlamanın en evrensel yolu, standart ortam değişkenlerini ayarlamaktır: HTTP_PROXY, HTTPS_PROXY ve NO_PROXY. Çoğu komut satırı aracı ve programlama dili bunları otomatik olarak alır.
Proxy ile temel iş akışı yapısı şöyle görünür:
name: Proxy ile İş Akışı
on:
schedule:
- cron: '0 9 * * *'
workflow_dispatch:
jobs:
scrape-data:
runs-on: ubuntu-latest
env:
HTTP_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
HTTPS_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
NO_PROXY: localhost,127.0.0.1,github.com
steps:
- name: Depoyu Kontrol Et
uses: actions/checkout@v4
- name: Mevcut IP'yi Kontrol Et (kontrol için)
run: curl -s https://api.ipify.org
- name: Ana Scripti Çalıştır
run: python scripts/scraper.py
NO_PROXY bloğuna dikkat edin — burada trafiğin proxy'lenmemesi gereken adresleri eklemeniz gerekir. En azından localhost ve 127.0.0.1 eklenmelidir. Ayrıca, depo ile yapılan işlemlerin (checkout, push) doğrudan gitmesi için github.com'u eklemek de önerilir.
Eğer proxy kimlik doğrulaması yoksa (sadece IP ve port), format basitleşir:
env:
HTTP_PROXY: http://203.0.113.10:8080
HTTPS_PROXY: http://203.0.113.10:8080
NO_PROXY: localhost,127.0.0.1
SOCKS5 proxy için URL'deki sadece şema değişir:
env:
HTTP_PROXY: socks5://user:password@proxy-host:1080
HTTPS_PROXY: socks5://user:password@proxy-host:1080
curl, wget ve HTTP İstekleri için Proxy
Eğer ortam değişkenleri iş düzeyinde ayarlandıysa (yukarıda gösterildiği gibi), curl ve wget bunları otomatik olarak alır. Ancak bazen proxy'yi açıkça belirtmek gerekebilir — örneğin, belirli bir adım için veya hata ayıklama sırasında.
curl'da proxy'yi açıkça belirtme:
- name: Proxy ile Veri Al
run: |
curl -x http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }} \
-s \
-o output.json \
https://api.example.com/data
# Proxy üzerinden kontrol
curl -x http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }} \
-s https://api.ipify.org?format=json
wget için:
- name: Proxy Üzerinden wget ile İndir
run: |
wget -e "https_proxy=http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}" \
-q \
-O data.html \
https://target-site.com/page
Hata ayıklama için yararlı bir adım, iş akışının başında IP adresini kontrol etmektir. Eğer proxy düzgün çalışıyorsa, Azure'dan değil, proxy sunucusunun IP'sini göreceksiniz:
- name: Proxy'nin Aktif Olduğunu Doğrula
run: |
echo "=== Proxy Olmadan IP ==="
curl -s --noproxy '*' https://api.ipify.org || echo "Doğrudan istek başarısız"
echo ""
echo "=== Proxy Üzerinden IP ==="
curl -s https://api.ipify.org
Workflow İçindeki Python Scriptlerinde Proxy
Python, CI/CD'de scriptler için en popüler dillerden biridir. requests kütüphanesi, ortam değişkenlerini otomatik olarak okur: HTTP_PROXY ve HTTPS_PROXY, eğer ayarlanmışlarsa. Ancak daha esnek bir yönetim için proxy'yi açıkça iletmek daha iyidir.
Proxy'yi açıkça ileten bir Python scripti örneği:
import os
import requests
# Proxy verilerini ortam değişkenlerinden okuma
proxy_host = os.environ.get('PROXY_HOST')
proxy_port = os.environ.get('PROXY_PORT')
proxy_user = os.environ.get('PROXY_USER')
proxy_pass = os.environ.get('PROXY_PASS')
proxies = {
'http': f'http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}',
'https': f'http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}',
}
# İsteklerde proxy kullanma
response = requests.get(
'https://www.wildberries.ru/catalog/123456/detail.aspx',
proxies=proxies,
timeout=30,
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
)
print(f"Durum: {response.status_code}")
print(f"İçerik uzunluğu: {len(response.content)}")
İş akışı dosyasında değişkenleri ayrı gizli bilgiler olarak iletmeniz gerekir (tam URL olarak değil), böylece script bunları toplayabilir:
- name: Python Scraper'ı Çalıştır
env:
PROXY_HOST: ${{ secrets.PROXY_HOST }}
PROXY_PORT: ${{ secrets.PROXY_PORT }}
PROXY_USER: ${{ secrets.PROXY_USER }}
PROXY_PASS: ${{ secrets.PROXY_PASS }}
run: python scripts/scraper.py
Playwright veya Selenium ile Python'da proxy yapılandırması biraz farklıdır:
# Playwright
from playwright.sync_api import sync_playwright
import os
proxy_url = f"http://{os.environ['PROXY_USER']}:{os.environ['PROXY_PASS']}@{os.environ['PROXY_HOST']}:{os.environ['PROXY_PORT']}"
with sync_playwright() as p:
browser = p.chromium.launch(
proxy={
"server": proxy_url
}
)
page = browser.new_page()
page.goto("https://target-site.com")
# ... sonraki mantık
browser.close()
Node.js ve npm Görevlerinde Proxy
Node.js, sistem değişkenlerini otomatik olarak HTTP_PROXY olarak okumaz — ya özel kütüphaneler kullanmanız ya da proxy'yi açıkça ayarlamanız gerekir. En uygun seçenek, https-proxy-agent paketi veya proxy yapılandırması ile axios'dır.
// axios kullanarak
const axios = require('axios');
const proxyConfig = {
host: process.env.PROXY_HOST,
port: parseInt(process.env.PROXY_PORT),
auth: {
username: process.env.PROXY_USER,
password: process.env.PROXY_PASS
}
};
async function fetchData(url) {
try {
const response = await axios.get(url, {
proxy: proxyConfig,
timeout: 30000,
headers: {
'User-Agent': 'Mozilla/5.0 (compatible; MyBot/1.0)'
}
});
return response.data;
} catch (error) {
console.error(`İstek başarısız oldu: ${error.message}`);
throw error;
}
}
fetchData('https://api.example.com/prices')
.then(data => console.log(JSON.stringify(data, null, 2)))
.catch(() => process.exit(1));
npm komutları için (örneğin, npm kurumsal proxy üzerinden paket indirmeye çalışıyorsa) yapılandırma daha basittir:
- name: npm proxy'yi yapılandır
run: |
npm config set proxy http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
npm config set https-proxy http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
- name: Bağımlılıkları Yükle
run: npm install
- name: npm proxy'yi sıfırla (kullanımdan sonra temizle)
run: |
npm config delete proxy
npm config delete https-proxy
Proxy Verilerini GitHub Secrets'ta Güvenli Saklama
Proxy verilerini (host, port, kullanıcı adı, şifre) asla iş akışı dosyasında açık bir şekilde saklamayın. Bu, ciddi bir güvenlik hatasıdır: iş akışı dosyaları depoda saklanır ve proje katılımcılarının hepsine veya tamamen halka açık olarak görünebilir.
Doğru yaklaşım — GitHub Secrets. İşte adım adım talimatlar:
- GitHub'da depoyu açın
- Ayarlar → Gizli ve Değişkenler → Eylemler kısmına gidin
- Yeni depo gizli bilgisi butonuna tıklayın
- Dört gizli bilgi oluşturun:
PROXY_HOST,PROXY_PORT,PROXY_USER,PROXY_PASS - İş akışında bunlara
${{ secrets.PROXY_HOST }}sözdizimi ile erişin
🔒 Ek Güvenlik Önlemleri
- Farklı ortamlar (staging/production) farklı proxy'ler kullanıyorsa Ortam gizli bilgilerini kullanın
- Gizli bilgilere erişimi Ortam koruma kuralları ile sınırlayın — üretim için manuel onay isteyin
- Proxy kimlik bilgilerini düzenli olarak döndürün — her 30-90 günde bir şifreleri değiştirin
- Gizli bilgilerin değerlerini
echoile loglara yazmayın — GitHub bunları otomatik olarak maskeleyebilir, ancak riske girmemek daha iyidir
Eğer dönen proxy'ler kullanıyorsanız (IP her istekte veya belirli bir zaman diliminde değişiyorsa), genellikle yalnızca bir endpoint saklamak yeterlidir — proxy sağlayıcısı IP havuzunu kendisi yönetir. Bu durumda, gizli bilgilerde yalnızca bir döngü geçidi host ve portu olacaktır.
Proxy Rotasyonu ve Hata Yönetimi
Kaliteli proxy'ler bile bazen arızalanabilir: IP geçici bir yasakla karşılaşabilir, oturum kopabilir veya sunucu yanıt vermeyebilir. Gözetimsiz olarak otomatik çalışan CI/CD pipeline'ları için bu tür durumları önceden düşünmek önemlidir.
Strateji 1: Aynı Proxy ile Tekrar Dene
import requests
import time
import os
def fetch_with_retry(url, max_retries=3, delay=5):
proxies = {
'http': f"http://{os.environ['PROXY_USER']}:{os.environ['PROXY_PASS']}@{os.environ['PROXY_HOST']}:{os.environ['PROXY_PORT']}",
'https': f"http://{os.environ['PROXY_USER']}:{os.environ['PROXY_PASS']}@{os.environ['PROXY_HOST']}:{os.environ['PROXY_PORT']}",
}
for attempt in range(max_retries):
try:
response = requests.get(url, proxies=proxies, timeout=30)
response.raise_for_status()
return response
except requests.exceptions.RequestException as e:
print(f"{attempt + 1}. deneme başarısız: {e}")
if attempt < max_retries - 1:
print(f"{delay} saniye içinde yeniden deniyor...")
time.sleep(delay)
delay *= 2 # Üstel gecikme
raise Exception(f"{max_retries} denemenin hepsi {url} için başarısız oldu")
Strateji 2: Proxy Listesi ile Geçiş Yapma
Eğer birden fazla proxy sunucunuz varsa, bunların listesini bir gizli bilgi içinde (virgülle) saklayabilir ve hata durumunda geçiş yapabilirsiniz:
import os
import requests
import random
# PROXY_LIST gizli bilgisi: "host1:port1:user1:pass1,host2:port2:user2:pass2" içerir
proxy_list_raw = os.environ.get('PROXY_LIST', '').split(',')
def parse_proxy(proxy_str):
parts = proxy_str.strip().split(':')
if len(parts) == 4:
host, port, user, password = parts
return {
'http': f'http://{user}:{password}@{host}:{port}',
'https': f'http://{user}:{password}@{host}:{port}',
}
return None
proxies = [p for p in [parse_proxy(raw) for raw in proxy_list_raw] if p]
def fetch_with_proxy_rotation(url):
random.shuffle(proxies) # Rastgele sıralama
for proxy in proxies:
try:
response = requests.get(url, proxies=proxy, timeout=20)
if response.status_code == 200:
return response
except Exception as e:
print(f"Proxy başarısız oldu: {e}, bir sonraki proxy'ye geçiliyor...")
raise Exception("Tüm proxy'ler tükendi")
Strateji 3: Dönen Endpoint Kullanma
En basit seçenek, tek bir dönen geçit ile bir proxy sağlayıcısı kullanmaktır. Bu durumda, bir adrese bağlanırsınız ve sağlayıcı otomatik olarak havuzdan farklı IP'ler verir. Kodda herhangi bir döndürme mantığına gerek yoktur — sadece bir bağlantı satırı yeterlidir.
Gerçek Senaryolar: Veri Toplama, Testler, İzleme
GitHub Actions ile proxy kullanan ekiplerin en sık karşılaştığı üç belirli senaryoyu inceleyelim.
Senaryo 1: Wildberries'de Günlük Fiyat İzleme
Pazar yeri satıcıları genellikle rakip fiyatlarını otomatik olarak toplamak için ayarlama yapar. İş akışı belirli bir zaman diliminde (örneğin, her sabah 07:00'de) başlatılır, verileri toplar ve bunları Google Sheets'e kaydeder veya Telegram'a gönderir.
name: Günlük Fiyat İzleyici
on:
schedule:
- cron: '0 4 * * *' # 07:00 MSK (UTC+3)
jobs:
monitor-prices:
runs-on: ubuntu-latest
env:
HTTP_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
HTTPS_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
NO_PROXY: github.com,api.github.com
steps:
- uses: actions/checkout@v4
- name: Python'ı Ayarla
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Bağımlılıkları Yükle
run: pip install requests beautifulsoup4 gspread
- name: Fiyat Scraper'ı Çalıştır
env:
GOOGLE_SHEETS_KEY: ${{ secrets.GOOGLE_SHEETS_KEY }}
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
run: python scripts/price_monitor.py
- name: Sonuçları Yükle
uses: actions/upload-artifact@v4
with:
name: price-data-${{ github.run_id }}
path: output/prices.json
Senaryo 2: Coğrafi Hedefleme ile Web Sitesi Testi
Pazarlamacılar ve QA ekipleri, web sitesinin veya reklamın farklı şehirlerden kullanıcılar için nasıl göründüğünü kontrol etmek için proxy kullanır. Özellikle bölgesel fiyatlar, içerik ve yönlendirmelerin kontrolü için geçerlidir.
name: Coğrafi Hedefleme Testleri
on:
push:
branches: [main]
pull_request:
jobs:
test-moscow:
runs-on: ubuntu-latest
name: Moskova'dan Test
steps:
- uses: actions/checkout@v4
- name: Coğrafi Testleri Çalıştır (RU/Moskova proxy)
env:
HTTP_PROXY: http://${{ secrets.PROXY_RU_USER }}:${{ secrets.PROXY_RU_PASS }}@${{ secrets.PROXY_RU_HOST }}:${{ secrets.PROXY_RU_PORT }}
HTTPS_PROXY: http://${{ secrets.PROXY_RU_USER }}:${{ secrets.PROXY_RU_PASS }}@${{ secrets.PROXY_RU_HOST }}:${{ secrets.PROXY_RU_PORT }}
run: |
python tests/geo_test.py --region=RU --city=Moscow
test-germany:
runs-on: ubuntu-latest
name: Almanya'dan Test
steps:
- uses: actions/checkout@v4
- name: Coğrafi Testleri Çalıştır (DE proxy)
env:
HTTP_PROXY: http://${{ secrets.PROXY_DE_USER }}:${{ secrets.PROXY_DE_PASS }}@${{ secrets.PROXY_DE_HOST }}:${{ secrets.PROXY_DE_PORT }}
HTTPS_PROXY: http://${{ secrets.PROXY_DE_USER }}:${{ secrets.PROXY_DE_PASS }}@${{ secrets.PROXY_DE_HOST }}:${{ secrets.PROXY_DE_PORT }}
run: |
python tests/geo_test.py --region=DE
Senaryo 3: Reklam Hesaplarının Otomatik Kontrolü
Arbitrajcılar ve performans pazarlamacıları, sıklıkla GitHub Actions'ı Facebook Ads reklam hesaplarının durumu, bakiyeleri ve metriklerini otomatik olarak kontrol etmek için kullanır. Azure aralıklarından gelen Facebook Marketing API istekleri ek güvenlik kontrolleri gerektirebilir — proxy bunu aşmaya yardımcı olur.
name: Reklam Hesabı Sağlık Kontrolü
on:
schedule:
- cron: '*/30 6-22 * * *' # 06:00'dan 22:00'ye kadar her 30 dakikada bir MSK
jobs:
check-accounts:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Python'ı Ayarla
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Bağımlılıkları Yükle
run: pip install requests
- name: Facebook Ads hesaplarını kontrol et
env:
HTTP_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
HTTPS_PROXY: http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}
FB_ACCESS_TOKEN: ${{ secrets.FB_ACCESS_TOKEN }}
ACCOUNT_IDS: ${{ secrets.FB_ACCOUNT_IDS }}
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
run: python scripts/check_fb_accounts.py
📋 Proxy ile İş Akışını Başlatmadan Önce Kontrol Listesi
- ✅ Proxy verileri GitHub Secrets'a eklenmiş (iş akışı dosyasına değil)
- ✅
NO_PROXYdeğişkenlerigithub.com'u içeriyor - ✅ Hata ayıklama için IP kontrol adımı eklenmiş
- ✅ Hata yönetimi ve tekrar deneme mantığı uygulanmış
- ✅ Proxy türü göreve uygun (korunan siteler için konut proxy'leri)
- ✅ Hatalar için bildirimler ayarlanmış (Telegram, Slack veya e-posta)
- ✅ İş akışı, zamanlama eklenmeden önce
workflow_dispatchile manuel olarak test edilmiştir
Sonuç
GitHub Actions'ta proxy ayarlamak, doğru yaklaşımı bilirseniz zor bir görev değildir. Bu kılavuzdan çıkarılacak ana noktalar:
- Ortam Değişkenleri
HTTP_PROXY/HTTPS_PROXY— çoğu araç için kodda değişiklik yapmadan çalışan evrensel bir yöntemdir. - GitHub Secrets — proxy kimlik bilgilerini saklamak için tek doğru yerdir.
- Proxy türü önemlidir: korunan pazar yerlerini parsellemek için konut IP'leri, reklam platformları için mobil, basit API istekleri için veri merkezi proxy'leri uygundur.
- Tekrar deneme mantığı zorunludur gözetimsiz çalışan pipeline'lar için.
- İş akışının başında IP kontrol adımı saatlerce hata ayıklamayı tasarruf ettirir.
Eğer GitHub Actions iş akışınız pazar yerleri, reklam platformları veya herhangi bir bot koruma sistemine sahip hizmetlerle çalışıyorsa, konut proxy'leri kullanmanızı öneririz — bunlar, gerçek ev kullanıcılarının IP'lerine sahiptir ve GitHub sunucularının bulut adreslerine göre çok daha az engelleme ile karşılaşır. Facebook Ads, TikTok veya diğer sosyal platformlarla ilgili görevler için en iyi seçim, mobil proxy'ler olacaktır — bunlar, platformlar tarafından maksimum güven seviyesi sağlar.
```