![]()
Chúc mừng bạn đã đi đến bài viết cuối cùng của series! Nếu bạn đã làm theo từ bài đầu tiên tới giờ, bạn hiện đang sở hữu một quy trình làm việc chuẩn mực:
Code > Mở Terminal > eas build > Chờ 15 phút > eas submit > Chờ đẩy lên Store.
Quy trình này nghe có vẻ ổn nếu bạn làm việc một mình và thỉnh thoảng mới cập nhật app. Nhưng hãy tưởng tượng bạn đang làm trong một đội ngũ 5 người, mỗi ngày có 10 tính năng mới được hoàn thành. Nếu cứ mỗi lần code xong, một người lại phải ngồi canh Terminal chờ build để nộp cho sếp hoặc đẩy lên Store, thì chúng ta sẽ lãng phí hàng ngàn giờ làm việc mỗi năm!
Để giải quyết bài toán này, các công ty công nghệ lớn như Google, Facebook, Shopee áp dụng một triết lý mang tên CI/CD (Continuous Integration / Continuous Deployment). Hôm nay, chúng ta sẽ mang sức mạnh đó vào dự án React Native của bạn!
1. CI/CD là gì? "Người quản gia" của source code
Đừng để thuật ngữ này làm bạn hoảng sợ. Hãy tưởng tượng CI/CD là một "người quản gia" robot làm việc 24/7 trên máy chủ đám mây.

- CI (Tích hợp liên tục): Mỗi khi bạn hoặc đồng nghiệp đẩy (Push) một đoạn code mới lên GitHub, người quản gia này sẽ lập tức nhảy vào, tự động gõ lệnh chạy các bài Unit Test để xem code mới có làm hỏng app không. Nếu có lỗi, nó sẽ báo động ngay lập tức!
- CD (Phân phối liên tục): Nếu code vượt qua vòng kiểm tra, người quản gia sẽ tự động gõ lệnh
eas buildđể đóng gói app, và sau đó gõ tiếpeas submitđể đẩy thẳng bản cập nhật đó lên TestFlight hoặc Google Play.
Kết quả: Việc duy nhất bạn phải làm là gõ code và ấn nút Push. Mọi công đoạn đóng gói, kiểm thử, phân phối sẽ diễn ra hoàn toàn tự động trong lúc bạn đi uống cà phê.
2. Cặp bài trùng: GitHub Actions & Expo EAS
Để thuê "người quản gia" này, chúng ta không cần tốn một xu nào. Chúng ta sẽ sử dụng công cụ GitHub Actions (được cung cấp miễn phí cho mọi kho chứa mã nguồn trên GitHub) kết hợp với hệ thống EAS Build mà bạn đã quen thuộc.

