Tìm hiểu về continuous integration(CI) và Jenkins

Chào các bạn, nay mình giới thiệu với các bạn một khái niệm "mới"(chắc chỉ với mình hoặc một số bạn mới ra trường giống mình) mà dạo này mình đang nhồi nhét vào để kịp với thời đại. CI ngày nay được áp dụng ở hầu như là tất cả dự án lớn, và là yêu cầu bắt buộc khi mọi người làm Agile. Vậy hãy nắm bắt CI từ ngay lúc này, ít ra các bạn có thể còn trả lời được câu hỏi phỏng vấn =))

Continuous integration?

Nôm na các bạn có thể hiểu được bằng cách dịch word by word đó là tích hợp liên tục, vậy nó liên quan gì đến việc phát triển phần mềm. Trở lại quá khứ xa một tí thời mà chúng ta còn viết hello world khi code một project với nhóm thường mọi người chia nhỏ thành từng phần nhỏ hoặc chức năng nhỏ để hoàn thành source và nộp(mình đang nói về là nhóm trong mơ không phải là 1 mình cân hết team nhé), và sau khi code xong từng phần nhỏ thì sẽ ngồi hợp lại ôm 1 cái máy chép code của từng đứa từ usb vào và build. That shit compile sẽ bị fail khá là cao. Khi chép đè hoặc chép thiếu của việc merge code usb. Hậu quả là đêm hôm ấy chúng ta dành cả thanh xuân để fix bug. Vì thế chép code bằng usb trở thành ác mộng sau những đêm như vậy với đứa nào dám nhận ráp code. Tới lúc đó mọi người lại nghe bên nhóm khác nói tới có những công cụ quản lý source code hay lắm nào là SVN nào là GIT, tụi bây chỉ cần code xong merge từ từ vào. Mỗi sáng, từng đứa update code từ SVN/Git về, code say sưa, sau đó commit code lên trước khi về nhà. SVN/GIT trở thành bạn tốt đối với thằng ráp code khi giờ đây nó không sợ chép thiếp, chép đè. Nhưng đôi khi code merge rồi lại không build được, lúc đấy lại đi tìm nguyên nhân và thủ phạm nào là tao fix comflict không test lại, nào chỗ đó tao quên commit, hay chỉ là do quên dấu ';'. Việc tích hợp source code trở thành nỗi ác mộng của tất cả mọi người. Rồi khi đọc đâu đó trên mạng có thằng ất ơ nào viết về nào là hệ thống CI tự động lấy code về, tự động build, tự động báo lỗi, tự động deploy... , nghe từng ấy tự động là cảm giác cuộc đời còn tí ý nghĩa để tiếp tục, vì với CI thì việc báo lỗi gần như được thực hiện ngay lập tức và nó show ra từ lúc đẩy pull và không ảnh hưởng đến cả team vì thế rất tiết kiệm thời gian điều tra cho mọi người. Thêm vào đó CI còn hỗ trợ thực thi các Unit test để phù hợp cho việc làm phần mềm một cách lâu dài, không sợ sửa chỗ này hư chỗ khác.

***Nói tóm lại, CI – tích hợp liên tục là phương pháp mà các team Agile sử dụng để đảm bảo code của toàn dự án luôn build được, luôn chạy đúng. ***

Trên Github đã có rất nhiều CI tools với những ưu và nhược điểm riêng

  • Circle CI
  • Jenkins
  • AppVeyor
  • CodeShip
  • Drone
  • Semaphore CI
  • Buildkite
  • Wercker
  • TeamCity Ở bài viết này mình chọn jenkins chắc đơn giản nó là cái đầu tiên mình nghe nói tới. Nhưng "deep" hơn tí đó là công cụ riêng mà bạn tự host không phụ thuộc vào bên thứ 3 và đảm bảo private. Nhưng trái lại bạn phải trả tiền server, phải thiết lập và còn lăn tăn build job

Jenkins

Jenkins là mã nguồn mở cho việc tích hợp continuous integration được viết bằng java. Jenkins giúp cho chúng ta tự động chạy các script. Nó xây dựng và kiểm tra phần mềm của bạn liên tục và theo dõi việc thực hiện và tình trạng của các công việc từ xa, làm cho các thành viên và người dùng dễ dàng hơn để có được source ổn định mới nhất. Trong bài này mình chủ yếu sẽ viết về cách mình cài đặt jenkins và tích hợp jenkins với github. Bài viết tiếp theo mình sẽ viết về build source rails, và report CI, test sercuriy và performance.

Cài đặt jenkins

Rất dễ dàng hãy chạy từng dòng lệnh sau ở máy ubuntu của bạn(các bạn có thể kiếm một con free-tier instance và setup cho nó). Đương nhiên là hãy cài java jdk vào trước nhé !!!

wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

Đối với các môi trường khác các bạn có thể tham khảo tại đây https://jenkins.io/download/ Sau khi cài đặt xong bạn có thể chạy lệnh khởi động sudo service jenkins start Mặc định thì jenkins chạy ở port 8080. Nếu bạn muốn thay đổi thì có thể cài đặt proxy nginx hoặc apache ở đây Ở phần sau mình sẽ hướng dẫn các bạn tích hợp sau vào project như cài đặt git, ruby, mysql. Còn bây giờ hãy làm quen với màn hình quản lý của jenkins trước gõ vào localhost:8080 Nếu bị hỏi password khi đăng nhập thì các bạn có thể tìm password bằng command sau tại terminal: sudo cat /var/lib/jenkins/secrets/initialAdminPassword Tiếp theo là màn hình cài đặt plugin các bạn có thể để Jenkins tự cài đặt các plugin thông dụng như git, email, ssh hoặc bạn có thể custom ( sorry vì mình quên chụp màn hình) quá trình cài đặt plugin

Tiếp theo các bạn tạo thông tin admintạo thông tin admin

Đây là màn hình quản lý jenkinsĐây là màn hình quản lý jenkins

Configure jenkins

Mình giới thiệu các bạn một số cài đặt cơ bản của jenkins

  1. Jenkins hoàn toàn mở, ai cũng có thể access vào nếu biết địa chỉ. Do đó để thiết lập an toàn cho Jenkins chúng ta sử dụng trong Manage Jenkins. Đầu tiên các bạn có thể tạo user acesss vào jenkins bằng tab Manage User -> create user
  2. Configure Global Security Ở trang này, check “Enable Security, “Jenkins’ own user database” dưới “Security Realm”. Sau đó, chọn “Project-based Matrix Authorization Strategy” dưới “Authorization”. Từ đây, thêm “admin” và “github” users, chọn hết permissions cho admin and chỉ “Read” for github. Các bạn có thể kiểm tra theo ảnh dưới
  3. Trang People(Trang chủ -> tab People) màn hình để xem user của jenkins Đây là một số config cơ bản về jenkins phần sau mình sẽ đi vào chức năng chính để new item và create project Cảm ơn các bạn đã theo dõi. Have a nice day