Hưởng ứng theo tinh thần của Editor team, mình đóng góp Series này để hưởng ứng Technopedia, không nhằm mục đích dự thi. Mong rằng các kinh nghiệm của mình sẽ giúp ích được cho cộng đồng trong lĩnh vực liên quan.
Sam
Để triển khai CI/CD cho một sản phẩm iOS có rất nhiều lựa chọn, chúng ta có thể sử dụng GitLab-CI, Xcode Server, Fastlane, Jenkins, Microsoft App Center, Circle CI, …
Ở phạm vi bài viết này, chúng ta sẽ đề cập đến một nền tảng được tích hợp với GitLab: GitLab-CI
Việc triển khai CI/CD cho một dự án iOS Swift bao gồm một số phần sau:
- Triển khai CI với SwiftLint
- Triển khai CI với SonarQube, Blackduck
- Triển khai CD đơn giản với Gitlab-CI Artifact
- Triển khai CD In-house với DeployGate.
- Triển khai CD OTA Inhouse trên Website với AWS S3 (Static Website Hosting)
- Triển khai CD với Appstore Connect
- …
Cài đặt và khởi tạo Runner
Đầu tiên, các chúng ta cần cài đặt và khởi tạo Runner cho Gitlab Repo. Mình có viết một bải hướng dẫn ở đây
Chú ý:
Sau khi đăng ký runner, nhưng các job vẫn chạy trên container mặc định của GitLab-CI thì hãy chạy các lệnh sau:
gitlab-runner install
gitlab-runner start
gitlab-runner status
1. Triển khai CI với SwiftLint
Đầu tiên, chúng ta sẽ đi đến việc cấu hình CI sử dụng SwiftLint để phân tích chất lượng source code.
Tốt nhất chúng ta sẽ cài đặt và sử dụng Swiftlint tách biệt với source code của dự án như sau
brew install swiftlint
Sau khi cài đặt Swiftlint, ta có thể test bằng cách di chuyển vào thư mục root của source code và chạy lệnh
swiftlint
Kết quả lint source code sẽ hiển thị như sau, ví dụ ở đây ta có 16 lỗi.
Sau đó, chúng ta cấu hình file .gitlab-ci.yml để chạy lint trên branch cicd như sau:
stages:
- Lint
lint-source:
stage: Lint
only:
- cicd
script:
- swiftlint
Kết quả khi commit code lên branch cicd, chúng ta sẽ có kết quả log như sau:
Ở đây chúng ta thấy, hệ thống đã phát hiện được 16 lỗi ở 3 files code. Tuy nhiên, job vẫn success và các merge request vẫn được phép tiếp tục vì Swiftlint vẫn trả về success thay vì error. Đây là một rủi ro, và để ép chặt các thành viên phải fix hết các lỗi Swiftlint trước khi được merge code, ta sẽ thêm tham số vào script như sau:
script:
- swiftlint --strict
Kết quả thu được, hệ thống scan code và trả về lỗi nếu swiftlint chưa được fix hết.
Trong trường hợp chúng ta muốn “dễ dãi”, cho phép merge code trong trường hợp các lỗi swiftlint vẫn còn hoặc muốn job trả về thành công để tiếp tục các job tiếp theo, ta sẽ cấu hình thêm một chút như sau:
stages:
- Lint
lint-source:
stage: Lint
allow_failure: true
only:
- cicd
script:
- swiftlint --strict
Khi ấy, các job phía sau vẫn sẽ được thực hiện, merge request vẫn sẽ được approve nhưng với thông báo Warning đáng chú ý hơn.
Như vậy là đã hoàn thành công đoạn triển khai CI với Swiftlint, ở bài viết tiếp theo, mình sẽ hướng dẫn các bạn triển khai CI với SonarQube, Blackduck
Authors
LinhNB1