2 puan yazan GN⁺ 2025-04-02 | 2 yorum | WhatsApp'ta paylaş
  • Unix shell 50 yılı aşkın süredir kullanılıyor ve basit komutlarla karmaşık işlemleri birleştirebilen güçlü bir bilişim aracıydı
    • Ancak modern yazılım yığını çok daha karmaşık hale geldi ve mevcut shell ile tüm bu işleri ele almak zorlaştı
    • Docker, make, powershell, nix gibi araçlardan ilhamla; konteynerler, secret'lar, servis endpoint'leri, deklaratif yürütme, cache ve sandboxing gibi özellikleri yerleşik olarak destekleyen modern bir shell'e ihtiyaç doğdu
  • Dagger Shell, Dagger Engine için bash sözdizimi tabanlı bir frontend olup; build, test, deployment, geçici ortamlar gibi çeşitli otomasyon işlerinde kullanılabiliyor
  • Sistem shell'inin yerini almaktan ziyade onu tamamlayan bir araç olarak, karmaşık iş akışlarını basit modül kombinasyonlarıyla kurmaya yardımcı oluyor
    container |  
      from alpine |  
      with-exec apk add git |  
      terminal  
    
  • Shell ve kod yeterli

    • Karmaşık script'leri işlerken garip DSL'ler öğrenmek yerine, gerçek programlama dilleriyle yazmak mümkün
    • Go, Python, Typescript, Java, PHP gibi çeşitli diller için SDK sağlanıyor
    • Dille yazılmış fonksiyonlar Dagger'ın yeni primitive'lerine genişletilebiliyor
  • API'ye bağlı shell

    • Dagger Shell, bir Dagger API istemcisi olarak çalışır; type'lı nesnelere, dokümantasyona ve yeniden kullanılabilir modül ekosistemine (Daggerverse) erişim sağlar
    • Örneğin Trivy güvenlik tarama modülü yüklenip çalıştırılabilir
  • Varsayılan sandbox ortamı

    • Tüm komutlar varsayılan olarak sandbox içinde çalışır; dosya, secret, servis gibi kaynaklara erişim açıkça belirtilmelidir. Biraz daha ayrıntılı olsa da, tekrarlanabilirlik ve güvenlik artar
      container |  
        from alpine |  
        with-secret-variable POSTGRES_PASSWORD op://dev/db-password/credential |  
        with-directory /src ~/src/myapp |  
        with-service-binding db tcp://localhost:5432 |  
        terminal  
      
  • Basit konteyner build'i

    • Alpine tabanlı bir konteyner oluşturma, metin dosyası ekleme, mesaj çıktısını ayarlama ve geçici bir registry'ye push etme işlemleri tek seferde yapılabiliyor
    • Dockerfile yazma, build komutu ve push arasında bağlam değiştirmeden ilerlemek mümkün
      # Build a wolfi linux container with curl, then test connection to stable and dev docs  
      github.com/dagger/dagger/modules/wolfi | container --packages=curl |  
        with-service-binding docs-stable $(github.com/dagger/dagger/docs@v0.17.1 | server) |  
        with-service-binding docs-dev $(github.com/dagger/dagger/docs@main | server) |  
        with-exec curl http://docs-stable |  
        with-exec curl http://docs-dev  
      
  • Test ortamı kurma

    • CI'da sık görülen sorunlardan biri olan test ortamı kurulumu da kolayca yapılabiliyor
    • Yerleşik servis binding desteğiyle birden fazla canlı instance bağlanıp test edilebiliyor
      repo=$(git https://github.com/dagger/hello-dagger | head | tree)  
      
      env=$(container | from node:23 | with-directory /app $repo | with-workdir /app)  
      
      build=$($env | with-exec npm install | with-exec npm run build | directory ./dist)  
      
      container | from nginx | with-directory /usr/share/nginx/html $build | terminal --cmd=/bin/bash  
      
  • Çok aşamalı build'ler (Multi-Stage Builds)

    • Açık ve modüler sözdizimiyle karmaşık build pipeline'ları kurulabiliyor
    • Her aşamayı değişkenlerle açıkça tanımlamak, debug ve yeniden kullanım açısından kolaylık sağlar
      container |  
        from golang:latest |  
        with-directory /src $(git https://github.com/dagger/dagger | head | tree) |  
        with-workdir /src |  
        with-exec go build ./cmd/dagger |  
        file ./dagger |  
        export ./dagger  
      

2 yorum

 
winterjung 2025-04-02

Bilginize, bağlantı adresi https://dagger.io/blog/… olarak değişti.

 
GN⁺ 2025-04-02
Hacker News görüşleri
  • Bu aralar Dagger'ın gerçek kullanım amacını anlamak giderek zorlaşıyor gibi geliyor

    • Başta Jenkins'in yerini alabileceğini ummuştum
    • CI pipeline'larını yerelde çalıştırıp debug etmeye imkân veren bir alternatif sunuyordu
    • Golang ile yazabiliyor ve ihtiyacın olan şeyleri içe aktarabiliyordun
    • Şimdi ise yönü dağılmış gibi; Docker'ın yerini almaya çalışıyor, yeni bir shell olmaya çalışıyor ve tuhaf bir şekilde Langchain olmaya çalışıyor gibi görünüyor
    • Yeni CLI argümanları, mevcut shell script'lerden ya da Jenkinsfile'lardan daha iyi değil
    • Projenin ilk hedefinden sapmış olması üzücü
  • Dockerfile ve shell script'leri birleştirerek çeşitli image'lar oluşturduğum çok oluyor

    • Geliştirici makinesi, robot, CI gibi ortamlara göre farklı şekilde çalıştırmak gerekiyor
    • Bu aracın bu karmaşıklığı çözebileceğini düşünüyorum
    • Build çıktısına referans verebilmek ve bu sayede tag'lerle uğraşmak zorunda kalmamak güzel
  • Dagger'ın Docker'ın yerini almaya çalıştığını gözden kaçırmışım

    • Büyük bir vizyon
    • İddialı bir girişim ama bunun mevcut araçların yerini hemen alabileceğine inanmak zor
    • Bash uyumluluğunun seçilmiş olması hayal kırıklığı yaratıyor
    • Bash'in söz diziminden ve sorunlarından uzaklaşmanın zamanı geldiğini düşünüyorum
  • Dagger Shell script'lerini notebook formatında yazabileceğiniz bir web UI zaten yapılmış

    • Oldukça ilginç, bakmanızı öneririm
  • Dagger'ın ana sayfasındaki açıklamayı görünce aklımda soru işaretleri oluştu

    • "Çapraz platform yapılandırma motoru"
    • Modüler bileşenler ve basit fonksiyonlarla güçlü yazılım ortamları kurun
    • Karmaşık build'ler ve yapay zeka workflow'ları için uygun
    • Fazlasıyla genel, bu yüzden işe yaramaz
    • Her şey bir yapılandırma motoru. Javascript de, macOS da bir yapılandırma motoru
  • İlgili kişisel tanıtım

  • Amaç, container içinde geliştirme işi yapmak mı?

    • Bu bana Jetify'nin Devbox'ını ve Flox.dev'i hatırlatıyor
  • Açıkça söylemek gerekirse, bu araçla tam olarak ne yapılabiliyor?

    • Hangi faaliyetlere yardımcı oluyor?
    • Hangi programların yerini alabilir?
    • "DevOps işletim sistemi" ne yapıyor?
  • İlk izlenimim, Dockerfile ile yazılımı gerçek kodla tanımlayıp yapılandırma arasında bir ara aşama olduğu yönünde

    • Nix'i yoğun kullanan biri olarak bana cazip gelmiyor
  • Dagger ürün yönünü mü değiştirdi?

    • Bağımsız bir pipeline-as-code hizmetinin ana satış noktası olduğunu hatırlıyorum
    • Şimdi ise Docker'ı yeniden kurmaya çalışıyor gibi görünüyor