Hà Nội, một buổi chiều mùa thu.
Vậy là sau 2 tháng phong tỏa, Hà Nội đã chính thức mở giãn cách, cũng như bao nhiêu người dân Hà Nội khác, tôi ra ngoài, hít thở cái không khí trong lành, mát mẻ của mùa thu Hà Nội, mùa đẹp nhất trong năm
Mỗi khi rảo bước trên con phố này, bao nhiêu kỉ niệm trong tôi lại ùa về, một thời bồng bột và vụng dại. Hơn 15 năm đã qua đi, vẫn con phố ấy mà người thì đi đâu mất rồi
Ting ting, tiếng message bắn liên hồi từ Microsoft Team
Bên team Developer thông báo PR builder bị lỗi anh ei, các Pull Request đều không merge được
Các pull request của các anh không chạy được, block release 21.13, cuối ngày các chú xử không xong, anh escalate lên lãnh đạo, cho chúng mày chết
Fix ASAP, blob la…
Đang lúc dạt dào cảm xúc thì đứt cái phựt, tụt hết cả mood, đành phải phi về kiểm tra. Giở các PR trên Github, ờ cái nào cũng đỏ loét
Trước hết, giải thích chút về cái gọi là PR builder trong hệ thống CICD này. Đây có thể hiểu như là một quality gate, mỗi khi developer tạo PR vào protected branch, PR builder sẽ tự động trigger để thực hiện các bước sau
Scan code bằng SonalQuebe
Chạy unit test và integration test
Scan bảo mật bằng tool snyk
Automerge nếu như các step trên đều pass
Trong các step trên thì có đoạn integration test là khá phức tạp. Với CICD pipeline truyền thống, code sẽ được build và deploy lên server cloud và chạy test để generate reports. Server cloud được provision sẵn từ trước để deploy. Tuy nhiên cách làm này không áp dụng vì PR builder là bước CI mục đích chỉ để build và test code, khi nào chính thức release mới deploy. Nếu provision sẵn server thì quá tốn kém, một ngày có hàng trăm PR được tạo cùng lúc, bao nhiêu server cho vừa, và khó quản lý
Do đó, team DevOps đưa ra giải pháp, đó là provisioning 1 server tạm thời mỗi khi PR builder chạy, rồi deploy code vào đó để execute test, do khi test xong thì terminate nó đi. Server temporary này được đặt tên là EPOD
Epod được deploy trên K8S, bao gồm ngnix proxy tới backend pod và các service pod. Tất cả các k8s pod này được đặt trong 1 namespace
PR builder trigger 1 pipeline Jenkins để thực hiện build code, run unit test và launch epod trên, deploy code rồi execute integration test
Để visualize những step trên, plugin Blue Ocean được install vào Jenkins
Thời gian để spin up 1 EPOD và deploy code mất khoảng 45 phút, chạy test mất 60 phút nữa, khoảng 2 tiếng để hoàn thành 1 PR, tương đối lâu cần optimize để giảm thời gian xuống.
Kiểm tra logs của pipeline, epod vẫn spin up ngon lành, xanh lét, infrastructure vẫn ổn, nhưng sao PR vẫn failed sạch.
Mở hướng điều tra sang integration test, WTF, PR nào cũng reports một số test case failed. Dek, code không pass bộ test suite mà cứ đổ vạ, akay vãi lúa.
Mấy anh xem lại code giùm em, infra vẫn ổn, code bị failed test case
Failed cl, bọn tao có sửa code gì đặc biệt đâu, chỉ change name, add variable thôi, chúng mày làm lởm lại bảo tao sai, tối tao report lãnh đạo, đi mà giải trình
Các sếp to ko nắm về kĩ thuật, nghe báo cáo thì nói
Các chú fix đi, PR builder do các chú build, giờ nó failed thì auto lỗi của các chú
Cay cú lắm, nhưng đang ở thế nắm đằng lưỡi, phải cắn răng đi debug code, đúng là có những PR chỉ minor change, thế nhưng lại fail test cases. Nếu thì chỉ có phía test suites có gì thay đổi rồi
Mất một đêm ngồi truy vết commit code như truy vết F1, F0, cuối cùng đã phát hiện ra
Ticket ABC: add flaky test vào test suites
Flaky test là gì vại, đó là một loại test mà chạy lần đầu thì fail, lần sau thì pass, chạy phát nữa thì lại failed, nói nôm na là test hên xui, mặc dù code thì không thay đổi
Ví dụ đơn giản của flaky test dư lày
Một UI test case test 1 cái form phải có chữ Hello Worlds. Test load cái web form về, search content xem có chữ Hello Worlds ko. Nếu web load ngon lành thì sẽ search dc và test pass. Những một ngày đẹp trời cá mập cắn cáp, web load mãi không lên, thế là test cases failed.
Cuối cùng thì rõ, hóa ra là mấy anh Dev add bộ flaky test vào test suites, làm cho PR builder failed. Không phải lỗi của CICD team, 3 năm rõ mười, ticket evidence show up đầy đủ, một cú vả vỡ mồm mấy con giời hay to còi. Việc của mấy cụ là phải xử lý cái flaky test này sao cho hợp lý
….
Rồi một ngày lại trôi qua, lại thả bộ trên con đường nhiều kỉ niệm.
0 Nhận xét