DevOps phần 2 – Tích hợp CI/CD vào project Laravel đơn giản

Tram Ho

CI là gì? CD là gì?

CI – Continuous Integration – Tích hợp liên tục
Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên trong nhóm tích hợp công việc thường xuyên. Mỗi ngày, các thành viên đều phải theo dõi và phát triển công việc của họ ít nhất một lần. Việc này sẽ được một nhóm khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn.

CD – Continuous Delivery – Chuyển giao Liên tục
Chuyển giao liên tục là chuyển giao liên tục, là 1 tập hợp các kỹ thuật để triển khai tích hợp souce code trên môi trường staging ( một môi trường rất giống với môi trường production).

Config CI (phpcs, phpunit) cho 1 project Laravel đơn giản

1. Tạo API Laravel

1. Tạo project laravel

Chúng ta chỉ cần vào terminal và chạy lệnh sau

Tiếp theo init project vừa tạo vào lên git

2. Config database

Trong bài naỳ SQLite sẽ được sử dụng cho testing và cơ sở dữ liệu chính của chúng ta. Thông thường, cơ sở dữ liệu chính là một DBMS phức tạp hơn như MySQL hoặc MSSQL nhưng để cho đơn giản với mục đích minh họa. Chúng ta sẽ giữ cấu hình cho cơ sở dữ liệu chính trong file .env , và sau đó tạo một file .env.testing để giữ cấu hình cơ sở dữ liệu cho việc test.

Trong file nv.testing chúng ta sẽ config như sau :

Để có thể trỏ đến file cơ sở dữ liệu SQLite của chúng ta như chúng ta đã config trong file.env.testing thì bên trong config/database.php cũng phải thay thế cấu hình SQLite trong connections array bằng config bên dưới:

Sau đó chạy lệnh migrate để kiểm tra config của chúng ta vừa rồi đã đúng chưa

Cài đặt token-based authentication với Passport

Để xác thực authen mình sẽ sử dụng package laravel/passport của Laravel

Sau khi cài đặt xong, chạy lại lệnh migrate đểmigrations các bảng liên quan đến laravel/passport:

Passport yêu cầu các keys mã hóa để tạo tokens , các keys này cần được tạo và lưu trong cơ sở dữ liệu. Để tạo các keys này, chúng ta chạy lệnh

Sau khi chạy command thành công, bạn sẽ nhìn thấy các Client secret của mình

Bước tiếp theo là thêm LaravelPassportHasApiToken trait vào model AppUser . Chúng ta sẽ sử dụng được các method helper từ package laravel/passport vào app để giúp kiểm tra user’s token và scopes. Mở file app/User.php và thay thế nội dung của nó bằng code bên dưới:

Tiếp theo ccần gọi method Passport::routes trong hàm booth của file app/Providers/AuthServiceProvider.php

Cấu hình cuối cùng mà Passport requires setting nó làm driver option trong bộ bảo vệ xác thực API bên trong config/auth.php.

4. Tạo API endpoints

Chúng ta sẽ build API đơn giản quản lí suser. User sẽ có những chức năng sau :

Đăng ký một tài khoản mới

Đăng nhập vào tài khoản của họ bằng thông tin đăng nhập của user

Tìm nạp thông tin của user

Đăng xuất khỏi ứng dụng

  • Trước tiên chúng ta cần khai báo routes trong file routes/api.php :

  • Tiếp đến tạo Controller

Trong AuthController chúng ta code các function signup, login, logout, user

  • Tiếp đến tạo 1 Unit test để test API chúng ta vừa tạo

Trong file UserTest của chúng ta sẽ như sau :

Sau đó chúng ta tiến hành chạy test

2. Tự đông hóa test với CircleCI

Đã đến lúc giới thiệu sức mạnh của CI / CD vào API Laravel của chúng ta. Mình sẽ tạo một pipeline để đảm bảo rằng khi chúng ta đẩy code mới, các test của chúng ta sẽ tự động chạy và chúng ta nhận được pipeline status CI / CD successful hoặc failed. (go)

1.CircleCI

Giới thiệu về CircleCI một chút :

CircleCI là 1 tool để giúp ta hiện thực hóa CI. Có nhiều tool CI khác cũng nổi tiếng nữa (Travis CI, Jenkins…), lý do mình chọn Circle CI chỉ vì nó khá đơn giản và đầy đủ các chức năng mà mình cần.

CircleCI sử dụng docker, trong cấu hình Circle CI ta sẽ chỉ định các docker image sẽ sử dụng và các job, trong các job lại có các step, trong các step là cụ thể các command. Ngoài ra còn có cấu hình filter giúp ta linh hoạt điều chỉnh sao cho chỉ run các job khi có merge/push vào 1 số branch nhất định vân vân.

Mô tả quá trình run 1 job trên Circle CI:

Developer chỉ cần push hoặc merge vào 1 branch, Circle CI tự động biết event đó và khởi động lên job đã được cài đặt tương ứng.
Ban đầu Circle CI pull docker image về và run lên trên môi trường cloud của nó.

Tiếp theo nó chạy các step đã được cài đặt trong docker container, thông thường step đầu tiên luôn là checkout tức là git checkout lấy source về (mặc định lưu trong thư mục ~/project)

Các step tiếp theo được chạy tùy vào độ sáng tạo của bạn, ví dụ job để build thì thường là npm install rồi npm run abcxyz hay job để deploy thì có thể là aws s3 sync hay serverless deploy…

Sau khi tất cả các step đã chạy xong, job kết thúc. Nếu exit code của job là error thì mặc định ta sẽ nhận được mail thông báo failed nữa.

Nói tóm lại, sau khi cài đặt và cấu hình ta chỉ việc dev còn các công việc như build, chạy test, deploy vân vân được tự động hóa hoàn toàn và chạy tức thì trên môi trường cloud mạnh mẽ miễn phí của Circle CI.

1. Đăng kí plan

CircleCI cung cấp cho người dùng 4 gói, ở đây mình sẽ đăng kí gói free (vì mình hổng có xiên)
các bạn có thể thấy ở gói free chúng ta có :

1500 phút build

Không giới hạn repository và user

4x project build cùng lúc với public repository và 1x với private repository

Sau khi install xong thì sẽ chuyển đến dashboard như sau :

2. Tích hợp vào project

Mình sẽ lựa chọn project đã tạo phía trên demo-ci sau đó click setup project


Circleci hỗ trợ chúng ta rất nhiều ngôn ngữ như PHP, Java, .NET, Go, IOS, Android, Python…. ở đây mình sẽ sử dụng PHP

1. TÍch hợp vào project laravel của mình

Tạo thư mục .circleci trong project
Trong thư mục .circleci Tạo file có tên làconfig.yml

Sau đo chúng ta lên github click Start building để bắt đầu build project . CircleCI sẽ bắt đầu chạy cấu hình pipeline . Nếu bạn đã làm theo đúng hướng dẫn, bạn sẽ có một bản build thành công được chỉ ra bởi màn hình bên dưới.

Perfect . Chúng ta đã có thể cấp nguồn thành công API Laravel của mình bằng một pipeline CI /CD tự động chạy test sử dụng CircleCI.

Chúng ta sẽ thêm 1 method test fucntion login vào file UserTest.php và push code để quan sát cách CircleCI tự động chạy thử nghiệm mới được thêm của chúng ta.

Bây giờ save file , commit và push lên GitHub. CircleCI sẽ một lần nữa chạy pipeline với các test, bao gồm cả testcase mà chúng ta vừa thêm vào.

Kết luận

Nguồn tham khảo

https://circleci.com/blog/build-a-ci-powered-restful-api-with-laravel/

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo