hoctrokha
Member
CI là gì?
Nói tới CI, thứ đầu tiên mọi người thường nghĩ đến là cái pipeline: jenkin, travis, circle...
Và khi dự án dùng một trong các toolchain đó, các bạn liền viết vào CV là có kinh nghiệm với CI/CD.
Điều đó cũng khó mà trách được khi amazon còn để ngay cái nút "Try AWS CodePipeline" ngay trên phần định nghĩa mà.
Mình không nói định nghĩa đó sai, nhưng nó thường sẽ khiến người ta hiểu nhầm mức độ quan trọng của cái pipeline trong CI.
Mình đoán cũng bởi họ cần marketing cho cái AWS Codepipeline.
Mình thấy một định nghĩa khác cho bạn một cái nhìn đúng đắn hơn đến từ wikipedia:
"In software engineering, continuous integration is the practice of merging all developers' working copies to a shared mainline several times a day."
Ok, định nghĩa trên nói rằng mình cần merge code vào main branch nhiều lần mỗi ngày, và nó chả có gì liên quan đến toolchain cả.
Tại sao cần CI?
Có một khái niệm trong phát triển phần mềm tên: "blackout period".
Khái niệm này nói đến khoảng thời gian khi hai developer làm việc trên 2 branch tách biệt nhau,công việc kéo dài dẫn đến hai developer không biết người kia làm gì trong khoảng thời gian đó.
Nếu blackout period càng dài thì khả năng merge vào bị conflict càng cao. Còn tệ hơn nữa nếu như chính requirement cũng bị conflict dẫn đến phải kéo BA vào để giải quyết.
CI sinh ra để rút ngắn blackout period xuống còn vài giờ.
Nhưng, bạn biết main branch là gì chứ? Nó là branch mà thường chỉ có lead được merge vào, vậy thế quái nào CI lại muốn mọi người merge vào branch đó nhiều lần mỗi ngày?
Ai sẽ đứng ra review các PR?
Hiện thực hóa CI
Mới nghe thì hơi khó khăn, nhưng đến lúc thử làm thì đúng là khó khăn thật, khó vãi nồi.
Hiện thực hóa CI là một quá trình gian khổ và chịu chơi của dự án.
Trước hết, ta phải tưởng tượng ra thế giới khi dùng CI và cố để đạt được nó nhé:
- Không có PR
- Main branch mở cho cả làng, ai cũng có thể commit trực tiếp vào
- Có một release branch cho mỗi lần release
Tất nhiên sẽ có nhiều team vẫn cần PR, nhưng với mình flow này là hợp lý nhất. Mình sẽ nói về PR trong CI sau.
Có lẽ ai đọc xong các gạch đầu dòng trên thì cũng hoang mang và muốn chửi mình:
Đừng lo, bởi vậy CI mới khó, và mình sẽ hướng dẫn các bạn cách giải quyết.
Để làm được các gạch đầu dòng trên thì trước hết phải có test: khi code của bạn có các test xịn, nó giúp mình tin tưởng bạn hơn một phần nào đó.
Khi mình tin bạn thì mình mới cho bạn commit lên main chứ.
Nhưng thế nào mới được gọi là test xịn? Không có PR thì ai sẽ kiểm chứng các test đó có xịn hay không?
Mình sẽ trình bày cái này trong bài tiếp theo: TDD
Hôm nay chỉ mới viết được nhiêu đây thôi, các bạn chờ bài tiếp theo nhé. Khi ra bài mới mình sẽ comment và update link trong bài này.
Trong thời gian chờ, các bạn cứ tiếp tục tìm hiểu theo các gạch đầu dòng đó và từ khóa TDD nhé.
Mới lúc nãy vừa phỏng vấn một bạn Technical lead và bạn ý bảo là CI là cái toolchain, nên mình quyết định sẽ viết bài này cho đàng hoàng.
Mục đích của mình là giúp dev Việt Nam có một cái nhìn đúng đắn về CI, qua đó có được những mục tiêu tiếp theo để tìm hiểu, trở thành world-class developer đồ ... Yeah.![beauty :beauty: :beauty:](https://data.voz.vn/styles/next/xenforo/smilies/popopo/beauty.png?v=01)
Phần 2: https://voz.vn/t/continous-integration-p2-tdd.500547/
Nói tới CI, thứ đầu tiên mọi người thường nghĩ đến là cái pipeline: jenkin, travis, circle...
Và khi dự án dùng một trong các toolchain đó, các bạn liền viết vào CV là có kinh nghiệm với CI/CD.
Điều đó cũng khó mà trách được khi amazon còn để ngay cái nút "Try AWS CodePipeline" ngay trên phần định nghĩa mà.
Mình không nói định nghĩa đó sai, nhưng nó thường sẽ khiến người ta hiểu nhầm mức độ quan trọng của cái pipeline trong CI.
Mình đoán cũng bởi họ cần marketing cho cái AWS Codepipeline.
Mình thấy một định nghĩa khác cho bạn một cái nhìn đúng đắn hơn đến từ wikipedia:
"In software engineering, continuous integration is the practice of merging all developers' working copies to a shared mainline several times a day."
Ok, định nghĩa trên nói rằng mình cần merge code vào main branch nhiều lần mỗi ngày, và nó chả có gì liên quan đến toolchain cả.
Tại sao cần CI?
Có một khái niệm trong phát triển phần mềm tên: "blackout period".
Khái niệm này nói đến khoảng thời gian khi hai developer làm việc trên 2 branch tách biệt nhau,công việc kéo dài dẫn đến hai developer không biết người kia làm gì trong khoảng thời gian đó.
Nếu blackout period càng dài thì khả năng merge vào bị conflict càng cao. Còn tệ hơn nữa nếu như chính requirement cũng bị conflict dẫn đến phải kéo BA vào để giải quyết.
CI sinh ra để rút ngắn blackout period xuống còn vài giờ.
Nhưng, bạn biết main branch là gì chứ? Nó là branch mà thường chỉ có lead được merge vào, vậy thế quái nào CI lại muốn mọi người merge vào branch đó nhiều lần mỗi ngày?
Ai sẽ đứng ra review các PR?
Hiện thực hóa CI
Mới nghe thì hơi khó khăn, nhưng đến lúc thử làm thì đúng là khó khăn thật, khó vãi nồi.
Hiện thực hóa CI là một quá trình gian khổ và chịu chơi của dự án.
Trước hết, ta phải tưởng tượng ra thế giới khi dùng CI và cố để đạt được nó nhé:
- Không có PR
- Main branch mở cho cả làng, ai cũng có thể commit trực tiếp vào
- Có một release branch cho mỗi lần release
Tất nhiên sẽ có nhiều team vẫn cần PR, nhưng với mình flow này là hợp lý nhất. Mình sẽ nói về PR trong CI sau.
Có lẽ ai đọc xong các gạch đầu dòng trên thì cũng hoang mang và muốn chửi mình:
- Ko có PR thì sao review code?
- Ko có PR lỡ một ông nào đó code bậy rồi sao?
- Rồi muốn release nhưng code có bug thì sao mà rollback để release các feature khác?
Đừng lo, bởi vậy CI mới khó, và mình sẽ hướng dẫn các bạn cách giải quyết.
Để làm được các gạch đầu dòng trên thì trước hết phải có test: khi code của bạn có các test xịn, nó giúp mình tin tưởng bạn hơn một phần nào đó.
Khi mình tin bạn thì mình mới cho bạn commit lên main chứ.
Nhưng thế nào mới được gọi là test xịn? Không có PR thì ai sẽ kiểm chứng các test đó có xịn hay không?
Mình sẽ trình bày cái này trong bài tiếp theo: TDD
Hôm nay chỉ mới viết được nhiêu đây thôi, các bạn chờ bài tiếp theo nhé. Khi ra bài mới mình sẽ comment và update link trong bài này.
Trong thời gian chờ, các bạn cứ tiếp tục tìm hiểu theo các gạch đầu dòng đó và từ khóa TDD nhé.
Mới lúc nãy vừa phỏng vấn một bạn Technical lead và bạn ý bảo là CI là cái toolchain, nên mình quyết định sẽ viết bài này cho đàng hoàng.
Mục đích của mình là giúp dev Việt Nam có một cái nhìn đúng đắn về CI, qua đó có được những mục tiêu tiếp theo để tìm hiểu, trở thành world-class developer đồ ... Yeah.
![beauty :beauty: :beauty:](https://data.voz.vn/styles/next/xenforo/smilies/popopo/beauty.png?v=01)
Phần 2: https://voz.vn/t/continous-integration-p2-tdd.500547/
Last edited: