How we improved our iOS CI infrastructure with observability tools
Bài tóm tắt Grab 2023 3. Quy mô lớn Độ khó: Dễ
Grab · 2023 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc
Bài ngắn, phần lớn là danh sách cải tiến; nhiều biểu đồ trong bản gốc không có trong toàn văn. Số liệu là theo Grab, không nêu tổng thời gian CI.
Bối cảnh
- Nâng lên Xcode 13.1 (4/2022) làm UITest trên CI của app iOS (superapp, nhiều team cùng mở merge request mỗi ngày) mất ổn định. Grab gắn công cụ quan sát vào toàn bộ quy trình UITest để thấy từ đầu tới cuối job.
Thay đổi chính
- CPU: tiến trình Spotlight của Xcode 13.1 ngốn CPU (Apple sửa ở 13.2) là một nguyên nhân gốc của test chập chờn. Không chờ bản sửa: dời Spotlight ra chỗ khác trước UITest, trả lại sau; CPU giảm hơn 50%.
- Bỏ phụ thuộc Safari trong test deep link (hơn 10% số test): trình duyệt giả trong UITest; thời gian CI giảm 20%, test ổn định hơn.
- Khởi động simulator với quyền cấp sẵn thay vì xử lý hộp thoại xin quyền trong test: nhanh hơn 5%.
- Theo dõi HTTP trong UITest: công cụ tự viết ghi mọi URL được gọi, phát hiện nhiều tài nguyên vẫn tải thật từ Internet mỗi lần chạy dù quy ước là mock hết; chuyển sang mock, test nhanh và ổn định hơn. Mock server được mở rộng để trả cả HTML.
- Năng lực runner: đo định kỳ cần bao nhiêu bộ xử lý song song trên cụm runner GitLab để kết quả ổn định.
- Bỏ
sleep: theo dõi chỗ dùng sleep, gợi ý dùng wrapperwaitForExistence. - Chính sách retry: trước đây bắt mọi test qua ngay lần đầu mới cho merge, làm engineer tốn thời gian chạy lại tay; đổi thành cho merge nếu lần chạy lại qua. Theo Grab, việc này không làm tăng số test chập chờn.
Vì sao
- Theo Grab, mỗi lần chạy lại cả build vì test chập chờn tốn thời gian và tiền; nhìn thấy CPU, mạng, tài nguyên theo thời gian là cách tìm nguyên nhân thay vì đoán.
Bài học cho SWE
- Một mức chập chờn là bình thường, nhưng phải theo dõi xu hướng; tăng đột ngột thường là vấn đề sâu hơn trong code hoặc hạ tầng.
- Quy ước "mock hết" cần công cụ kiểm chứng; không đo thì test vẫn âm thầm gọi Internet.
Liên quan
- Grab 2022 (CI của Grab, giới hạn của GitLab) · SoundCloud 2019 · Uber 2022
- CI và build ở quy mô lớn
#iOS CI#UITest#Flaky test#Xcode#Mock server#Network monitoring#Retry policy#GitLab runner#Resource utilisation
Được nhắc tới trong
Chủ đề (1)
Công ty (1)
Bài tóm tắt (1)