GitHub gần đây đã giới thiệu hỗ trợ cho YAML anchors trong GitHub Actions , một tính năng cho phép các nhà phát triển định nghĩa các khối cấu hình có thể tái sử dụng trong các tệp workflow của họ. Mặc dù điều này có vẻ như là một cải tiến đơn giản để giảm việc trùng lặp mã, nhưng việc bổ sung này đã gây ra cuộc tranh luận sôi nổi trong cộng đồng nhà phát triển về các tác động bảo mật và khả năng tương thích của công cụ.
Tranh cãi tập trung xung quanh việc liệu tính năng này có thực sự cải thiện workflow hay tạo ra nhiều vấn đề hơn so với những gì nó giải quyết. YAML anchors cho phép các nhà phát triển định nghĩa một khối cấu hình một lần và tham chiếu nó nhiều lần trong suốt tệp workflow của họ, có khả năng giảm mã lặp lại. Tuy nhiên, những người chỉ trích cho rằng cách tiếp cận này đưa ra sự phức tạp không cần thiết cho một nền tảng vốn đã đầy thử thách.
Công cụ phân tích bảo mật đối mặt với những thách thức mới
Một trong những mối quan tâm chính được cộng đồng nêu ra liên quan đến tác động lên các công cụ phân tích bảo mật. Các công cụ phân tích tĩnh quét các workflow GitHub Actions để tìm lỗ hổng bảo mật hiện đang đối mặt với những trở ngại kỹ thuật đáng kể khi xử lý anchors. Vấn đề bắt nguồn từ cách các bộ phân tích YAML xử lý anchors - chúng thường làm phẳng nội dung được neo vào mỗi vị trí mà nó được tham chiếu, khiến việc truy vết ngược về vị trí nguồn gốc gần như không thể.
Điều này tạo ra một vấn đề lớn cho các công cụ bảo mật cần cung cấp thông báo lỗi chính xác và báo cáo lỗ hổng. Khi một vấn đề bảo mật được phát hiện trong một phần được neo, công cụ không thể dễ dàng chỉ cho người dùng đến định nghĩa anchor gốc, khiến việc gỡ lỗi và khắc phục trở nên khó khăn hơn.
Các Công Cụ và Hệ Sinh Thái Bị Ảnh Hưởng
- Phân Tích Bảo Mật: zizmor , actionlint , claws , poutine
- Tác Động: Việc ánh xạ vị trí nguồn trở nên khó khăn
- Hành Vi Của Parser: Hầu hết các parser YAML đều làm phẳng các anchor trong quá trình deserialization
- Khả Năng Tương Thích: Các công cụ phải được cập nhật để xử lý việc phân giải anchor
Các giải pháp thay thế đã tồn tại
Nhiều nhà phát triển trong cộng đồng chỉ ra rằng GitHub Actions đã cung cấp một số cơ chế để giảm việc trùng lặp mã mà không cần phải dùng đến YAML anchors. Các biến môi trường cấp workflow, workflow có thể tái sử dụng, và cấu hình cấp job có thể giải quyết hầu hết các mối quan tâm về trùng lặp trong khi vẫn duy trì sự rõ ràng và bảo mật.
Cuộc tranh luận tiết lộ một sự bất đồng cơ bản về triết lý thiết kế workflow. Một số người cho rằng nếu bạn cần chia sẻ cấu hình giữa nhiều job, bạn nên cân nhắc việc tách workflow hoặc tái cấu trúc cách tiếp cận của mình hoàn toàn. Những người khác lại cho rằng anchors cung cấp sự linh hoạt có giá trị cho các tình huống phức tạp mà các giải pháp hiện có không đáp ứng được.
Các Phương Pháp Thay Thế Được Đề Cập
- Ngôn Ngữ Cấu Hình: Dhall , CUE
- Tạo Code: Python , các script Bash tạo ra YAML
- Tính Năng GitHub Hiện Có: các khối env cấp workflow, workflow có thể tái sử dụng, cấu hình cấp job
- Kiểm Thử Cục Bộ: Các công cụ như Earthly CI , act (với những hạn chế)
Mối quan tâm về triển khai và các tính năng còn thiếu
Thêm dầu vào lửa tranh cãi là việc triển khai không đầy đủ chức năng YAML anchor của GitHub . Trong khi họ hỗ trợ anchors và references cơ bản, họ đáng chú ý là loại trừ merge keys - một tính năng cho phép kết hợp nhiều cấu hình được neo. Việc bỏ qua này làm bối rối nhiều nhà phát triển vì merge keys đại diện cho một trong số ít các trường hợp sử dụng mà YAML anchors cung cấp giá trị độc đáo không thể được sao chép thông qua các tính năng GitHub Actions khác.
Cộng đồng cũng đã nêu lên mối quan tâm về cách tiếp cận tuân thủ YAML của GitHub . Thay vì hỗ trợ đầy đủ đặc tả YAML , GitHub dường như đang triển khai một tập con tùy chỉnh, điều này có thể dẫn đến nhầm lẫn và các vấn đề tương thích về sau.
Trạng thái hỗ trợ YAML Anchor
- Anchor cơ bản: Được hỗ trợ bởi GitHub Actions
- Tham chiếu: Được hỗ trợ bởi GitHub Actions
- Merge Keys: Không được hỗ trợ bởi GitHub Actions
- Phiên bản YAML: Triển khai tùy chỉnh của GitHub (không tuân thủ đầy đủ phiên bản 1.1 hoặc 1.2)
Tác động đến công cụ nhà phát triển và hệ sinh thái
Thay đổi này ảnh hưởng đến nhiều công cụ phổ biến trong hệ sinh thái GitHub Actions . Các công cụ linting, máy quét bảo mật, và trình phân tích workflow hiện phải tính đến việc phân giải anchor khi xử lý các tệp workflow. Điều này đại diện cho một thách thức kỹ thuật đáng kể đối với những người bảo trì công cụ đã xây dựng giải pháp của họ dựa trên các giả định đơn giản hơn về cấu trúc workflow.
YAML anchors làm mờ thêm các trừu tượng của workflows, jobs, và steps, bằng cách giới thiệu một dạng trạng thái toàn cục cắt ngang không tuân theo các quy tắc của phần còn lại của hệ thống.
Một số nhà phát triển đề xuất rằng thay vì thêm nhiều tính năng YAML hơn, ngành công nghiệp nên chuyển sang sử dụng các ngôn ngữ lập trình thực tế cho định nghĩa pipeline CI/CD. Các công cụ như Dhall , CUE , hoặc thậm chí tạo YAML từ Python hoặc các ngôn ngữ quen thuộc khác có thể cung cấp khả năng trừu tượng tốt hơn trong khi vẫn duy trì khả năng kiểm thử cục bộ.
Cộng đồng chia rẽ về lợi ích thực tế
Bất chấp các mối quan tâm kỹ thuật, nhiều nhà phát triển chào đón YAML anchors vì những lợi ích thực tế tức thì của chúng. Các workflow phức tạp với các khối cấu hình lặp lại có thể trở nên dễ bảo trì hơn đáng kể với anchors, đặc biệt cho các tình huống liên quan đến nhiều môi trường triển khai hoặc cấu hình job tương tự.
Tính năng này chứng tỏ đặc biệt có giá trị cho các bộ lọc đường dẫn trong workflows, nơi cùng một danh sách đường dẫn tệp cần được tham chiếu qua nhiều điều kiện kích hoạt. Trước đây, các nhà phát triển phải hoặc là trùng lặp các danh sách này hoặc dùng đến các action của bên thứ ba để đạt được chức năng tương tự.
Nhìn về phía trước
Cuộc tranh luận làm nổi bật những câu hỏi rộng hơn về hướng đi của công cụ CI/CD và quản lý cấu hình. Trong khi YAML anchors giải quyết các điểm đau tức thì cho một số người dùng, chúng cũng đại diện cho một bước hướng tới sự phức tạp gia tăng trong một hệ sinh thái mà nhiều người đã thấy khó khăn để gỡ lỗi và bảo trì.
Tranh cãi này nhấn mạnh sự căng thẳng giữa việc cung cấp các tính năng mạnh mẽ và duy trì sự đơn giản cũng như bảo mật. Khi GitHub Actions tiếp tục phát triển, cộng đồng có thể sẽ tiếp tục tranh luận về việc liệu những tính năng như vậy có nâng cao hay làm phức tạp trải nghiệm workflow phát triển.
Tham khảo: Dear GitHub: no YAML anchors, please