- Triển khai CI/CD cho iOS – Appstore Distribution
- Triển khai CI/CD cho iOS – In house Distribution với DeployGate
- Triển khai CI/CD cho iOS – GitlabCI Artifact
- Triển khai CI/CD cho iOS – SonarQube & Blackduck
- Triển khai CI/CD cho iOS – SonarQube & Blackduck
- Triển khai CI/CD cho iOS – SwiftLint
Một ngày đẹp trời, anh ấy nhận được một cái mail giới thiệu anh là chuyên gia về tài khoản Apple… đó chính ngày định mệnh mở ra con đường Enterprise. Many thanks anh Vũ Béo, người nhanh tay mang ánh sáng về và đặt những bước chân đầu tiên.
Sam
Overview
DeployGate hỗ trợ rất nhiều chế độ Distribution, tuy nhiên để tạo ra sự đa dạng cho series, ở bài viết này chúng ta sẽ sử dụng Enterprise (In house) kết hợp với DeployGate để tạo thành một quy trình CD.
Nói thêm một chút về DeployGate, đây là một nền tảng hỗ trợ phân phối ứng dụng di động (iOS & Android). Người dùng có thể upload app package (ipa & apk) lên và chia sẻ link cài đặt cho người khác. Sử dụng DeployGate, Tester sẽ không cần phải cài đặt ứng dụng trực tiếp với ipa hay apk file, và cũng không cần sử dụng Window hoặc MacOS để cài đặt. DeployGate cũng giảm bớt sự phụ thuộc của người dùng trong quá trình test vào Test Flight khi thời gian process một số ứng dụng có thể lên tới hàng chục giờ đồng hồ.
Bài viết sẽ gồm có 3 phẩn:
- Distribute IPA sử dụng Command Line
- Cấu hình DeployGate để upload IPA bằng Command Line
- Cấu hình file .gitlab-ci.yml cho GitlabCI
Distribute IPA sử dụng Command Line
Bước đầu tiên của quá trình vẫn là tạo ra được file IPA để upload lên Deploy Gate. Như ở bài trước đã hướng dẫn, ta sẽ sử dụng các câu lệnh sau để thực hiện tạo ra file IPA.
xcodebuild archive -archivePath "cicd-test" -scheme cicd-test
xcodebuild -exportArchive -archivePath "cicd-test.xcarchive" -exportPath "ipa" -exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates
Với chế độ In House, chúng ta sẽ sử dụng file ExportOptions.plist với nội dung như sau:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>enterprise</string>
</dict>
</plist>
Sau khi export xong, chúng ta sẽ có một file IPA với đường dẫn tương đối so với vị trí của runner như sau:
ipa/cicd-test.ipa
Việc tiếp theo sẽ là upload file IPA lên DeployGate.
Cấu hình DeployGate để upload IPA bằng Command Line
Đầu tiên chúng ta cần upload ít nhất một bản IPA lên Deploy Gate, sau đó bật Distribution lên bằng cách ấn vào nút Add a link for sharing trong ảnh sau:
Sau đó, trang web sẽ điều hướng đến Distribution Page, đừng hoảng, ta chỉ cần copy đường dẫn của trang đó là được. Đường dẫn sẽ có dạng như sau:
https://deploygate.com/distributions/818c15431b824aac1763f074931ecacaed2a03d5
DISTRIBUTION_KEY = 818c15431b824aac1763f074931ecacaed2a03d5
Ta sẽ lưu key phía sau của đường dẫn lại, tạm gọi là DISTRIBUTION_KEY như trên.
Tiếp đó ta quay lại Dashboard của app như trong ảnh trên và lấy thông tin user từ đường dẫn như sau:
https://deploygate.com/users/gstdn_test/platforms/ios/apps/com.magz.techover.ios
USER = gstdn_test
USER_API_HOST = https://deploygate.com/api/users/gstdn_test/apps
Cuối cùng của việc cấu hình và thu thập thông tin lên Deploy Gate, ta vào mục Account Setting -> Profile và copy API Key ở dưới cùng của page.
Ta sẽ có một bộ các thông tin sau:
USER_API_HOST = https://deploygate.com/api/users/gstdn_test/apps
DISTRIBUTION_KEY = 818c15431b824aac1763f074931ecacaed2a03d5
API_KEY = 246147bb-3ab7-4cc8-8fbe-ahihidongoc
Tiếp đó, ta chỉ cần thực hiện upload IPA file lên Deploy Gate sử dụng các thông tin trên với Command sau:
Curl -H "Authorization: token $API_KEY" -F "file=@ipa/cicd-test.ipa" -F "message=New distribution" -F "distribution_key=$DISTRIBUTION_KEY" -F "release_note=Release Note" "$USER_API_HOST"
Response trả về sẽ có dạng Json như sau, nếu error = false thì tức là quá trình upload thành công.
Refresh lại Dashboard của app ta sẽ thấy có một bản build mới được upload lên với message “New distribution” như ảnh sau:
Tiếp tục qua trang Update Distribution, ta sẽ thấy bản build mới upload sẽ tự động được cập nhật thành phiên bản được phân phối với Release Notes là “Release Note”.
Như vậy là ta đã hoàn thành việc upload và cập nhật bản build trên Deploy Gate một cách tự động. Tiếp đến là cấu hình các câu lệnh trên vào file .gitlab-ci.yml.
Cấu hình .gitlab-ci.yml cho GitlabCI
Rồi, lại tới công chuyện tiếp! Đầu tiên ta cần ném các thông tin Key của Deploy Gate vào mục Variables thay vì setting cứng trong file.
Tiếp đến, nội dung của file .gitlab-ci.yml cơ bản sẽ như sau:
stages:
- build
build_project:
stage: build
script:
- echo 'Hello bitches, welcome to lazy boys world!'
- echo 'Just commit code, serve yourself a cup of coffee. Let gitlab build your app!'
- xcodebuild archive -archivePath "cicd-test" -scheme cicd-test
- xcodebuild -exportArchive -archivePath "cicd-test.xcarchive" -exportPath "ipa" -exportOptionsPlist ExportOptions.plist -allowProvisioningUpdates
- Curl -H "Authorization: token ${API_KEY}" -F "file=@ipa/cicd-test.ipa" -F "message=New distribution" -F "distribution_key=${DISTRIBUTION_KEY}" -F "release_note=Release Note" "${USER_API_HOST}"
tags:
- main
Vậy là xong, sau khi code được commit/merge vào main, GitlabCI sẽ tự động chạy Jobs build IPA và đẩy lên DeployGate. Hẹn gặp lại các bạn ở bài viết tiếp theo!
P/S: Sẽ rất tiện lợi nếu có thể cấu hình để tuỳ chỉnh Upload Message, Release Note để ghi các thay đổi cho Tester hay thông báo khi có bản build mới lên Deploy Gate. Nên mình sẽ dành riêng một bài trong series để hướng dẫn cách cấu hình các tuỳ chỉnh này.
11 comments
Bạn cho mình hỏi chút, Deploygate bạn dùng account thường hay account Enterprise vậy ạ.
Mình thấy Bản build trên Deploygate của bạn có chữ Enterprise
Mình dùng Enterprise nha bạn, In House Distribution bắt buộc phải dùng tài khoản Enterprise.
Mình chọn In House cho nó phong phú bài viết thôi, bạn hoàn toàn có thể dùng các mode khác (development, adhoc) để đẩy build lên.
Hi, với tài khoản Apple Enterprise thì khi cài app trên Deploygate không cần phải add udid đúng không bạn?.
Còn các mode khác như (development, adhoc) thì cần phải add udid thì mới cài được app đúng không? tại mình dùng tài khoản apple thường ($99) toàn thấy báo cần phải add udid thôi à?
Đúng rồi bạn, mà cái đấy DeployGate có API để hỗ trợ add UUID, sau đó sẽ tự động làm các việc còn lại. Cũng khá là tiện đó.
Bạn có hướng dẫn nào về việc Deploygate add UDID bằng API không? theo mình biết account apple ($99) chỉ add được 100 udid iPhone.
Vậy nếu có nhiều hơn 100 thiết bị (khoảng mấy trăm) thì việc add udid này có ổn không bạn?.
Mình đang muốn tìm hiểu theo hướng không cần phải add udid mà vẫn cài được app với số lượng thiết bị rất nhiều.
Rất mong bạn hỗ trợ, cảm ơn bạn rất nhiều.
Mình chưa viết section nào cụ thể hơn về DeployGate, thời gian tới sẽ cố gắng tổng hợp lại thành một bài cho mọi người nhé!
Ngoài ra về câu hỏi của bạn, “Vậy nếu có nhiều hơn 100 thiết bị (khoảng mấy trăm) thì việc add udid này có ổn không bạn?.”
=> Không thể nha, API đó thực chất là deploy gate sẽ thêm UUID vào tài khoản của bạn, refresh provisioning, build và deploy lại lên server.
Còn nếu không giới hạn device, hiện tại chỉ có thể dùng tài khoản enterprise.
Cảm ơn bạn nhiều, các bài viết của bạn rất hay, Nếu chi tiết hơn một chút sẽ dễ hiểu hơn cho những người mới bạn ạ.
Chờ những bài viết hay của bạn!
Cảm ơn bạn đã ủng hộ, mình sẽ update thêm nhiều section nữa 😀
Thật ra có một cách để nâng giới hạn số device cài đặt app lên 10K mà chỉ cần tài khoản 99$.
Sắp tới mình sẽ viết thêm về section này, bạn nhớ theo dõi nhé.
Thế mình đoán không nhầm cách bạn nói là Link TestFlight public (External Testing) đúng không bạn?
Đúng rồi bạn!