Automatically Deploying C# Backend to FTP with Github Actions

Merhaba, ben Cem Levent Avcı. Eskişehir Osmangazi Üniversitesi Bilgisayar Mühendisliği bölümünde 4. sınıf öğrencisiyim. Aynı zamanda hem kendi portföy projelerimi hem de aldığım freelance projeleri geliştiriyorum. Frontend ve backend projeleri üzerinde çalışıyor, özellikle Laravel, Next.js ve C# gibi teknolojilerle çeşitli uygulamalar geliştiriyorum. Projelerimi CI/CD pipeline’larıyla otomatik hale getirmeye çalışıyorum. Bu yazıda, C# backend projesini Github Actions kullanarak otomatik olarak build edip FTP ile deploy etme sürecini adım adım göstereceğim.
Github Actions Nedir ve Ne İşe Yarar?
Github Actions, Github üzerinde çalışan bir CI/CD (Continuous Integration / Continuous Deployment) aracıdır. Yani, bu araç aracılığıyla projemizdeki yapılan her değişikliği otomatik olarak test edebilir, build edebilir ve deploy edebiliyoruz.
CI/CD nedir?
Continuous Integration (Sürekli Entegrasyon), kod değişikliklerinin sürekli olarak ana proje ile entegre edildiği süreçtir. Her değişiklik, otomatik testlerden geçer ve hatalar erken aşamada tespit edilir. Bu sayede ekipler kod kalitesini yüksek tutabilir ve çakışmaları minimize edebilir.
Continuous Deployment / Delivery (Sürekli Yayınlama / Teslimat), testleri geçen kodun otomatik olarak production veya staging ortamına deploy edilmesi sürecidir. Continuous Delivery, deploy’u manuel onay ile yaparken, Continuous Deployment tamamen otomatik gerçekleşir. Böylece yeni özellikler veya düzeltmeler hızlıca kullanıcıya ulaşır.
Github Actions Bize Ne Sağlıyor?
Github Actions, modern yazılım geliştirme süreçlerinde otomasyonu artıran, hataları azaltan ve workflow yönetimini kolaylaştıran bir araçtır. İşte sağladığı başlıca avantajlar:
Otomatik Build ve Test: Git reposunda yapılan her değişiklik, Github Actions sayesinde otomatik olarak test edilir ve build edilir. Bu sayede hatalar daha proje ilerlemeden tespit edilir ve üretim ortamına hatalı kod gönderilmesi engellenir. Otomatik test ve build süreçleri, proje kalitesini yükseltirken geliştiriciye de zaman kazandırır.
Sürekli Entegrasyon ve Deploy: CI/CD mekanizması, kodun manuel müdahale olmadan sürekli olarak entegre edilmesini ve deploy edilmesini sağlar. Geliştiriciler, development, staging ve production gibi farklı ortamlar için ayrı job’lar tanımlayabilir. Böylece yeni özellikler veya düzeltmeler, hızlı ve güvenli bir şekilde kullanıcıya ulaştırılır.
Versiyon Kontrolü ile Workflow Yönetimi: Tüm workflow adımları
.ymldosyaları ile reposu içinde saklanır ve versiyon kontrolü altında tutulur. Bu sayede workflow değişiklikleri de kod değişiklikleri gibi izlenebilir ve ekip üyeleri tarafından birlikte geliştirilebilir. Workflow yönetimi, ekip içi koordinasyonu artırır ve süreçleri standartlaştırır.Esneklik ve Entegrasyon: Github Actions, Node.js, C#, Python, Java gibi farklı diller ve platformlarla uyumlu çalışır. Ayrıca Docker, Kubernetes, FTP, AWS, Azure gibi popüler deploy ve servis araçlarıyla entegre edilebilir. Workflow adımlarına koşullar, paralel job’lar ve cache mekanizmaları eklenerek süreçler daha esnek ve optimize hâle getirilebilir.
Hız ve Verimlilik: Tekrarlayan görevler otomatikleştirildiği için geliştiriciler zamanlarını daha verimli kullanabilir. Test, build ve deploy süreçleri standart hale gelir; insan hataları minimize edilir ve projeler daha hızlı bir şekilde üretim ortamına taşınır.
Github Actions ile Örnek C# Backend Deployment Worklow Oluşturma
1.Git Repo Dosya Yapısı
my-repo/
├─ .github/
│ └─ workflows/
│ └─ deploy.yml # Github Actions workflow file
├─ backend_api/
│ ├─ backend_api.sln # Solution file
│ ├─ backend_api.csproj # Project file
│ ├─ Program.cs
│ ├─ ...
└─ README.md2.deploy.yml dosyası
name: Backend Deploy via FTP # @1
on: # @2
push:
branches:
- main
jobs: # @3
backend-deploy:
runs-on: ubuntu-latest
steps: # @4
- name: Checkout code # @5
uses: actions/checkout@v4
- name: Setup .NET 9
uses: actions/setup-dotnet@v4
with:
dotnet-version: "9.0.x"
- name: Restore dependencies
run: dotnet restore ./backend_api/backend_api.sln
- name: Publish backend
run: dotnet publish ./backend_api/backend_api.csproj -c Release -o ./backend/publish
- name: Verify templates are included # optional
run: |
echo "Checking if templates are included in publish output..."
ls -la ./backend/publish/templates/
echo "Template files found:"
find ./backend/publish/templates/ -name "*.html" -type f
- name: Deploy backend via FTP
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
protocol: ftp
port: 21
timeout: 190000
log-level: verbose
server: ${{ secrets.FTP_SERVER }}
username: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
local-dir: ./backend/publish/
server-dir: /api.yourdomain.com/name:parametresi, GitHub Actions workflow panelinde gözükecek isimdir. Panelde nasıl görmek istiyorsanız o şekilde isimlendirebilirsiniz.on:parametresi, workflow’un hangi koşullarda çalışacağını tanımlar. Şu ankideploy.ymldosyasında workflow, repomuzdakimainbranch’ine her push olduğunda tetiklenecek ve deploy işlemi başlayacaktır.jobs:parametresi, workflow içindeki job’ları tanımlar. Şu anki workflow’umuzda yalnızcabackend-deployisimli bir job tanımlanmıştır.runs-on:parametresi ise bu job’ın hangi işletim sistemi üzerinde çalışacağını belirtir.steps:parametresi, bir job içinde sırasıyla yapılacak adımları tanımlar. Buradan itibaren farklı isimlerle tanımlanmış adımlar sıralı şekilde çalışır.name: Checkout codeadımında, repomuzdaki kod workflow ortamına çekilir.name: Setup .NET 9adımında, workflow ortamına .NET SDK 9 kuruludur. Bu sayede C# backend projesi bu sürümle derlenip publish edilebilir.name: Restore dependenciesadımında, projedeki tüm NuGet paketleri indirilir. Böylece build ve publish için gerekli bağımlılıklar hazır hale gelir.name: Publish backendadımında, projemiz Release modunda derlenir ve yayınlanacak dosyalar./backend/publishklasörüne çıkarılır. Bu klasör FTP ile sunucuya gönderilecektir.name: Verify templates are includedadımı opsiyoneldir. Kendi workflow’unuza eklemeyebilirsiniz. Benim projede HTML template’lerine ihtiyaç olduğundan, bu dosyalar doğrulanmadan sunucuya gönderilmemesini istediğim için eklemiştim. Kısaca ilgili dosyaların workflow’da olup olmadığını kontrol eder.name: Deploy backend via FTPadımında,SamKirkland/FTP-Deploy-Action@v4.3.5kullanılarak az önce publish edilen dosyalar FTP ile sunucuya yüklenir. Workflow’un çalışabilmesi için, repository ayarlarında “Secrets and Variables” → “Actions secrets” alanına şu secret değerlerini eklemeniz gerekir:FTP_SERVER(FTP sunucusunun IP adresi veya domaini)FTP_USERNAMEFTP_PASSWORD
log-level: verboseyaparak FTP yükleme işlemini ve oluşabilecek hataları detaylı şekilde görüntüleyebilirsiniz.local-dirparametresi, publish edilen dosyaların bulunduğu klasör yolunu belirterek hangi dosyaların gönderileceğini tanımlar.server-dirparametresi ise dosyaların sunucuda nereye yükleneceğini belirtir. Örneğin, Plesk panelde bir subdomain açıp bu subdomain’in altına deploy edebilirsiniz (ben bu şekilde yapmıştım). Eğer ana domaine deploy etmek istiyorsanız, ihtiyacınıza göre Plesk panel için/httpdocs/olarak değiştirebilirsiniz.
Yazıyı okuduğunuz için teşekkür ederim! Umarım Github Actions ile C# backend projelerinin otomatik deploy süreci hakkında verdiğim bilgiler size faydalı olmuştur.
Her türlü soru, geri bildirim veya proje işbirliği için benimle iletişime geçmekten çekinmeyin. Teknoloji, yazılım ve otomasyon konularında fikir alışverişi yapmak, yeni projeler hakkında konuşmak benim için her zaman çok değerli.
Bana aşağıdaki kanallardan ulaşabilirsiniz:
E-posta: cemlevent54@gmail.com
LinkedIn: linkedin.com/in/leventavci54
GitHub: github.com/cemlevent54
Kişisel Web Sitesi: https://cemleventavci.com.tr Portföyümü ve yaptığım projeleri görmek için ziyaret edebilirsiniz.

