𝑻𝒉𝒊ế𝒕 𝒍ậ𝒑 𝑪𝑰 đơ𝒏 𝒈𝒊ả𝒏 𝒄𝒉𝒐 𝒑𝒓𝒐𝒋𝒆𝒄𝒕 .𝑵𝑬𝑻 𝒔ử 𝒅ụ𝒏𝒈 𝑱𝒆𝒏𝒌𝒊𝒏𝒔

CI/CD (Continuous Integration/Continuous Delivery) là khái niệm về tự động hóa trong quy trình phát triển phần mềm. Để hiểu thêm về khái niệm này và các lợi ích của nó thì các bạn có thể đọc thêm trên Google nhé 

Ở bài viết này mình sẽ chia sẻ cách mình tích hợp CI cho project dotnet core bằng Jenkins. Lý do mình dùng Jenkins mà không phải những công cụ khác đó là nó 

Quy trình CI mình gồm 2 bước : Build và Test 

1. CHUẨN BỊ MÔI TRƯỜNG
  • Ở đây mình tạo 1 con Droplets 1CPU 2RAM chạy Ubuntu 22.04 và đã cài sẵn Docker của DigitalOcean, tài khoản mới được free 200$ trong 60 ngày. Cài Docker vì Jenkins được viết bằng Java nên cần cài jdk, để chạy ngon nghẻ nhất thì mình chạy nó trên Docker luôn. Tất nhiên các bạn có thể cài Jenkins tại máy local, nhưng mình muốn chia sẻ để các bạn có thể áp dụng ngay vào project đang làm hoặc sắp làm.


  • SSH vào server để cài Jenkins:


- Pull và run Jenkins image
docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 --name jenkins jenkins/jenkins:lts-jdk17 (hình 4)

- Kiểm tra container đang chạy

 docker ps

 - Truy cập Jenkins URL

ipServer:8080 ví dụ của mình ở đây là 188.166.228.194:8080 (hình 5)

Lấy Admin password

docker exec -it jenkins /bin/bash -c "cat /var/jenkins_home/secrets/initialAdminPassword (hình 6)

Cài đặt các plugins đề xuất (hình 7)

Tạo Admin user mới (hình 8 )
2. TẠO JENKINS JOB
  • Cài đặt plugin 🅽🅴🆃 SDK Support ( Cái này quan trọng để giúp Jenkins có thể chạy các lệnh dotnet 💪)
  • Cấu hình .NET SDK trong Jenkins (hình 9)

  • Tạo pipeline job mới, chỉ định GitHub repo (hình 10,11)




  • Bật GitHub hook trigger for GITScm polling (🔎 Giải thích: GitHub hook trigger for GITScm polling sử dụng cơ chế webhook của GitHub để kích hoạt Jenkins. Đơn giản hơn là khi ta push code mới lên GitHub sẽ kiểm tra có thay đổi gì mới và bắn message cho bên Jenkins thông qua webhook để Jenkins tiến hành build) (hình 12)

  • Định nghĩa pipeline bằng Jenkinsfile (🔎 Giải thích : Pipeline là một chuỗi các công việc(stage) được thực hiện tuần tự trong Jenkins. Ở đây mình định nghĩa pipeline dưới dạng file có tên là Jenkinsfile và để ở cùng với source code trên GitHub. Nếu mình giải thích khó hiểu quá thì các bạn có thể hiểu đơn giản hơn nó là 🧮lịch làm việc vậy đó. 💭 Ví dụ: bắt đầu ngày mới 7h ăn sáng, 8h đi làm, 12h ăn cơm, rồi 17h về nhà. Pipeline hoạt động cũng như vậy, và cái nơi để viết ra tường minh đó là Jenkinsfile📄) (hình 13,14)



3. KẾT NỐI GITHUB VỚI JENKINS
  • Thiết lập webhook GitHub (Vào Repo Github chọn setting > Webhooks > Add webhook (hình 15) , mình chỉ chọn push event để demo, các bạn có thể chọn những cái khác tùy theo nha)

  • Nếu trong trường hợp repo của bạn để private 🚫, thì bạn cần phải thêm 1 bước tạo Credentials. Ở phạm vi bài viết này mình muốn nó đơn giản nhất có thể nên repo mình sẽ để public nhóe 😗
4. THỰC HIỆN PUSH VÀ KIỂM TRA KẾT QUẢ
  • Bây giờ chỉ cần push code lên để xem điều gì xảy ra nào❓
  • Mỗi lần mình thực hiện hành động push code lên github thì bên Jenkins sẽ tự động thực hiện hành động build job Jenkins-pipeline đã tạo ✳. Nó sẽ lần lượt chạy cái step đã được viết trong Jenkinsfile nếu tất cả các step đều thành công thì nó sẽ báo Success ✅ ở tất cả các step. Còn nếu trong quá trình build job xảy ra lỗi ở bất kì step nào thì sẽ báo Failed ❌ và mình cũng có thể theo dõi chính xác fail ở bước nào bằng cách chọn Console Output để xem chi tiết.
  • Như bạn thấy ở hình 16 ở lần build thứ #6 Jenkins báo failed ❌. Tại vì ở cái commit mình push lên này mình đã cố tình sửa sai Test. Lần build #7 mình đã sửa lại test đúng do đó stage build và test đã success ✅. Quá đã :>


=> Vậy là mình đã thực hiện xong các bước để để cấu hình CI cho 1 project .net siu dễ Cảm ơn các bạn đã quan tâm và hy vọng bài viết sẽ mang lại giá trị cho mọi người.
Hẹn gặp lại ở các bài viết sau!

1 Nhận xét

Mới hơn Cũ hơn

Biểu mẫu liên hệ