Quy trình sẽ diễn ra như sau:
- Bạn Push code lên nhánh
maintrên GitHub. - GitHub Actions nhận tín hiệu, khởi tạo một máy tính ảo (Server).
- Máy tính ảo này sẽ cài đặt NodeJS, cài đặt thư viện Expo.
- Nó tự động đăng nhập vào tài khoản Expo của bạn thông qua một chìa khóa bí mật (Token).
- Nó ra lệnh cho máy chủ Expo bắt đầu Build app và Submit lên Store.
3. Khởi tạo "Bản hợp đồng" theo ý của bạn
GitHub Actions hoạt động dựa trên các kịch bản (Workflow) được viết bằng ngôn ngữ định dạng YAML.
Bước 1: Lấy chìa khóa bí mật (Expo Token)
Máy chủ GitHub cần quyền truy cập vào tài khoản Expo của bạn để ra lệnh build.
- Truy cập expo.dev/settings/access-tokens.
- Bấm Create Token, đặt tên là GitHub CI/CD và copy đoạn mã hiện ra.
- Vào kho (Repository) chứa code của bạn trên GitHub. Chọn Settings > Secrets and variables > Actions.
- Bấm New repository secret. Ô Name nhập
EXPO_TOKEN, ô Secret dán đoạn mã vừa copy vào. Bấm Add.
Bước 2: Viết kịch bản tự động hóa (YAML File)
Trong thư mục dự án trên máy tính của bạn, hãy tạo các thư mục lồng nhau theo đúng đường dẫn này: .github/workflows/.
Bên trong thư mục workflows, tạo một file tên là eas-build.yml và dán đoạn code "ma thuật" sau vào:
name: Tự động Build và Submit lên Store
# 1. Khai báo khi nào thì chạy kịch bản này?
on:
push:
branches:
- main # Chạy khi có code mới đẩy lên nhánh main
# 2. Khai báo các công việc cần làm
jobs:
build_and_submit:
name: Build & Submit App
runs-on: ubuntu-latest # Chạy trên máy chủ ảo Linux
steps:
# Bước 1: Tải code từ GitHub về máy ảo
- name: Lấy mã nguồn (Checkout)
uses: actions/checkout@v3
# Bước 2: Cài đặt NodeJS
- name: Cài đặt Node.js
uses: actions/setup-node@v3
with:
node-version: 18.x
cache: npm
# Bước 3: Cài đặt công cụ Expo và EAS CLI
- name: Cài đặt Expo và EAS
uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }} # Sử dụng Token bí mật vừa cài
# Bước 4: Cài đặt các thư viện trong package.json
- name: Cài đặt thư viện (npm install)
run: npm install
# Bước 5: Ra lệnh Build và Đẩy lên TestFlight (iOS) tự động
- name: Tự động Build & Submit iOS
run: eas build --platform ios --profile production --non-interactive --auto-submit
# Bước 6: Ra lệnh Build và Đẩy lên Google Play (Android) tự động
- name: Tự động Build & Submit Android
run: eas build --platform android --profile production --non-interactive --auto-submit
(Lưu ý: Thuộc tính --non-interactive vô cùng quan trọng, nó báo cho EAS biết rằng đang chạy trên máy chủ tự động nên không được hiển thị các câu hỏi Yes/No bắt người dùng gõ phím).
4. Tận hưởng thành quả của kỹ sư DevOps

Bây giờ, bạn hãy lưu file lại và gõ lệnh Push toàn bộ code lên GitHub.
Ngay lập tức, bạn hãy mở trang GitHub của dự án, bấm sang tab Actions. Bạn sẽ thấy một chấm màu vàng đang xoay. Nhấp vào đó, bạn sẽ thấy "người quản gia" GitHub Actions đang miệt mài chạy từng dòng lệnh mà bạn đã thiết lập ở trên.
Khi các chấm chuyển sang màu xanh lá (Xong), một email từ Apple TestFlight và Google Play sẽ gửi thẳng vào hộp thư của bạn thông báo: "Bản cập nhật ứng dụng mới đã sẵn sàng để kiểm thử!"
Cảm giác nhìn máy móc tự động làm việc thay mình chính là một trong những trải nghiệm thỏa mãn nhất của nghề lập trình!
Lời kết cho toàn bộ hành trình!
Gửi người bạn đã đồng hành xuyên suốt từ Bài 1 đến Bài 28,
Chúng ta đã đi một chặng đường rất dài. Từ những khái niệm cơ bản về Component, rẽ nhánh sang quản lý State, điều khiển Navigation, gọi API giao tiếp với thế giới thực. Chúng ta đã cùng nhau đập vỡ giới hạn của Expo Go bằng Native Modules, vẽ bản đồ, chụp ảnh, bắn thông báo đẩy. Và cuối cùng, chúng ta đóng gói, nộp ứng dụng lên Store, và tự động hóa toàn bộ bằng CI/CD.
Bạn không còn là một người "đang học code" nữa. Với lượng kiến thức này, bạn đã hội tụ đầy đủ kỹ năng của một Lập trình viên Mobile chuyên nghiệp, sẵn sàng ứng tuyển vào bất kỳ công ty công nghệ nào hoặc tự tay khởi nghiệp với những sản phẩm mang dấu ấn cá nhân.
Công nghệ luôn thay đổi, React Native và Expo sẽ tiếp tục ra mắt những phiên bản mới. Nhưng tư duy kiến trúc hệ thống và cách giải quyết vấn đề mà bạn học được qua series này sẽ đi theo bạn suốt sự nghiệp.
Hãy liên tục thực hành, tạo ra những ứng dụng tuyệt vời và để lại dấu ấn của bạn trên bản đồ công nghệ thế giới. Chúc bạn thành công rực rỡ!