H
arrow_back Blog'a Don | #CI/CD #CI/CD #DevOps #DevOps #GitHub Actions #GitHub Actions

Mimari: Geçici Döngü

H
Hurşit Emre Duru
5 dk okuma
```html

GitHub Copilot Kodlama Aracısı ile DevOps İş Akışlarını Otomatize Etme

Geçici (Ephemeral) Action'lar Aracılığıyla GitHub Issue'larını Otonom Pull Request'lere Dönüştürme

Yapay zeka destekli geliştirme dünyası, etkileşimli sohbet arayüzlerinden otonom aracılara doğru evriliyor. GitHub Copilot gibi araçlar satır içi kodlamada devrim yaratmış olsa da, Copilot Kodlama Aracısı (Copilot Coding Agent), DevOps mühendisleri için bir paradigma değişimini temsil ediyor. Bir geliştiricinin kodu manuel olarak sekme tuşuyla tamamlaması yerine, artık bir GitHub Issue'sunu (sorun kaydı), geçici bir GitHub Actions ortamında otonom olarak çalışan ve incelemeye hazır bir Pull Request (PR) oluşturan bir yapay zeka ekip arkadaşına atayabiliyor.

DevOps ekipleri için bu durum; Terraform sağlayıcı sürümlerini güncellemek, Dockerfile'ları yeniden yapılandırmak veya Kubernetes manifestlerindeki lint hatalarını düzeltmek gibi standart (boilerplate) bakım işlemleriyle ilişkili iş yükünü önemli ölçüde azaltır. Bu kılavuz, Copilot Kodlama Aracısı'nın bir CI/CD hattı içindeki teknik uygulamasını detaylandırmaktadır.

Mimari: Geçici Döngü

Copilot Kodlama Aracısı'nın temel mekanizması, üç GitHub temel bileşeninin kesişimine dayanır: Issue'lar, Action'lar ve Pull Request'ler. Yerel bir IDE eklentisinin aksine, aracı tamamen sunucu tarafında çalışır.

  • Tetikleyici (Trigger): İş akışı, bir Issue'ya belirli bir etiketin (örneğin, copilot-task) eklenmesi gibi belirli bir olayla başlatılır.
  • Yürütme (Execution): Bir GitHub Actions çalıştırıcısı (runner), geçici bir ortam başlatır. Bu, aracının yerel geliştirici makinelerine erişmeden kod tabanını analiz edebileceği yalıtılmış bir güvenlik sınırı sağlar.
  • Çıktı (Output): Aracı, Issue gövdesindeki doğal dil talimatlarını yorumlar, dosya sistemini değiştirir ve değişiklikleri yeni bir dala (branch) commit'leyerek orijinal Issue ile bağlantılı bir PR'ı otomatik olarak açar.

Uygulama: İş Akışını Yapılandırma

Bu işlevselliği etkinleştirmek için deponuzda bir iş akışı dosyası tanımlamanız gerekir (örneğin, .github/workflows/copilot-agent.yml). Bu iş akışı, botun depoya yazmasına ve pull request'leri yönetmesine izin vermek için yükseltilmiş izinler gerektirir.

1. İş Akışı Tanımı

Aşağıdaki YAML yapılandırması, bir Issue'ya belirli bir etiket uygulandığında tepki veren bir dinleyici kurar. İsteği işlemek için gh CLI ve Copilot eklentilerini kullanır.

name: Copilot Kodlama Aracısı

on:
  issues:
    types: [labeled]

permissions:
  contents: write
  pull-requests: write
  issues: write

jobs:
  agent-task:
    if: github.event.label.name == 'copilot-task'
    runs-on: ubuntu-latest
    steps:
      - name: Depoyu Kontrol Et (Checkout)
        uses: actions/checkout@v4

      - name: GitHub CLI Kurulumu
        run: |
          type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
          curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
          sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
          echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
          sudo apt update
          sudo apt install gh -y

      - name: Copilot Aracısını Çağır
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          ISSUE_BODY: ${{ github.event.issue.body }}
          ISSUE_NUMBER: ${{ github.event.issue.number }}
        run: |
          # GH CLI için varsayımsal copilot eklentisini kurun
          gh extension install github/gh-copilot
          
          # Aracının çalışması için yeni bir dal (branch) oluşturun
          BRANCH_NAME="copilot-agent/issue-${ISSUE_NUMBER}"
          git checkout -b $BRANCH_NAME
          
          # İstemi kod tabanına karşı çalıştırın
          # Not: Aşağıdaki sözdizimi aracıyı çağırma mantığını temsil eder
          gh copilot agent run "$ISSUE_BODY" --workspace "."
          
          # Değişiklikleri Commit'leyin ve Push'layın
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add .
          git commit -m "feat: #${ISSUE_NUMBER} nolu Issue için otomatik oluşturulan değişiklikler"
          git push origin $BRANCH_NAME
          
          # Pull Request Açın
          gh pr create --title "Issue #${ISSUE_NUMBER} için Copilot Aracısı Düzeltmesi" \
                       --body "Issue #${ISSUE_NUMBER} içindeki talimatlara dayanarak Copilot Aracısı tarafından oluşturulan otomatik PR." \
                       --base main \
                       --head $BRANCH_NAME

2. DevOps İçin İstem Mühendisliği (Prompt Engineering)

Otomasyonun başarısı, GitHub Issue'da sağlanan bağlama büyük ölçüde bağlıdır. Aracı otonom olarak çalıştığı için talimatlar açık olmalıdır.

Yetersiz İstem: "Terraform dosyasını düzelt."

Etkili İstem: "infrastructure/main.tf dosyasını güncelle. AWS sağlayıcı kısıtlamasını ~> 5.0 sürümüne yükselt. Stil tutarlılığını sağlamak için dizinde terraform fmt komutunu çalıştır. Backend yapılandırmasını değiştirme."

Temel DevOps Kullanım Durumları

Aracı uygulama kodu yazabilse de, kapsamın iyi tanımlandığı deterministik DevOps görevlerinde mükemmel sonuçlar verir:

  • Bağımlılık Güncellemeleri: package.json veya requirements.txt dosyalarındaki sürümlerin otomatik olarak yükseltilmesi ve kilit dosyalarının (lock files) yeniden oluşturulması.
  • Kod Olarak Altyapı (IaC) Refaktörizasyonu: Sağlanan örneklere dayanarak ayrı kaynakların yeniden kullanılabilir Terraform modüllerine dönüştürülmesi.
  • Dokümantasyon: Bir betik dizininin taranması ve her bir betiğin kullanımını açıklayan bir README.md oluşturulması.
  • Birim Testi Oluşturma: /scripts klasöründe bulunan belirli bir Python yardımcı betiği için test kapsamı yazmak üzere aracının atanması.

Güvenlik ve Yönetişim

Yazma izinlerine sahip yapay zeka aracılarını çalıştırmak sıkı bir yönetişim gerektirir. Mimari, riskleri Action Çalıştırıcı İzolasyonu yoluyla azaltır. Aracı, yürütme sonrasında yok edilen konteynerleştirilmiş bir ortamda çalışır. Ayrıca, hiçbir kod otomatik olarak birleştirilmez (merge); çıktı her zaman bir Pull Request'tir. Bu, "Süreçte İnsan Kontrolü" (Human-in-the-Loop) standardını zorunlu kılarak, kıdemli bir DevOps mühendisinin oluşturulan IaC kodunu üretim hattına dokunmadan önce incelemesini sağlar.

GitHub Copilot Kodlama Aracısı'ndan yararlanarak organizasyonlar, bakım görevlerini "sola kaydırabilir" (shift left); yapay zekayı tekrarlayan "ağır işleri" halledebilen bir küçük seviye (junior) DevOps mühendisi gibi konumlandırırken, insan mühendislerin mimari ve stratejiye odaklanmasını sağlayabilirler.

```

Okumaya Devam Et