Ý tưởng sản phẩm của bạn có thể là lớn nhất mọi thời đại, nhưng khi giao hàng hay phát hành ứng dụng thì không được tốt và ổn định. Do đó nó có thể cực kỳ khó khăn để theo kịp đối thủ. Trong bài viết này, Hôm nay cafedev sẽ chỉ cho bạn cách tích hợp và giao hàng liên tục(CI-CD) để có thể giúp bạn khắc phục điều trên.
Bạn có thể tham khảo thêm các CI-CD được sử dụng nhiều hiện nay.
Những gì bạn sẽ học về bài viết này:
- CI / CD là gì?
- Điều gì làm nên sự khác biệt của CI / CD trên web và CI / CD trên thiết bị di động
- Cách thiết lập CI / CD
Nội dung chính
Tích hợp liên tục (CI) – Continuous Integration
Tích hợp liên tục là quá trình hợp nhất mã của tất cả các developer(Nhiều developer cùng dev 1 dự án) vào một source nguồn chính, cứ mỗi lần hợp nhất nó sẽ tự động chạy các Unit Test or tool test source code của nhóm, để các developer có thể tìm và khắc phục các sự cố càng sớm càng tốt. “Tích hợp liên tục, không loại bỏ các lỗi nhưng nó giúp chúng ta dễ dàng tìm ra lỗi và loại bỏ chúng nhanh hơn.“
Mục tiêu chính của CI là cung cấp phản hồi nhanh hơn và tăng tốc quá trình phát triển. Sửa lỗi sớm sẽ rẻ hơn là để nó đó cho đến khi quá muộn.
Thuật ngữ tích hợp liên tục lần đầu tiên được đặt ra vào năm 1994 bởi Grady Booch và được sử dụng trong các hoạt động lập trình sau này. Công cụ tích hợp liên tục đầu tiên là CruiseControl. Kể từ đó, các máy chủ CI đã phát triển theo thời gian và nhiều công ty đã bắt đầu cung cấp dịch vụ CI
Một máy chủ tích hợp liên tục thực hiện những việc sau:
- Được quyền truy cập và kiểm soát mã nguồn, ví dụ GitHub và kiểm tra code trên máy chủ
- Thực hiện phân tích tĩnh trên code để phát hiện các vấn đề liên quan đến cú pháp
- Xây dựng và biên dịch ứng dụng bằng mã nguồn
- Chạy các bài test khác nhau
- Hiển thị các sự cố ngay sau khi được máy chủ tìm thấy.
Hoạt động của CI bao gồm tự động hóa xây dựng(build), tự kiểm tra(test) và xây dựng nhanh hơn và giao hàng hay phát hành app.
Giao hàng liên tục (CD) – Continuous Delivery
Giao hàng liên tục (CD) là một phần mở rộng để tích hợp liên tục trong đó phần mềm hoạt động có thể được phát hành cho người dùng cuối bất cứ lúc nào. Quá trình phân phối liên tục bổ sung thêm các bước cho quy trình CI đã đề cập ở trên, đó là:
- Đóng gói ứng dụng
- Xác nhận và đăng ký mã (nếu cần)
- Triển khai ứng dụng vào các môi trường cụ thể
Với việc phân phối liên tục, các nhóm phần mềm có thể có được các bản phát hành hoàn toàn tự động, rủi ro thấp và chi phí thấp. Quá trình này cho phép triển khai một lần nhấp, nơi bạn có thể có bản build đáng tin cậy bất cứ khi nào cần. Tuy nhiên, luôn cần có sự can thiệp thủ công để triển khai phần mềm thành sản phẩm. Và trong triển khai liên tục thì không có sự can thiệp thủ công, một commit code sẽ được release ngay lập tức tuỳ vào bạn setup.
Sự kết hợp của các quá trình CI và CD tạo thành quy trình xuyên suốt CI / CD.
Quy trình xuyên suốt CI/CD cho ứng dụng mobile
Các quá trình CI / CD cho các ứng dụng di động khác với các ứng dụng web do sự phức tạp liên quan đến việc xây dựng và đóng gói của các ứng dụng di động.
Sự khác biệt chính của CI / CD web và CI / CD mobile là:
- Code được triển khai cho các ứng dụng web chạy trong trình duyệt trong khi Code được triển khai cho các ứng dụng di động chạy trong các phiên bản khác nhau của thiết bị và hệ điều hành, ví dụ: Android, iOS.
- Code ứng dụng web và cơ sở hạ tầng phải được duy trì bởi các công ty sử dụng trung tâm dữ liệu hoặc đám mây, ví dụ AWS, Azure hoặc Google Cloud.
- Các công cụ và công nghệ được sử dụng để phát triển ứng dụng di động khác với các công cụ được sử dụng cho ứng dụng web. Các trang web có thể được xây dựng bởi các công nghệ web khác nhau như Java, Ruby và JavaScript, trong khi các ứng dụng di động được xây dựng bằng các ngôn ngữ như Swift, Kotlin, JavaScript hoặc Dart.
- Đăng ký Code(code signing) là bắt buộc để triển khai các ứng dụng di động, tuy nhiên hầu hết các ứng dụng web đơn giản không yêu cầu bất kỳ đăng ký code(code signing) nào.
- Một sự khác biệt lớn nữa là việc triển khai web là kiểu đẩy, trong đó chúng ta có thể đẩy thay đổi mã sang sản phẩm và người dùng phải chấp nhận tất cả các thay đổi được triển khai. Việc triển khai trên thiết bị di động là loại kéo, trong đó chúng tôi phải gửi ứng dụng đến App Store để xem xét và sau đó Apple hoặc Google sẽ xem xét ứng dụng trước khi đến tay người dùng cuối. Sau khi phát hành, các ứng dụng di động cần được người dùng cập nhật rõ ràng hay nói cách khác là người dùng tự kéo ứng dụng về mà xài.
- Với giới hạn của việc triển khai kiểu kéo, ứng dụng di động không thể đạt được triển khai liên tục. Tuy nhiên, giao hàng liên tục vẫn có thể cho các ứng dụng di động.
Cách thiết lập quy trình CI / CD
Để thiết lập các đường ống CI / CD, bạn cần phải biết các công cụ dòng lệnh cơ bản để tự động hóa các tác vụ phổ biến. Trong trường hợp ứng dụng dành cho thiết bị di động, qúa trình CI / CD hơi phức tạp và yêu cầu các bước bổ sung, như ký mã(code signing) và xuất bản lên Apple App Store hoặc Google Play Store. Quá trinh CI / CD di động yêu cầu các công cụ tự động hóa xây dựng. Một vài công cụ tự động hóa xây dựng được sử dụng rộng rãi là Fastlane và Gradle cho iOS và Android. Hãy cùng khám phá cách tự động hóa quá trình CI / CD cho ứng dụng di động
Tự động phân tích tĩnh
Phân tích mã tĩnh là quá trình tìm kiếm các vấn đề liên quan đến cú pháp và mã hóa. Có nhiều công cụ khác nhau có sẵn cho mọi ngôn ngữ để phát hiện các vấn đề về kiểu cú pháp và mã hóa. Những công cụ này cũng được gọi là kẻ nói dối(linter). Trong khi phát triển ứng dụng di động, chúng ta cần chọn công cụ kẻ nói dối(linter) chính xác để thực hiện kiểm tra kiểu mã hóa.
Ví dụ khi xây dựng các ứng dụng Flutter, chúng ta cần sử dụng kẻ nói dối cho ngôn ngữ lập trình Dart. Bộ phân tích tĩnh là một bộ phân tích có thể được sử dụng để tạo ra mã Dart. Trong khi thiết lập quá trình CI / CD, phân tích mã tĩnh phải là bước đầu tiên tuyệt đối trong quy trình xây dựng, do đó chúng tôi có thể không xây dựng sớm nếu có lỗi mã hóa nghiêm trọng.
Tự động hóa quá trình xây dựng
Khi bước kiểm tra stype code được thông qua, chúng ta có thể chuyển sang build và biên dịch mã nguồn. Xây dựng ứng dụng di động yêu cầu biên dịch mã nguồn, tài nguyên và dữ liệu liên quan đến ứng dụng khác. Kết quả cuối cùng của quá trình xây dựng ứng dụng sẽ tạo ra các sản phẩm. Trong trường hợp của iOS, nó phải là tệp ứng dụng / .ipa và trong trường hợp Android là tệp apk. Khi thiết lập qúa CI / CD, chúng ta nên sử dụng các công cụ có liên quan để xây dựng các ứng dụng di động. Trong trường hợp ứng dụng Flutter, chúng ta cần sử dụng lệnh flutter build với nhiều thông số khác nhau, ví dụ: để xây dựng các phiên bản iOS và Android của ứng dụng Flutter:
$ flutter build ios –release $ flutter build apk –release
Bước xây dựng sẽ tạo ra các tạo phẩm cho ứng dụng di động.
Kiểm tra tự động / bảo hiểm mã
Kiểm tra tự động là một phần không thể thiếu của các qúa trình CI / CD. Nếu không có kiểm tra tự động, các qúa trình CI / CD sẽ thiếu kiểm tra chất lượng, điều này rất quan trọng để ứng dụng được phát hành. Kiểm tra tự động có thể được viết cho các cấp độ khác nhau. Có một số bài kiểm tra nhẹ như Unit Test, tích hợp, kiểm tra API và có các bài kiểm tra dài như bài kiểm tra UI rất hữu ích nhưng cần bảo trì. Phần bảo phủ mã cũng cần được xem xét trong khi thiết lập qúa trình CI / CD. Điều này sẽ cung cấp một số thông tin chi tiết về số lượng mã được bao phủ bởi các thử nghiệm.
Với các ứng dụng Flutter, có sự hỗ trợ tuyệt vời để kiểm tra tự động cho tất cả các cấp. Chúng tôi cũng có thể viết các bài kiểm tra Widget để kiểm tra các widget. Chúng ta có thể thực hiện các bài kiểm tra rung bằng lệnh sau:
$ flutter test
Giai đoạn thử nghiệm trong quá trình CI / CD giúp bạn tự tin rằng chức năng ứng dụng đã không bị phá vỡ với những thay đổi mã mới nhất.
Ký mã(Code signing) và xuất bản
Trong khi thiết lập đường ống CI / CD cho ứng dụng di động, chúng tôi cần xem xét ký mã. Quá trình ký mã hơi phức tạp để hiểu vì nó yêu cầu một số tài sản được tạo trước khi chúng tôi ký mã một ứng dụng thực tế, ví dụ: Chứng chỉ, Hồ sơ, v.v. Chúng tôi đã viết một bài viết về những điều cơ bản về ký mã cho ứng dụng di động.
Sau khi ứng dụng được ký mã, nó cần được xuất bản trong Apple App Store hoặc Android Play Store hoặc một số dịch vụ thử nghiệm beta của bên thứ ba. Quá trình CI / CD sẽ có khả năng xuất bản ứng dụng trên bất kỳ nền tảng nào được định cấu hình bởi người dùng.
Tự động thông báo
Sau khi quá trình xây dựng kết thúc, điều quan trọng là gửi thông báo cho nhóm với trạng thái của bản dựng và hiện vật. Các nhà phát triển luôn có thể kiểm tra nhật ký nhưng sẽ thuận tiện khi gửi thông báo về email, Slack hoặc dịch vụ thông báo tương tự. Qúa trình CI / CD sẽ kích hoạt thông báo này khi kết thúc quá trình xây dựng.
Công cụ CI / CD cho ứng dụng di động
Có một số công cụ CI / CD có sẵn trên thị trường cho các ứng dụng di động. Các công cụ CI / CD có thể có hai loại.
Tự lưu trữ
Các giải pháp CI / CD tự lưu trữ yêu cầu sở hữu phần cứng, ví dụ: máy macOS hoặc máy chủ Linux. Quá trình thiết lập đường ống CI / CD có thể mất nhiều thời gian hơn và việc bảo trì cả gói phần cứng và phần mềm luôn được yêu cầu cho các công cụ CI / CD nội bộ. Một số ví dụ về các công cụ CI / CD tự lưu trữ là Jenkins, TeamCity, BuildKite, v.v.
Dựa trên đám mây
Các công cụ CI / CD dựa trên đám mây rất dễ thiết lập và tất cả các gói phần cứng và phần mềm được quản lý trong đám mây. Vì hầu hết các tác vụ phức tạp, như ký và xuất bản mã, đang được xử lý trên đám mây, nó đòi hỏi ít bảo trì hơn và các nhà phát triển có thể tập trung vào việc xây dựng các tính năng kinh doanh. Một số công cụ CI / CD dựa trên đám mây bao gồm Nevercode, Bitawn, Travis CI, Circle CI, v.v.