CI/CD cho data pipeline
Giới thiệu
Ở bài học về data pipeline
, chúng ta đã cùng nhau xây dựng và deploy data pipeline theo các bước như sau:
- Đóng gói code và môi trường thành image để chạy các bước trong pipeline
- Thực hiện kiểm thử code
- Copy Python script định nghĩa
DAG
sang thư mụcdags/
củaAirflow
Nếu tự động hóa được các bước này thì có thể đẩy nhanh quá trình release version mới cho pipeline mỗi khi developer thay đổi code. Ở bài học này chúng ta sẽ sử dụng Jenkins để làm điều này.
Jenkins pipeline
Chúng ta sẽ viết Jenkinsfile cho 3 bước trên như sau:
flowchart LR
n1[1. Build data pipeline] --> n2[2. Test data pipeline] --> n3[3. Deploy data pipeline]
Info
Ở bài học này, chúng ta sẽ sử dụng agent lả docker image python:3.9
, do đó trước hết bạn cần truy câp http://localhost:8081/pluginManager/ và cài đặt thêm plugin Docker Pipeline
.
- Định nghĩa agent là docker image
python:3.9
. Image này được sử dụng mặc định cho tất cả cácstage
trong pipeline. - Build image cho để chạy các bước trong Airflow pipeline
- Test code, phần này bạn sẽ bổ sung
unit test
,integration test
, .v.v. dựa vào bài học vềkiểm thử hệ thống
- Copy script chứa
DAG
qua folderdags/
của Airflow
Warning
Ở đây, chúng ta để ý file định nghĩa Jenkins CI/CD là Jenkinsfile_data_pipeline
, không phải tên mặc định là Jenkinsfile
, do đó chúng ta phải thêm một bước cài đặt trên Jenkins để khai báo file này. Để làm điều này, chúng ta truy cập đường dẫn http://localhost:8081/job/mlops-demo/configure và thay đổi Script Path
từ Jenkinsfile
sang Jenkinsfile_data_pipeline
.
Bug
Nếu bạn gặp hiện tượng Github API Rate Limit như sau:
Thì bạn thêm Credentials ở mục Github bằng cách ấn vào Add
như hình dưới:
Sau khi bạn thay đổi code ở folder data-pipeline/
và push code lên Github, bạn sẽ thấy Console Output
tương ứng với commit này hiển thị tương tự như sau:
Tổng kết
Ở bài học vừa rồi, chúng ta đã sử dụng Jenkins để xây dựng một CI/CD pipeline với 3 bước: buid image, test code và deploy Airflow pipeline. Developer bây giờ chỉ cần tập trung vào code, khi nào code xong thì push
lên Github và để CI/CD pipeline lo những phần còn lại một cách tiện lợi.
Ở bài học tiếp theo, chúng ta sẽ xây dựng một CI/CD pipeline phức tạp hơn một chút cho model serving
.