2 điểm bởi GN⁺ 2025-04-02 | 2 bình luận | Chia sẻ qua WhatsApp
  • Unix shell đã được sử dụng hơn 50 năm và là một công cụ điện toán mạnh mẽ, có thể kết hợp các thao tác phức tạp bằng những lệnh đơn giản
    • Tuy nhiên, stack phần mềm hiện đại đã trở nên phức tạp hơn rất nhiều, và shell truyền thống khó có thể xử lý hết mọi tác vụ này
    • Lấy cảm hứng từ Docker, make, powershell, nix..., nhu cầu về một shell hiện đại đã xuất hiện: hỗ trợ sẵn container, secret, service endpoint, thực thi khai báo, cache và sandboxing
  • Dagger Shell là frontend dựa trên cú pháp bash dành cho Dagger Engine, có thể dùng cho nhiều tác vụ tự động hóa như build, test, triển khai và môi trường tạm thời
  • Đây là công cụ bổ trợ chứ không nhằm thay thế system shell, giúp xây dựng các workflow phức tạp bằng cách kết hợp những module đơn giản
    container |  
      from alpine |  
      with-exec apk add git |  
      terminal  
    
  • Chỉ cần shell và code là đủ

    • Khi xử lý script phức tạp, bạn có thể viết bằng ngôn ngữ lập trình thực thụ thay vì phải học một DSL kỳ quặc
    • Cung cấp SDK cho nhiều ngôn ngữ như Go, Python, Typescript, Java, PHP
    • Có thể mở rộng các hàm viết bằng ngôn ngữ thành primitive mới của Dagger
  • Shell được kết nối với API

    • Dagger Shell đóng vai trò là client Dagger API, cho phép truy cập vào các đối tượng có kiểu, tài liệu và hệ sinh thái module tái sử dụng (Daggerverse)
    • Ví dụ, có thể tải và chạy module quét bảo mật Trivy
  • Môi trường sandbox mặc định

    • Mọi lệnh đều được chạy trong sandbox theo mặc định; quyền truy cập tới file, secret, service... phải được chỉ định rõ ràng. Dù dài dòng hơn một chút, cách này giúp tăng tính tái lập và độ an toàn
      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  
      
  • Build container đơn giản

    • Có thể thực hiện liền mạch từ việc tạo container dựa trên Alpine, chèn file văn bản, cấu hình thông điệp đầu ra cho đến push lên registry tạm thời
    • Không cần chuyển đổi ngữ cảnh giữa việc viết Dockerfile, chạy lệnh build rồi push
      # 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  
      
  • Thiết lập môi trường test

    • Việc cấu hình môi trường test, vốn là vấn đề thường gặp trong CI, cũng có thể được xử lý đơn giản
    • Nhờ hỗ trợ native service binding, có thể kết nối nhiều instance đang chạy và kiểm thử chúng
      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  
      
  • Build nhiều giai đoạn (Multi-Stage Builds)

    • Có thể triển khai pipeline build phức tạp với cú pháp rõ ràng và có tính module hóa
    • Mỗi giai đoạn được khai báo bằng biến nên dễ debug và tái sử dụng
      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 bình luận

 
winterjung 2025-04-02

Tham khảo thêm, liên kết đã được đổi thành địa chỉ https://dagger.io/blog/…

 
GN⁺ 2025-04-02
Ý kiến trên Hacker News
  • Gần đây ngày càng khó hiểu được Dagger thực sự dùng để làm gì

    • Ban đầu tôi kỳ vọng nó có thể thay thế Jenkins
    • Cung cấp một lựa chọn khác cho việc chạy và debug pipeline CI trên máy cục bộ
    • Được viết bằng Golang và có thể import những gì cần thiết
    • Giờ thì hướng đi có vẻ rời rạc: muốn thay Docker, muốn trở thành một shell mới, và kỳ lạ là còn như đang muốn thành Langchain
    • Các đối số CLI mới cũng không tốt hơn shell script hay Jenkinsfile hiện có là bao
    • Thật tiếc vì dự án dường như đã lệch khỏi mục tiêu ban đầu
  • Tôi thường kết hợp Dockerfile và shell script để cấu hình nhiều image khác nhau

    • Cần chạy khác nhau tùy môi trường như máy của lập trình viên, robot, CI, v.v.
    • Có vẻ công cụ này có thể giải quyết sự phức tạp đó
    • Tôi thích việc có thể tham chiếu đầu ra của bản build nên không cần phải xử lý tag
  • Tôi đã không nhận ra Dagger đang cố thay thế Docker

    • Đây là một tầm nhìn lớn
    • Là một nỗ lực đầy tham vọng, nhưng khó dẫn tới niềm tin rằng nó có thể thay thế ngay các công cụ hiện có
    • Tôi thấy tiếc vì họ chọn tính tương thích Bash
    • Tôi nghĩ đã đến lúc phải thoát khỏi cú pháp và các vấn đề của Bash
  • Đã có sẵn một web UI cho phép viết script Dagger Shell theo dạng notebook

    • Rất thú vị, nên thử xem
  • Sau khi đọc phần mô tả trên trang chủ của Dagger, tôi thấy băn khoăn

    • "Công cụ cấu hình đa nền tảng"
    • Xây dựng môi trường phần mềm mạnh mẽ bằng các thành phần mô-đun và hàm đơn giản
    • Phù hợp với các bản build phức tạp và quy trình AI workflow
    • Quá chung chung nên vô dụng
    • Cái gì cũng là công cụ cấu hình cả. Javascript cũng là công cụ cấu hình, macOS cũng là công cụ cấu hình
  • Tự quảng bá có liên quan

  • Có phải mục đích là làm công việc phát triển bên trong container?

    • Điều đó làm tôi nghĩ đến Devbox của Jetify và Flox.dev
  • Rõ ràng hơn thì có thể làm gì với công cụ này?

    • Nó giúp ích cho những hoạt động nào?
    • Nó có thể thay thế chương trình nào?
    • "Hệ điều hành DevOps" làm gì?
  • Ấn tượng ban đầu là nó giống như một bước trung gian giữa Dockerfile và việc định nghĩa, cấu hình phần mềm bằng mã nguồn thực thụ

    • Là người dùng Nix khá nhiều, tôi không thấy hấp dẫn
  • Dagger đã đổi hướng sản phẩm sao?

    • Tôi nhớ điểm bán hàng chính của nó từng là dịch vụ pipeline-as-code độc lập
    • Giờ có vẻ như nó đang cố tái tạo lại Docker