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:

    1. 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.

    2. 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.

    3. Versiyon Kontrolü ile Workflow Yönetimi: Tüm workflow adımları .yml dosyaları 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.

    4. 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.

    5. 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.md

2.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/

  1. name: parametresi, GitHub Actions workflow panelinde gözükecek isimdir. Panelde nasıl görmek istiyorsanız o şekilde isimlendirebilirsiniz.

  2. on: parametresi, workflow’un hangi koşullarda çalışacağını tanımlar. Şu anki deploy.yml dosyasında workflow, repomuzdaki main branch’ine her push olduğunda tetiklenecek ve deploy işlemi başlayacaktır.

  3. jobs: parametresi, workflow içindeki job’ları tanımlar. Şu anki workflow’umuzda yalnızca backend-deploy isimli bir job tanımlanmıştır. runs-on: parametresi ise bu job’ın hangi işletim sistemi üzerinde çalışacağını belirtir.

  4. 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 code adımında, repomuzdaki kod workflow ortamına çekilir.

    • name: Setup .NET 9 adımında, workflow ortamına .NET SDK 9 kuruludur. Bu sayede C# backend projesi bu sürümle derlenip publish edilebilir.

    • name: Restore dependencies adı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 backend adımında, projemiz Release modunda derlenir ve yayınlanacak dosyalar ./backend/publish klasörüne çıkarılır. Bu klasör FTP ile sunucuya gönderilecektir.

    • name: Verify templates are included adı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 FTP adımında, SamKirkland/FTP-Deploy-Action@v4.3.5 kullanı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_USERNAME

      • FTP_PASSWORD

    • log-level: verbose yaparak FTP yükleme işlemini ve oluşabilecek hataları detaylı şekilde görüntüleyebilirsiniz. local-dir parametresi, publish edilen dosyaların bulunduğu klasör yolunu belirterek hangi dosyaların gönderileceğini tanımlar. server-dir parametresi 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.

Yazar

Cem Levent

Cem Levent

Yazılım geliştirme, teknoloji ve kişisel deneyimlerim hakkında yazıyorum.