Trả lời nhanh: fastlane gom những việc lặp lại của khâu phát hành thành các luồng chạy bằng một lệnh: dựng bản, chụp ảnh minh họa cho mọi kích thước màn hình, quản lý chứng chỉ ký, đẩy lên kênh thử nghiệm hoặc lên cửa hàng. Giá trị lớn nhất không phải tiết kiệm thời gian mà là loại bỏ những bước bị quên. Ba luồng đáng dựng đầu tiên: phát bản thử, đồng bộ chứng chỉ ký cho cả đội, và chụp ảnh minh họa tự động.
Phát hành ứng dụng lần thứ mười vẫn tốn cả buổi, vì nó gồm hai chục bước nhỏ mà bước nào cũng dễ quên. Đó chính là loại việc nên giao cho máy. Bài này đi vào ba luồng đáng dựng trước, và phần chạy chúng trên máy chủ.
Vì sao đáng dựng dù đội nhỏ
Một lần phát hành gồm: tăng số phiên bản, dựng bản, ký, tải lên, điền thông tin tuân thủ, viết ghi chú phiên bản, gán cho nhóm người thử, thông báo cho đội. Tám bước, và bước nào quên cũng làm chậm cả buổi.
Tự động hóa cho ba thứ:
- Không quên bước nào, vì trình tự nằm trong file chứ không trong đầu ai đó.
- Ai cũng phát hành được, không phụ thuộc vào một người biết quy trình.
- Kết quả giống nhau mỗi lần, nên khi có sự cố bạn biết chắc quy trình không phải nguyên nhân.
Điểm thứ hai đáng giá hơn người ta tưởng với đội nhỏ: nó gỡ bỏ tình trạng cả đội chờ một người đi công tác về mới ra được bản mới.
Luồng phát bản thử
Luồng đầu tiên nên dựng, vì bạn chạy nó nhiều nhất:
# fastlane/Fastfileplatform :ios do desc "Dung ban va day len kenh thu nghiem" lane :thu_nghiem do increment_build_number(xcodeproj: "UngDung.xcodeproj") build_app(scheme: "UngDung", export_method: "app-store") upload_to_testflight( skip_waiting_for_build_processing: true, changelog: ENV["GHI_CHU"] || "Ban thu noi bo" ) endendTừ đó, một lệnh thay cho cả quy trình. Tham số bỏ chờ xử lý đáng chú ý: nó trả quyền điều khiển lại ngay thay vì bắt máy CI ngồi chờ, và thời gian đó tính tiền nếu bạn dùng dịch vụ tính theo phút.
Với Android, luồng tương ứng dựng bản AAB rồi đẩy lên kênh thử nghiệm của cửa hàng, theo quy trình trong bài Google Play Console.
Đồng bộ chứng chỉ ký cho cả đội
Đây là tính năng giải quyết nỗi đau đặc trưng của iOS: mỗi máy một bộ chứng chỉ, hết hạn không ai biết, thêm người mới là một buổi loay hoay.
Cách làm: chứng chỉ và hồ sơ cấu hình được mã hóa rồi cất trong một kho riêng, mọi máy đồng bộ từ đó. Người mới vào đội chạy một lệnh là có đủ, không cần ai xuất file gửi qua tin nhắn.
Ba lưu ý bảo mật:
- Kho chứa phải riêng tư, tách khỏi repo mã nguồn.
- Mật khẩu giải mã để ở nơi quản lý bí mật, không ghi trong file cấu hình.
- Trên máy CI, truyền mật khẩu qua biến môi trường do hệ thống cấp lúc chạy.
Nguyên tắc giống hệt phần quản lý khóa ký Android trong bài về keystore: khóa không bao giờ nằm trong repo mã nguồn, và mật khẩu cất tách khỏi khóa.
Chụp ảnh minh họa tự động
Đây là luồng tiết kiệm nhiều thời gian nhất mà ít đội dựng. Ảnh minh họa phải có cho mọi kích thước màn hình và mọi ngôn ngữ, làm tay thì mất cả buổi mỗi lần đổi giao diện.
Cách hoạt động: bạn viết một kịch bản điều khiển ứng dụng đi qua các màn hình cần chụp, công cụ chạy kịch bản đó trên từng loại máy giả lập và từng ngôn ngữ, rồi gom ảnh lại đúng thư mục.
Hai lợi ích đi kèm mà nhiều người không ngờ: ảnh luôn khớp với phiên bản hiện tại của giao diện, và kịch bản đó cũng là một bài kiểm thử giao diện, vì nếu ứng dụng đổi luồng thì kịch bản thất bại và bạn biết ngay.
Với Android, kịch bản chạy trên máy giả lập không màn hình theo cách trong bài về emulator.
Chạy trên máy CI
Khi các luồng đã chạy tốt trên máy cá nhân, bước tiếp theo là để hệ thống tự động gọi chúng:
- Mỗi lần gộp vào nhánh chính: chạy luồng phát bản thử nội bộ.
- Khi gắn thẻ phiên bản: chạy luồng phát hành, gồm cả chụp ảnh và nộp cửa hàng.
Ba điều cần chuẩn bị trên máy CI: mọi thông tin bí mật truyền qua biến môi trường, không nằm trong repo; nhánh iOS phải chạy trên máy Mac vì đó là ràng buộc không vượt qua được, xem bài build iOS có cần Mac; và giữ bộ nhớ đệm giữa các lượt để không tải lại phụ thuộc mỗi lần, theo bài về cache build.
Lời khuyên cuối: dựng từng luồng một và dùng thật vài tuần trước khi dựng luồng tiếp theo. Dựng một lượt cả hệ thống tự động hóa rồi phát hiện nó sai ở đâu đó là cách tốn thời gian nhất.
Bảng thời gian tiết kiệm sau khi tự động
| Việc lặp lại mỗi lần phát hành | Làm tay mất bao lâu | Sau khi tự động |
|---|---|---|
| Tăng số hiệu bản dựng | Vài phút, và hay quên | Tự động |
| Dựng và ký | Vài phút chờ, dễ sai tham số | Một lệnh |
| Nộp lên kênh thử | Nhiều bước bấm | Tự động |
| Cập nhật ghi chú phiên bản | Vài phút | Đọc từ tệp |
| Chụp ảnh minh họa nhiều màn hình và nhiều ngôn ngữ | Rất lâu nếu làm tay | Tự động |
Điểm đáng chú ý nhất là dòng cuối: chụp ảnh minh họa cho nhiều kích thước màn hình và nhiều ngôn ngữ làm tay mất cả buổi, và phải làm lại mỗi khi đổi giao diện. Đây thường là lý do đủ để dựng tự động hóa dù đội chỉ có hai người.
Vấn đề mà việc dùng chung chứng chỉ giải được
- Vấn đề nó giải: mỗi người một chứng chỉ trên máy mình, và khi có người mới vào đội thì mất cả buổi cấu hình. Cơ chế đồng bộ giữ chứng chỉ trong một kho mã hóa dùng chung.
- Kho đó phải là kho riêng tư, và mật khẩu giải mã lưu trong kho bí mật của công ty.
- Không đưa mật khẩu giải mã vào kho mã nguồn, vì như vậy là vô hiệu hóa toàn bộ lớp mã hóa.
- Ghi lại ai có quyền truy cập, và thu hồi khi có người rời đội.
Chạy trên máy chạy tác vụ tự động
# Ba viec phai lam khi chuyen tu may ca nhan sang may tu dong: # 1. Bi mat lay tu kho bi mat cua he thong, khong luu tren dia# va xoa sau moi lan chay # 2. Che do khong tuong tac: may tu dong khong co ai go mat khau# Phai cau hinh de khong hoi # 3. Kho khoa tren may Mac phai duoc mo khoa truoc khi chay# Day la loi pho bien nhat khi chuyen sang may tu dong # Kiem: chay thu tren may tu dong voi mot ban thu truoc,# dung chay thang ban phat hanhVề việc chọn giữa dịch vụ dựng có sẵn và tự dựng máy, xem bài tính chi phí dựng.
Câu hỏi thường gặp
fastlane có dùng cho cả hai nền tảng không?
Có, nó hỗ trợ cả iOS và Android trong cùng một cấu hình, với các luồng riêng cho từng nền tảng. Nhiều đội dùng chung một file cấu hình cho cả hai để quy trình phát hành thống nhất.
Có cần máy Mac để chạy không?
Với các luồng Android thì không, chạy trên Linux bình thường. Với các luồng iOS thì có, vì khâu dựng và ký bắt buộc trên macOS. Đây là ràng buộc của Apple chứ không phải của công cụ.
Chứng chỉ ký dùng chung có an toàn không?
An toàn nếu kho chứa là riêng tư, nội dung được mã hóa, và mật khẩu giải mã nằm ở nơi quản lý bí mật chứ không trong repo. Cách này còn an toàn hơn việc mọi người gửi file chứng chỉ cho nhau qua tin nhắn.
Nên dựng luồng nào trước?
Luồng phát bản thử, vì bạn chạy nó nhiều nhất và nó cho thấy giá trị ngay. Sau đó tới đồng bộ chứng chỉ nếu đội có nhiều người, rồi mới tới chụp ảnh minh họa tự động.
