{"id":30002,"date":"2025-07-01T13:31:53","date_gmt":"2025-07-01T06:31:53","guid":{"rendered":"https:\/\/interdata.vn\/blog\/?p=30002"},"modified":"2026-01-22T10:22:00","modified_gmt":"2026-01-22T03:22:00","slug":"jenkins-la-gi","status":"publish","type":"post","link":"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/","title":{"rendered":"Jenkins L\u00e0 G\u00ec? H\u01b0\u1edbng D\u1eabn To\u00e0n Di\u1ec7n V\u1ec1 CI\/CD Automation Server"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed8I DUNG<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Jenkins-la-gi-Khai-niem-va-Lich-su-hinh-thanh\" >Jenkins l\u00e0 g\u00ec? Kh\u00e1i ni\u1ec7m v\u00e0 L\u1ecbch s\u1eed h\u00ecnh th\u00e0nh<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Dinh-nghia-chuyen-sau-ve-Jenkins\" >\u0110\u1ecbnh ngh\u0129a chuy\u00ean s\u00e2u v\u1ec1 Jenkins<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Lich-su-Tu-Hudson-den-Jenkins\" >L\u1ecbch s\u1eed: T\u1eeb Hudson \u0111\u1ebfn Jenkins<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#So-lieu-thong-ke-va-thi-phan\" >S\u1ed1 li\u1ec7u th\u1ed1ng k\u00ea v\u00e0 th\u1ecb ph\u1ea7n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Ban-Muon-Tu-Trien-Khai-Jenkins-Server\" >B\u1ea1n Mu\u1ed1n T\u1ef1 Tri\u1ec3n Khai Jenkins Server?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Tai-sao-nen-su-dung-Jenkins\" >T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng Jenkins?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Ma-nguon-mo-va-Mien-phi\" >M\u00e3 ngu\u1ed3n m\u1edf v\u00e0 Mi\u1ec5n ph\u00ed<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#He-sinh-thai-Plugin-khong-lo\" >H\u1ec7 sinh th\u00e1i Plugin kh\u1ed5ng l\u1ed3<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#De-dang-cai-dat-va-cau-hinh\" >D\u1ec5 d\u00e0ng c\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Kha-nang-phan-tan-Distributed-Builds\" >Kh\u1ea3 n\u0103ng ph\u00e2n t\u00e1n (Distributed Builds)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Cong-dong-ho-tro-lon\" >C\u1ed9ng \u0111\u1ed3ng h\u1ed7 tr\u1ee3 l\u1edbn<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Kien-truc-va-Cach-hoat-dong-cua-Jenkins\" >Ki\u1ebfn tr\u00fac v\u00e0 C\u00e1ch ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Jenkins<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Mo-hinh-Controller-%E2%80%93-Agent-Master-%E2%80%93-Slave\" >M\u00f4 h\u00ecnh Controller &#8211; Agent (Master &#8211; Slave)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Quy-trinh-xu-ly-Workflow-chuan\" >Quy tr\u00ecnh x\u1eed l\u00fd (Workflow) chu\u1ea9n<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Cac-khai-niem-quan-trong-trong-Jenkins\" >C\u00e1c kh\u00e1i ni\u1ec7m quan tr\u1ecdng trong Jenkins<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Pipeline-Duong-ong\" >Pipeline (\u0110\u01b0\u1eddng \u1ed1ng)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Jenkinsfile-va-phuong-phap-%E2%80%9CPipeline-as-Code%E2%80%9D\" >Jenkinsfile v\u00e0 ph\u01b0\u01a1ng ph\u00e1p &#8220;Pipeline as Code&#8221;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#JobProject-Cong-viecDu-an\" >Job\/Project (C\u00f4ng vi\u1ec7c\/D\u1ef1 \u00e1n)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Artifacts\" >Artifacts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Nang-Tam-He-Thong-CICD-Voi-Cloud-Server\" >N\u00e2ng T\u1ea7m H\u1ec7 Th\u1ed1ng CI\/CD V\u1edbi Cloud Server<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#So-sanh-Jenkins-voi-cac-cong-cu-CICD-khac\" >So s\u00e1nh Jenkins v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 CI\/CD kh\u00e1c<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Jenkins-vs-GitLab-CI\" >Jenkins vs. GitLab CI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Jenkins-vs-GitHub-Actions\" >Jenkins vs. GitHub Actions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Ket-luan-lua-chon\" >K\u1ebft lu\u1eadn l\u1ef1a ch\u1ecdn<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Huong-dan-cai-dat-Jenkins-co-ban-Quick-Start\" >H\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t Jenkins c\u01a1 b\u1ea3n (Quick Start)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Yeu-cau-he-thong\" >Y\u00eau c\u1ea7u h\u1ec7 th\u1ed1ng<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Cai-dat-bang-Docker\" >C\u00e0i \u0111\u1eb7t b\u1eb1ng Docker<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Thiet-lap-ban-dau-Post-installation\" >Thi\u1ebft l\u1eadp ban \u0111\u1ea7u (Post-installation)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Cac-cau-hoi-thuong-gap-FAQs\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p (FAQs)<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#1-Jenkins-co-mien-phi-khong\" >1. Jenkins c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#2-Jenkinsfile-la-gi\" >2. Jenkinsfile l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#3-Lam-sao-de-bao-mat-Jenkins\" >3. L\u00e0m sao \u0111\u1ec3 b\u1ea3o m\u1eadt Jenkins?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#4-Yeu-cau-cau-hinh-toi-thieu-de-chay-Jenkins-la-bao-nhieu\" >4. Y\u00eau c\u1ea7u c\u1ea5u h\u00ecnh t\u1ed1i thi\u1ec3u \u0111\u1ec3 ch\u1ea1y Jenkins l\u00e0 bao nhi\u00eau?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#5-Jenkins-co-ho-tro-Docker-khong\" >5. Jenkins c\u00f3 h\u1ed7 tr\u1ee3 Docker kh\u00f4ng?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/interdata.vn\/blog\/jenkins-la-gi\/#Ket-luan\" >K\u1ebft lu\u1eadn<\/a><\/li><\/ul><\/nav><\/div>\n<p>Quy tr\u00ecnh ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i \u0111ang \u0111\u1ed1i m\u1eb7t v\u1edbi nhi\u1ec1u \u00e1p l\u1ef1c v\u1ec1 th\u1eddi gian v\u00e0 ch\u1ea5t l\u01b0\u1ee3ng. C\u00e1c l\u1eadp tr\u00ecnh vi\u00ean th\u01b0\u1eddng m\u1ea5t h\u00e0ng gi\u1edd \u0111\u1ed3ng h\u1ed3 ch\u1ec9 \u0111\u1ec3 t\u00edch h\u1ee3p code th\u1ee7 c\u00f4ng. Nh\u1eefng xung \u0111\u1ed9t m\u00e3 ngu\u1ed3n kh\u00f4ng mong mu\u1ed1n th\u01b0\u1eddng xuy\u00ean x\u1ea3y ra khi nhi\u1ec1u ng\u01b0\u1eddi c\u00f9ng l\u00e0m vi\u1ec7c tr\u00ean m\u1ed9t d\u1ef1 \u00e1n. Vi\u1ec7c tri\u1ec3n khai \u1ee9ng d\u1ee5ng l\u00ean m\u00e1y ch\u1ee7 c\u0169ng t\u1ed1n nhi\u1ec1u c\u00f4ng s\u1ee9c v\u00e0 d\u1ec5 g\u1eb7p l\u1ed7i do con ng\u01b0\u1eddi. Nh\u1eefng v\u1ea5n \u0111\u1ec1 n\u00e0y t\u1ea1o ra nhu c\u1ea7u c\u1ea5p thi\u1ebft v\u1ec1 m\u1ed9t gi\u1ea3i ph\u00e1p t\u1ef1 \u0111\u1ed9ng h\u00f3a quy tr\u00ecnh. \u0110\u00e2y ch\u00ednh l\u00e0 l\u00fd do Jenkins xu\u1ea5t hi\u1ec7n v\u00e0 tr\u1edf th\u00e0nh c\u00f4ng c\u1ee5 kh\u00f4ng th\u1ec3 thi\u1ebfu.<\/p>\n<p><strong>Jenkins l\u00e0 m\u1ed9t Automation Server m\u00e3 ngu\u1ed3n m\u1edf<\/strong>, \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng ng\u00f4n ng\u1eef Java. C\u00f4ng c\u1ee5 n\u00e0y \u0111\u00f3ng vai tr\u00f2 trung t\u00e2m trong vi\u1ec7c t\u1ef1 \u0111\u1ed9ng h\u00f3a c\u00e1c quy tr\u00ecnh ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m. Jenkins h\u1ed7 tr\u1ee3 m\u1ea1nh m\u1ebd cho CI\/CD (Continuous Integration\/Continuous Delivery), gi\u00fap c\u00e1c nh\u00f3m ph\u00e1t tri\u1ec3n t\u00edch h\u1ee3p code li\u00ean t\u1ee5c v\u00e0 chuy\u1ec3n giao s\u1ea3n ph\u1ea9m nhanh ch\u00f3ng. B\u00e0i vi\u1ebft n\u00e0y t\u1eeb InterData s\u1ebd cung c\u1ea5p c\u00e1i nh\u00ecn to\u00e0n di\u1ec7n v\u1ec1 Jenkins, t\u1eeb kh\u00e1i ni\u1ec7m, ki\u1ebfn tr\u00fac \u0111\u1ebfn c\u00e1ch c\u00e0i \u0111\u1eb7t chi ti\u1ebft.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Jenkins-la-gi-Khai-niem-va-Lich-su-hinh-thanh\"><\/span>Jenkins l\u00e0 g\u00ec? Kh\u00e1i ni\u1ec7m v\u00e0 L\u1ecbch s\u1eed h\u00ecnh th\u00e0nh<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 hi\u1ec3u r\u00f5 b\u1ea3n ch\u1ea5t c\u1ee7a c\u00f4ng c\u1ee5 n\u00e0y, ch\u00fang ta c\u1ea7n \u0111i s\u00e2u v\u00e0o \u0111\u1ecbnh ngh\u0129a k\u1ef9 thu\u1eadt v\u00e0 ngu\u1ed3n g\u1ed1c ra \u0111\u1eddi c\u1ee7a Jenkins. Jenkins kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t ph\u1ea7n m\u1ec1m \u0111\u01a1n thu\u1ea7n m\u00e0 l\u00e0 c\u1ea3 m\u1ed9t h\u1ec7 sinh th\u00e1i.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Dinh-nghia-chuyen-sau-ve-Jenkins\"><\/span>\u0110\u1ecbnh ngh\u0129a chuy\u00ean s\u00e2u v\u1ec1 Jenkins<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>V\u1ec1 m\u1eb7t k\u1ef9 thu\u1eadt, Jenkins l\u00e0 m\u1ed9t h\u1ec7 th\u1ed1ng d\u1ef1a tr\u00ean m\u00e1y ch\u1ee7 (server-based system). Ph\u1ea7n m\u1ec1m n\u00e0y ch\u1ea1y trong c\u00e1c Servlet container nh\u01b0 Apache Tomcat. Jenkins ho\u1ea1t \u0111\u1ed9ng nh\u01b0 m\u1ed9t &#8220;ng\u01b0\u1eddi qu\u1ea3n gia&#8221; m\u1eabn c\u00e1n trong d\u1ef1 \u00e1n ph\u1ea7n m\u1ec1m. H\u1ec7 th\u1ed1ng n\u00e0y t\u1ef1 \u0111\u1ed9ng th\u1ef1c thi c\u00e1c t\u00e1c v\u1ee5 l\u1eb7p \u0111i l\u1eb7p l\u1ea1i. C\u00e1c t\u00e1c v\u1ee5 n\u00e0y bao g\u1ed3m vi\u1ec7c l\u1ea5y code m\u1edbi nh\u1ea5t t\u1eeb kho l\u01b0u tr\u1eef, bi\u00ean d\u1ecbch m\u00e3 ngu\u1ed3n, ch\u1ea1y c\u00e1c b\u00e0i ki\u1ec3m th\u1eed v\u00e0 \u0111\u00f3ng g\u00f3i s\u1ea3n ph\u1ea9m.<\/p>\n<p>S\u1ee9c m\u1ea1nh th\u1ef1c s\u1ef1 c\u1ee7a Jenkins n\u1eb1m \u1edf kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng. C\u1ed9ng \u0111\u1ed3ng ph\u00e1t tri\u1ec3n \u0111\u00e3 t\u1ea1o ra h\u00e0ng ngh\u00ecn ti\u1ec7n \u00edch m\u1edf r\u1ed9ng (plugins). C\u00e1c plugin n\u00e0y cho ph\u00e9p Jenkins giao ti\u1ebfp v\u1edbi h\u1ea7u h\u1ebft c\u00e1c c\u00f4ng c\u1ee5 kh\u00e1c trong quy tr\u00ecnh DevOps. D\u00f9 b\u1ea1n d\u00f9ng Git, Docker, Kubernetes hay AWS, Jenkins \u0111\u1ec1u c\u00f3 th\u1ec3 k\u1ebft n\u1ed1i v\u00e0 \u0111i\u1ec1u khi\u1ec3n \u0111\u01b0\u1ee3c.<\/p>\n<figure id=\"attachment_38350\" aria-describedby=\"caption-attachment-38350\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-38350\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-1.webp\" alt=\"Jenkins\" width=\"800\" height=\"436\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-1.webp 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-1-300x164.webp 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-1-768x419.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-38350\" class=\"wp-caption-text\">Jenkins<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Lich-su-Tu-Hudson-den-Jenkins\"><\/span>L\u1ecbch s\u1eed: T\u1eeb Hudson \u0111\u1ebfn Jenkins<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins c\u00f3 m\u1ed9t l\u1ecbch s\u1eed ph\u00e1t tri\u1ec3n \u0111\u1ea7y th\u00fa v\u1ecb v\u00e0 c\u0169ng kh\u00f4ng k\u00e9m ph\u1ea7n th\u0103ng tr\u1ea7m. C\u00e2u chuy\u1ec7n b\u1eaft \u0111\u1ea7u v\u00e0o n\u0103m 2004 t\u1ea1i Sun Microsystems. Kohsuke Kawaguchi, m\u1ed9t k\u1ef9 s\u01b0 t\u00e0i n\u0103ng, \u0111\u00e3 t\u1ea1o ra d\u1ef1 \u00e1n Hudson. \u00d4ng mu\u1ed1n t\u00ecm c\u00e1ch t\u1ef1 \u0111\u1ed9ng ki\u1ec3m tra code \u0111\u1ec3 tr\u00e1nh l\u00e0m h\u1ecfng c\u00e1c b\u1ea3n build tr\u01b0\u1edbc \u0111\u00f3. Hudson nhanh ch\u00f3ng tr\u1edf n\u00ean ph\u1ed5 bi\u1ebfn nh\u1edd t\u00ednh d\u1ec5 d\u00f9ng v\u00e0 linh ho\u1ea1t.<\/p>\n<p>N\u0103m 2010, Oracle mua l\u1ea1i Sun Microsystems. M\u00e2u thu\u1eabn \u0111\u00e3 n\u1ea3y sinh gi\u1eefa c\u1ed9ng \u0111\u1ed3ng ph\u00e1t tri\u1ec3n Hudson v\u00e0 Oracle v\u1ec1 v\u1ea5n \u0111\u1ec1 qu\u1ea3n l\u00fd th\u01b0\u01a1ng hi\u1ec7u. C\u1ed9ng \u0111\u1ed3ng mu\u1ed1n gi\u1eef t\u00ednh ch\u1ea5t m\u1edf v\u00e0 t\u1ef1 do c\u1ee7a d\u1ef1 \u00e1n. H\u1ec7 qu\u1ea3 l\u00e0 v\u00e0o n\u0103m 2011, m\u1ed9t cu\u1ed9c &#8220;chia t\u00e1ch&#8221; (fork) \u0111\u00e3 di\u1ec5n ra. Ph\u1ea7n l\u1edbn c\u1ed9ng \u0111\u1ed3ng n\u00f2ng c\u1ed1t \u0111\u00e3 t\u00e1ch ra v\u00e0 \u0111\u1ed5i t\u00ean d\u1ef1 \u00e1n th\u00e0nh <strong>Jenkins<\/strong>. T\u1eeb \u0111\u00f3, Jenkins ph\u00e1t tri\u1ec3n m\u1ea1nh m\u1ebd v\u00e0 tr\u1edf th\u00e0nh ti\u00eau chu\u1ea9n v\u00e0ng cho CI\/CD, trong khi Hudson d\u1ea7n ch\u00ecm v\u00e0o qu\u00ean l\u00e3ng.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"So-lieu-thong-ke-va-thi-phan\"><\/span>S\u1ed1 li\u1ec7u th\u1ed1ng k\u00ea v\u00e0 th\u1ecb ph\u1ea7n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>V\u1ecb th\u1ebf c\u1ee7a Jenkins trong ng\u00e0nh c\u00f4ng nghi\u1ec7p ph\u1ea7n m\u1ec1m l\u00e0 kh\u00f4ng th\u1ec3 ch\u1ed1i c\u00e3i. Theo c\u00e1c b\u00e1o c\u00e1o m\u1edbi nh\u1ea5t n\u0103m 2023 v\u00e0 2024, Jenkins v\u1eabn chi\u1ebfm kho\u1ea3ng h\u01a1n 40% th\u1ecb ph\u1ea7n c\u00e1c c\u00f4ng c\u1ee5 CI\/CD tr\u00ean to\u00e0n c\u1ea7u. S\u1ed1 l\u01b0\u1ee3ng c\u00e0i \u0111\u1eb7t Jenkins \u0111ang ho\u1ea1t \u0111\u1ed9ng (active installations) \u0111\u00e3 v\u01b0\u1ee3t m\u1ed1c 300.000 m\u00e1y ch\u1ee7. Nh\u1eefng con s\u1ed1 n\u00e0y minh ch\u1ee9ng cho \u0111\u1ed9 tin c\u1eady v\u00e0 s\u1ef1 ph\u1ed5 bi\u1ebfn c\u1ee7a Jenkins trong c\u00e1c doanh nghi\u1ec7p t\u1eeb startup \u0111\u1ebfn t\u1eadp \u0111o\u00e0n l\u1edbn.<\/p>\n<div class=\"highlight-cta-box\">\n<h3><span class=\"ez-toc-section\" id=\"Ban-Muon-Tu-Trien-Khai-Jenkins-Server\"><\/span><span style=\"color: #000000;\"><strong>B\u1ea1n Mu\u1ed1n T\u1ef1 Tri\u1ec3n Khai Jenkins Server?<\/strong><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u1ec3 Jenkins ho\u1ea1t \u0111\u1ed9ng \u1ed5n \u0111\u1ecbnh v\u00e0 x\u1eed l\u00fd c\u00e1c t\u00e1c v\u1ee5 build li\u00ean t\u1ee5c, b\u1ea1n c\u1ea7n m\u1ed9t n\u1ec1n t\u1ea3ng h\u1ea1 t\u1ea7ng m\u1ea1nh m\u1ebd v\u00e0 ri\u00eang bi\u1ec7t. D\u1ecbch v\u1ee5 VPS t\u1ed1c \u0111\u1ed9 cao c\u1ee7a InterData l\u00e0 l\u1ef1a ch\u1ecdn ho\u00e0n h\u1ea3o \u0111\u1ec3 b\u1eaft \u0111\u1ea7u h\u00e0nh tr\u00ecnh DevOps c\u1ee7a b\u1ea1n.<\/p>\n<p><strong><a class=\"cta-button\" href=\"https:\/\/interdata.vn\/thue-vps\/\" target=\"_blank\" rel=\"noopener\">D\u00f9ng Th\u1eed VPS Ngay \u2013 Ho\u00e0n To\u00e0n Mi\u1ec5n Ph\u00ed<\/a><\/strong><\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Tai-sao-nen-su-dung-Jenkins\"><\/span>T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng Jenkins?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure id=\"attachment_38351\" aria-describedby=\"caption-attachment-38351\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-38351\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-2.webp\" alt=\"Jenkins\" width=\"800\" height=\"436\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-2.webp 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-2-300x164.webp 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-2-768x419.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-38351\" class=\"wp-caption-text\">Jenkins<\/figcaption><\/figure>\n<p>Gi\u1eefa m\u1ed9t &#8220;r\u1eebng&#8221; c\u00e1c c\u00f4ng c\u1ee5 DevOps hi\u1ec7n nay, Jenkins v\u1eabn gi\u1eef v\u1eefng v\u1ecb th\u1ebf c\u1ee7a m\u00ecnh. \u0110i\u1ec1u n\u00e0y kh\u00f4ng ph\u1ea3i ng\u1eabu nhi\u00ean. Jenkins mang l\u1ea1i nh\u1eefng gi\u00e1 tr\u1ecb thi\u1ebft th\u1ef1c m\u00e0 kh\u00f3 c\u00f3 c\u00f4ng c\u1ee5 n\u00e0o thay th\u1ebf ho\u00e0n to\u00e0n \u0111\u01b0\u1ee3c.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ma-nguon-mo-va-Mien-phi\"><\/span>M\u00e3 ngu\u1ed3n m\u1edf v\u00e0 Mi\u1ec5n ph\u00ed<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Chi ph\u00ed lu\u00f4n l\u00e0 b\u00e0i to\u00e1n \u0111au \u0111\u1ea7u v\u1edbi m\u1ecdi doanh nghi\u1ec7p. Jenkins gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y tri\u1ec7t \u0111\u1ec3. L\u00e0 ph\u1ea7n m\u1ec1m m\u00e3 ngu\u1ed3n m\u1edf (Open Source) theo gi\u1ea5y ph\u00e9p MIT, b\u1ea1n c\u00f3 th\u1ec3 t\u1ea3i v\u1ec1, c\u00e0i \u0111\u1eb7t v\u00e0 s\u1eed d\u1ee5ng Jenkins m\u00e0 kh\u00f4ng t\u1ed1n m\u1ed9t \u0111\u1ed3ng ph\u00ed b\u1ea3n quy\u1ec1n n\u00e0o. Doanh nghi\u1ec7p c\u00f3 th\u1ec3 ti\u1ebft ki\u1ec7m h\u00e0ng ngh\u00ecn \u0111\u00f4 la m\u1ed7i n\u0103m so v\u1edbi vi\u1ec7c s\u1eed d\u1ee5ng c\u00e1c gi\u1ea3i ph\u00e1p tr\u1ea3 ph\u00ed nh\u01b0 TeamCity hay CircleCI Enterprise.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"He-sinh-thai-Plugin-khong-lo\"><\/span>H\u1ec7 sinh th\u00e1i Plugin kh\u1ed5ng l\u1ed3<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u00e2y ch\u00ednh l\u00e0 &#8220;v\u0169 kh\u00ed b\u00ed m\u1eadt&#8221; c\u1ee7a Jenkins. Kho plugin (Plugin Update Center) ch\u1ee9a h\u01a1n 1.800 ti\u1ec7n \u00edch kh\u00e1c nhau. B\u1ea1n c\u1ea7n t\u00edch h\u1ee3p v\u1edbi Git \u0111\u1ec3 l\u1ea5y code? C\u00f3 plugin Git. B\u1ea1n c\u1ea7n build Docker image v\u00e0 \u0111\u1ea9y l\u00ean Docker Hub? C\u00f3 plugin Docker Pipeline. B\u1ea1n mu\u1ed1n nh\u1eadn th\u00f4ng b\u00e1o qua Slack khi build l\u1ed7i? Plugin Slack Notification s\u1ebd x\u1eed l\u00fd vi\u1ec7c \u0111\u00f3. Kh\u1ea3 n\u0103ng t\u00f9y bi\u1ebfn c\u1ee7a Jenkins l\u00e0 v\u00f4 t\u1eadn nh\u1edd h\u1ec7 sinh th\u00e1i n\u00e0y.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"De-dang-cai-dat-va-cau-hinh\"><\/span>D\u1ec5 d\u00e0ng c\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng Java, ngh\u0129a l\u00e0 c\u00f4ng c\u1ee5 n\u00e0y c\u00f3 th\u1ec3 ch\u1ea1y tr\u00ean b\u1ea5t k\u1ef3 h\u1ec7 \u0111i\u1ec1u h\u00e0nh n\u00e0o h\u1ed7 tr\u1ee3 Java. B\u1ea1n c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t Jenkins tr\u00ean Windows, Linux, macOS ho\u1eb7c ch\u1ea1y tr\u1ef1c ti\u1ebfp trong Docker container. Qu\u00e1 tr\u00ecnh c\u00e0i \u0111\u1eb7t ban \u0111\u1ea7u di\u1ec5n ra nhanh ch\u00f3ng v\u1edbi giao di\u1ec7n web h\u01b0\u1edbng d\u1eabn t\u1eebng b\u01b0\u1edbc. \u0110i\u1ec1u n\u00e0y gi\u00fap c\u00e1c \u0111\u1ed9i ng\u0169 k\u1ef9 thu\u1eadt ti\u1ebfp c\u1eadn c\u00f4ng ngh\u1ec7 m\u1edbi d\u1ec5 d\u00e0ng h\u01a1n.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kha-nang-phan-tan-Distributed-Builds\"><\/span>Kh\u1ea3 n\u0103ng ph\u00e2n t\u00e1n (Distributed Builds)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Trong c\u00e1c d\u1ef1 \u00e1n l\u1edbn, vi\u1ec7c ch\u1ea1y t\u1ea5t c\u1ea3 c\u00e1c t\u00e1c v\u1ee5 build v\u00e0 test tr\u00ean m\u1ed9t m\u00e1y ch\u1ee7 duy nh\u1ea5t l\u00e0 b\u1ea5t kh\u1ea3 thi. M\u00e1y ch\u1ee7 s\u1ebd b\u1ecb qu\u00e1 t\u1ea3i v\u00e0 l\u00e0m ch\u1eadm to\u00e0n b\u1ed9 quy tr\u00ecnh. Jenkins gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y b\u1eb1ng ki\u1ebfn tr\u00fac Master-Slave (hay c\u00f2n g\u1ecdi l\u00e0 Controller-Agent). Jenkins Controller s\u1ebd ph\u00e2n chia c\u00f4ng vi\u1ec7c cho nhi\u1ec1u m\u00e1y Agent kh\u00e1c nhau. C\u00e1c Agent n\u00e0y c\u00f3 th\u1ec3 ch\u1ea1y song song, tr\u00ean c\u00e1c h\u1ec7 \u0111i\u1ec1u h\u00e0nh kh\u00e1c nhau, gi\u00fap gi\u1ea3m \u0111\u00e1ng k\u1ec3 th\u1eddi gian ch\u1edd \u0111\u1ee3i k\u1ebft qu\u1ea3 build.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Cong-dong-ho-tro-lon\"><\/span>C\u1ed9ng \u0111\u1ed3ng h\u1ed7 tr\u1ee3 l\u1edbn<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>S\u1eed d\u1ee5ng ph\u1ea7n m\u1ec1m m\u00e3 ngu\u1ed3n m\u1edf \u0111\u00f4i khi g\u1eb7p r\u1ee7i ro v\u1ec1 h\u1ed7 tr\u1ee3 k\u1ef9 thu\u1eadt. Tuy nhi\u00ean, v\u1edbi Jenkins, b\u1ea1n kh\u00f4ng \u0111\u01a1n \u0111\u1ed9c. C\u1ed9ng \u0111\u1ed3ng ng\u01b0\u1eddi d\u00f9ng Jenkins c\u1ef1c k\u1ef3 \u0111\u00f4ng \u0111\u1ea3o v\u00e0 nhi\u1ec7t t\u00ecnh. M\u1ecdi l\u1ed7i ph\u00e1t sinh, m\u1ecdi th\u1eafc m\u1eafc v\u1ec1 c\u1ea5u h\u00ecnh \u0111\u1ec1u c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng t\u00ecm th\u1ea5y c\u00e2u tr\u1ea3 l\u1eddi tr\u00ean StackOverflow, Reddit ho\u1eb7c di\u1ec5n \u0111\u00e0n ch\u00ednh th\u1ee9c c\u1ee7a Jenkins. T\u00e0i li\u1ec7u h\u01b0\u1edbng d\u1eabn (Documentation) c\u1ee7a Jenkins c\u0169ng r\u1ea5t chi ti\u1ebft v\u00e0 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt th\u01b0\u1eddng xuy\u00ean.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Kien-truc-va-Cach-hoat-dong-cua-Jenkins\"><\/span>Ki\u1ebfn tr\u00fac v\u00e0 C\u00e1ch ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Jenkins<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure id=\"attachment_38355\" aria-describedby=\"caption-attachment-38355\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-38355\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Nguyen-ly-hoat-dong-cua-Jenkins.webp\" alt=\"Nguy\u00ean l\u00fd ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Jenkins\" width=\"800\" height=\"436\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Nguyen-ly-hoat-dong-cua-Jenkins.webp 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Nguyen-ly-hoat-dong-cua-Jenkins-300x164.webp 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Nguyen-ly-hoat-dong-cua-Jenkins-768x419.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-38355\" class=\"wp-caption-text\">Nguy\u00ean l\u00fd ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Jenkins<\/figcaption><\/figure>\n<p>\u0110\u1ec3 l\u00e0m ch\u1ee7 \u0111\u01b0\u1ee3c Jenkins, b\u1ea1n c\u1ea7n hi\u1ec3u r\u00f5 c\u00e1ch h\u1ec7 th\u1ed1ng n\u00e0y v\u1eadn h\u00e0nh b\u00ean trong. Ki\u1ebfn tr\u00fac c\u1ee7a Jenkins \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh linh ho\u1ea1t v\u00e0 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Mo-hinh-Controller-%E2%80%93-Agent-Master-%E2%80%93-Slave\"><\/span>M\u00f4 h\u00ecnh Controller &#8211; Agent (Master &#8211; Slave)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkins ho\u1ea1t \u0111\u1ed9ng d\u1ef1a tr\u00ean m\u00f4 h\u00ecnh ph\u00e2n t\u00e1n. Hai th\u00e0nh ph\u1ea7n ch\u00ednh trong m\u00f4 h\u00ecnh n\u00e0y bao g\u1ed3m:<\/p>\n<ul>\n<li><strong>Jenkins Controller (tr\u01b0\u1edbc \u0111\u00e2y g\u1ecdi l\u00e0 Master):<\/strong> \u0110\u00e2y l\u00e0 b\u1ed9 n\u00e3o c\u1ee7a h\u1ec7 th\u1ed1ng. Controller ch\u1ecbu tr\u00e1ch nhi\u1ec7m l\u01b0u tr\u1eef c\u1ea5u h\u00ecnh, l\u00ean l\u1ecbch cho c\u00e1c job, v\u00e0 gi\u00e1m s\u00e1t to\u00e0n b\u1ed9 quy tr\u00ecnh. Controller kh\u00f4ng n\u00ean th\u1ef1c hi\u1ec7n c\u00e1c t\u00e1c v\u1ee5 build n\u1eb7ng n\u1ec1 \u0111\u1ec3 tr\u00e1nh b\u1ecb qu\u00e1 t\u1ea3i. Giao di\u1ec7n qu\u1ea3n l\u00fd m\u00e0 b\u1ea1n thao t\u00e1c h\u00e0ng ng\u00e0y ch\u00ednh l\u00e0 giao di\u1ec7n c\u1ee7a Controller.<\/li>\n<li><strong>Jenkins Agent (tr\u01b0\u1edbc \u0111\u00e2y g\u1ecdi l\u00e0 Slave):<\/strong> \u0110\u00e2y l\u00e0 &#8220;c\u01a1 b\u1eafp&#8221; c\u1ee7a h\u1ec7 th\u1ed1ng. Agent l\u00e0 c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh nh\u1ecf ch\u1ea1y tr\u00ean c\u00e1c m\u00e1y ch\u1ee7 t\u1eeb xa (Windows, Linux, macOS). Controller s\u1ebd g\u1eedi l\u1ec7nh xu\u1ed1ng Agent. Agent th\u1ef1c thi l\u1ec7nh (v\u00ed d\u1ee5: ch\u1ea1y `mvn install` ho\u1eb7c `npm run build`) v\u00e0 g\u1eedi k\u1ebft qu\u1ea3 tr\u1ea3 v\u1ec1 cho Controller. B\u1ea1n c\u00f3 th\u1ec3 c\u00f3 h\u00e0ng ch\u1ee5c, th\u1eadm ch\u00ed h\u00e0ng tr\u0103m Agent ho\u1ea1t \u0111\u1ed9ng c\u00f9ng l\u00fac.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Quy-trinh-xu-ly-Workflow-chuan\"><\/span>Quy tr\u00ecnh x\u1eed l\u00fd (Workflow) chu\u1ea9n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>M\u1ed9t quy tr\u00ecnh l\u00e0m vi\u1ec7c \u0111i\u1ec3n h\u00ecnh v\u1edbi Jenkins di\u1ec5n ra nh\u01b0 sau:<\/p>\n<ol>\n<li>L\u1eadp tr\u00ecnh vi\u00ean th\u1ef1c hi\u1ec7n thay \u0111\u1ed5i m\u00e3 ngu\u1ed3n v\u00e0 \u0111\u1ea9y (push) l\u00ean kho l\u01b0u tr\u1eef (nh\u01b0 GitHub, GitLab).<\/li>\n<li>Jenkins Controller ph\u00e1t hi\u1ec7n s\u1ef1 thay \u0111\u1ed5i n\u00e0y. H\u1ec7 th\u1ed1ng c\u00f3 th\u1ec3 qu\u00e9t \u0111\u1ecbnh k\u1ef3 ho\u1eb7c nh\u1eadn t\u00edn hi\u1ec7u (webhook) t\u1eeb kho l\u01b0u tr\u1eef.<\/li>\n<li>Jenkins k\u00edch ho\u1ea1t (trigger) m\u1ed9t quy tr\u00ecnh Build.<\/li>\n<li>Controller t\u00ecm ki\u1ebfm m\u1ed9t Agent \u0111ang r\u1ea3nh r\u1ed7i v\u00e0 ph\u00f9 h\u1ee3p v\u1edbi y\u00eau c\u1ea7u \u0111\u1ec3 giao vi\u1ec7c.<\/li>\n<li>Agent t\u1ea3i m\u00e3 ngu\u1ed3n v\u1ec1, th\u1ef1c hi\u1ec7n bi\u00ean d\u1ecbch v\u00e0 ch\u1ea1y c\u00e1c b\u00e0i ki\u1ec3m th\u1eed t\u1ef1 \u0111\u1ed9ng (Unit Test, Integration Test).<\/li>\n<li>Sau khi ho\u00e0n t\u1ea5t, Agent g\u1eedi b\u00e1o c\u00e1o k\u1ebft qu\u1ea3 v\u1ec1 Controller.<\/li>\n<li>N\u1ebfu build th\u00e0nh c\u00f4ng, Jenkins c\u00f3 th\u1ec3 ti\u1ebfp t\u1ee5c th\u1ef1c hi\u1ec7n b\u01b0\u1edbc tri\u1ec3n khai (Deploy) l\u00ean m\u00f4i tr\u01b0\u1eddng Staging ho\u1eb7c Production. N\u1ebfu th\u1ea5t b\u1ea1i, h\u1ec7 th\u1ed1ng g\u1eedi email ho\u1eb7c tin nh\u1eafn c\u1ea3nh b\u00e1o cho l\u1eadp tr\u00ecnh vi\u00ean.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"Cac-khai-niem-quan-trong-trong-Jenkins\"><\/span>C\u00e1c kh\u00e1i ni\u1ec7m quan tr\u1ecdng trong Jenkins<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure id=\"attachment_38352\" aria-describedby=\"caption-attachment-38352\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-38352\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-3.webp\" alt=\"Jenkins\" width=\"800\" height=\"436\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-3.webp 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-3-300x164.webp 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-3-768x419.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-38352\" class=\"wp-caption-text\">Jenkins<\/figcaption><\/figure>\n<p>Khi l\u00e0m vi\u1ec7c v\u1edbi Jenkins, b\u1ea1n s\u1ebd th\u01b0\u1eddng xuy\u00ean g\u1eb7p c\u00e1c thu\u1eadt ng\u1eef chuy\u00ean ng\u00e0nh. Hi\u1ec3u \u0111\u00fang c\u00e1c kh\u00e1i ni\u1ec7m n\u00e0y l\u00e0 ch\u00eca kh\u00f3a \u0111\u1ec3 c\u1ea5u h\u00ecnh h\u1ec7 th\u1ed1ng hi\u1ec7u qu\u1ea3.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Pipeline-Duong-ong\"><\/span>Pipeline (\u0110\u01b0\u1eddng \u1ed1ng)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u00e2y l\u00e0 kh\u00e1i ni\u1ec7m quan tr\u1ecdng nh\u1ea5t trong Jenkins hi\u1ec7n \u0111\u1ea1i. Pipeline l\u00e0 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c plugin h\u1ed7 tr\u1ee3 vi\u1ec7c t\u00edch h\u1ee3p v\u00e0 tri\u1ec3n khai li\u00ean t\u1ee5c. N\u00f3 m\u00f4 h\u00ecnh h\u00f3a quy tr\u00ecnh ph\u00e2n ph\u1ed1i ph\u1ea7n m\u1ec1m c\u1ee7a b\u1ea1n th\u00e0nh c\u00e1c &#8220;giai \u0111o\u1ea1n&#8221; (stages) n\u1ed1i ti\u1ebfp nhau. V\u00ed d\u1ee5: Giai \u0111o\u1ea1n Build -&gt; Giai \u0111o\u1ea1n Test -&gt; Giai \u0111o\u1ea1n Deploy. Pipeline gi\u00fap b\u1ea1n h\u00ecnh dung to\u00e0n b\u1ed9 quy tr\u00ecnh m\u1ed9t c\u00e1ch tr\u1ef1c quan.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkinsfile-va-phuong-phap-%E2%80%9CPipeline-as-Code%E2%80%9D\"><\/span>Jenkinsfile v\u00e0 ph\u01b0\u01a1ng ph\u00e1p &#8220;Pipeline as Code&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tr\u01b0\u1edbc \u0111\u00e2y, ng\u01b0\u1eddi d\u00f9ng ph\u1ea3i c\u1ea5u h\u00ecnh job b\u1eb1ng c\u00e1ch click chu\u1ed9t tr\u00ean giao di\u1ec7n web (Freestyle Project). C\u00e1ch l\u00e0m n\u00e0y kh\u00f3 qu\u1ea3n l\u00fd phi\u00ean b\u1ea3n v\u00e0 kh\u00f3 sao l\u01b0u. Jenkinsfile ra \u0111\u1eddi \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 \u0111\u00f3.<\/p>\n<p><strong>Jenkinsfile<\/strong> l\u00e0 m\u1ed9t file v\u0103n b\u1ea3n ch\u1ee9a to\u00e0n b\u1ed9 \u0111\u1ecbnh ngh\u0129a v\u1ec1 Pipeline c\u1ee7a b\u1ea1n. B\u1ea1n l\u01b0u file n\u00e0y ngay trong kho m\u00e3 ngu\u1ed3n (source code repo) c\u1ee7a d\u1ef1 \u00e1n. Ph\u01b0\u01a1ng ph\u00e1p n\u00e0y g\u1ecdi l\u00e0 &#8220;Pipeline as Code&#8221;. L\u1ee3i \u00edch l\u00e0 b\u1ea1n c\u00f3 th\u1ec3 xem l\u1ea1i l\u1ecbch s\u1eed thay \u0111\u1ed5i c\u1ea5u h\u00ecnh pipeline, review code pipeline nh\u01b0 code th\u00f4ng th\u01b0\u1eddng.<\/p>\n<p>C\u00f3 hai lo\u1ea1i c\u00fa ph\u00e1p Jenkinsfile ch\u00ednh:<\/p>\n<ul>\n<li><strong>Declarative Pipeline:<\/strong> C\u00fa ph\u00e1p m\u1edbi h\u01a1n, d\u1ec5 \u0111\u1ecdc, d\u1ec5 vi\u1ebft v\u00e0 c\u00f3 c\u1ea5u tr\u00fac r\u00f5 r\u00e0ng. \u0110\u00e2y l\u00e0 chu\u1ea9n m\u1ef1c \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb hi\u1ec7n nay.<\/li>\n<li><strong>Scripted Pipeline:<\/strong> C\u00fa ph\u00e1p d\u1ef1a tr\u00ean ng\u00f4n ng\u1eef Groovy. Lo\u1ea1i n\u00e0y cung c\u1ea5p kh\u1ea3 n\u0103ng ki\u1ec3m so\u00e1t lu\u1ed3ng c\u1ef1c k\u1ef3 m\u1ea1nh m\u1ebd nh\u01b0ng ph\u1ee9c t\u1ea1p h\u01a1n v\u00e0 kh\u00f3 h\u1ecdc h\u01a1n.<\/li>\n<\/ul>\n<p>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 v\u00ed d\u1ee5 v\u1ec1 m\u1ed9t Declarative Pipeline \u0111\u01a1n gi\u1ea3n trong Jenkinsfile:<\/p>\n<pre><code class=\"language-plaintext\">\r\npipeline {\r\n    agent any \r\n    stages {\r\n        stage('Build') { \r\n            steps { \r\n                echo '\u0110ang bi\u00ean d\u1ecbch m\u00e3 ngu\u1ed3n...' \r\n            }\r\n        }\r\n        stage('Test') { \r\n            steps { \r\n                echo '\u0110ang ch\u1ea1y ki\u1ec3m th\u1eed...' \r\n            }\r\n        }\r\n        stage('Deploy') { \r\n            steps { \r\n                echo '\u0110ang tri\u1ec3n khai \u1ee9ng d\u1ee5ng...' \r\n            }\r\n        }\r\n    }\r\n}\r\n    <\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"JobProject-Cong-viecDu-an\"><\/span>Job\/Project (C\u00f4ng vi\u1ec7c\/D\u1ef1 \u00e1n)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Job l\u00e0 \u0111\u01a1n v\u1ecb c\u00f4ng vi\u1ec7c c\u01a1 b\u1ea3n nh\u1ea5t trong Jenkins. M\u1ed9t Job c\u00f3 th\u1ec3 l\u00e0 vi\u1ec7c bi\u00ean d\u1ecbch m\u1ed9t d\u1ef1 \u00e1n Java, ch\u1ea1y m\u1ed9t script Python, hay th\u1ef1c hi\u1ec7n sao l\u01b0u c\u01a1 s\u1edf d\u1eef li\u1ec7u. B\u1ea5t k\u1ef3 quy tr\u00ecnh n\u00e0o b\u1ea1n mu\u1ed1n Jenkins th\u1ef1c hi\u1ec7n \u0111\u1ec1u \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a th\u00f4ng qua m\u1ed9t Job.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Artifacts\"><\/span>Artifacts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Artifacts l\u00e0 c\u00e1c file k\u1ebft qu\u1ea3 \u0111\u01b0\u1ee3c t\u1ea1o ra sau khi qu\u00e1 tr\u00ecnh build th\u00e0nh c\u00f4ng. \u0110\u00f3 c\u00f3 th\u1ec3 l\u00e0 file `.jar`, `.war`, file c\u00e0i \u0111\u1eb7t `.exe` ho\u1eb7c Docker Image. Jenkins c\u00f3 c\u01a1 ch\u1ebf l\u01b0u tr\u1eef c\u00e1c Artifacts n\u00e0y \u0111\u1ec3 ph\u1ee5c v\u1ee5 cho vi\u1ec7c deploy sau n\u00e0y ho\u1eb7c \u0111\u1ec3 ng\u01b0\u1eddi d\u00f9ng t\u1ea3i v\u1ec1 ki\u1ec3m tra.<\/p>\n<div class=\"highlight-cta-box\">\n<h3><span class=\"ez-toc-section\" id=\"Nang-Tam-He-Thong-CICD-Voi-Cloud-Server\"><\/span><span style=\"color: #000000;\"><strong>N\u00e2ng T\u1ea7m H\u1ec7 Th\u1ed1ng CI\/CD V\u1edbi Cloud Server<\/strong><\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Khi d\u1ef1 \u00e1n m\u1edf r\u1ed9ng, b\u1ea1n c\u1ea7n nhi\u1ec1u Agent \u0111\u1ec3 ch\u1ea1y c\u00e1c Job song song nh\u1eb1m r\u00fat ng\u1eafn th\u1eddi gian ch\u1edd \u0111\u1ee3i. Cloud Server c\u1ee7a InterData mang \u0111\u1ebfn kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng t\u00e0i nguy\u00ean linh ho\u1ea1t, gi\u00fap h\u1ec7 th\u1ed1ng Jenkins Pipeline c\u1ee7a b\u1ea1n v\u1eadn h\u00e0nh tr\u01a1n tru ngay c\u1ea3 khi t\u1ea3i cao \u0111i\u1ec3m.<\/p>\n<p><strong><a class=\"cta-button\" href=\"https:\/\/interdata.vn\/cloud-server\/\" target=\"_blank\" rel=\"noopener\">Tr\u1ea3i Nghi\u1ec7m Cloud Server InterData &#8211; D\u00f9ng Th\u1eed Mi\u1ec5n Ph\u00ed<\/a><\/strong><\/p>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"So-sanh-Jenkins-voi-cac-cong-cu-CICD-khac\"><\/span>So s\u00e1nh Jenkins v\u1edbi c\u00e1c c\u00f4ng c\u1ee5 CI\/CD kh\u00e1c<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 c\u00f3 c\u00e1i nh\u00ecn kh\u00e1ch quan, ch\u00fang ta c\u1ea7n \u0111\u1eb7t Jenkins l\u00ean b\u00e0n c\u00e2n so s\u00e1nh v\u1edbi c\u00e1c \u0111\u1ed1i th\u1ee7 n\u1eb7ng k\u00fd kh\u00e1c nh\u01b0 GitLab CI hay GitHub Actions. \u0110i\u1ec1u n\u00e0y gi\u00fap b\u1ea1n quy\u1ebft \u0111\u1ecbnh xem Jenkins c\u00f3 ph\u1ea3i l\u00e0 l\u1ef1a ch\u1ecdn ph\u00f9 h\u1ee3p nh\u1ea5t cho d\u1ef1 \u00e1n c\u1ee7a m\u00ecnh hay kh\u00f4ng.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-vs-GitLab-CI\"><\/span>Jenkins vs. GitLab CI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<figure class=\"table\">\n<table>\n<thead>\n<tr>\n<th>Ti\u00eau ch\u00ed<\/th>\n<th>Jenkins<\/th>\n<th>GitLab CI<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>T\u00edch h\u1ee3p<\/strong><\/td>\n<td>C\u1ea7n c\u00e0i \u0111\u1eb7t Plugin \u0111\u1ec3 t\u00edch h\u1ee3p v\u1edbi Git.<\/td>\n<td>T\u00edch h\u1ee3p s\u1eb5n ho\u00e0n h\u1ea3o trong GitLab.<\/td>\n<\/tr>\n<tr>\n<td><strong>C\u1ea5u h\u00ecnh<\/strong><\/td>\n<td>R\u1ea5t linh ho\u1ea1t nh\u01b0ng ph\u1ee9c t\u1ea1p (Jenkinsfile).<\/td>\n<td>D\u1ec5 d\u00e0ng h\u01a1n v\u1edbi file .gitlab-ci.yml (YAML).<\/td>\n<\/tr>\n<tr>\n<td><strong>Giao di\u1ec7n<\/strong><\/td>\n<td>Kh\u00e1 c\u0169 k\u1ef9 (d\u00f9 c\u00f3 Blue Ocean c\u1ea3i thi\u1ec7n).<\/td>\n<td>Hi\u1ec7n \u0111\u1ea1i, tr\u1ef1c quan, t\u00edch h\u1ee3p trong Dashboard code.<\/td>\n<\/tr>\n<tr>\n<td><strong>Container<\/strong><\/td>\n<td>H\u1ed7 tr\u1ee3 t\u1ed1t nh\u01b0ng c\u1ea7n c\u1ea5u h\u00ecnh th\u00eam.<\/td>\n<td>H\u1ed7 tr\u1ee3 Docker-first, c\u1ef1c k\u1ef3 m\u1ea1nh m\u1ebd v\u1edbi Kubernetes.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><i>Nh\u1eadn \u0111\u1ecbnh:<\/i> GitLab CI ph\u00f9 h\u1ee3p n\u1ebfu b\u1ea1n \u0111\u00e3 s\u1eed d\u1ee5ng GitLab \u0111\u1ec3 qu\u1ea3n l\u00fd m\u00e3 ngu\u1ed3n v\u00e0 mu\u1ed1n s\u1ef1 ti\u1ec7n l\u1ee3i t\u1ed1i \u0111a. Jenkins ph\u00f9 h\u1ee3p n\u1ebfu b\u1ea1n c\u1ea7n quy tr\u00ecnh CI\/CD c\u1ef1c k\u1ef3 ph\u1ee9c t\u1ea1p, t\u00f9y bi\u1ebfn cao v\u00e0 kh\u00f4ng mu\u1ed1n ph\u1ee5 thu\u1ed9c v\u00e0o n\u1ec1n t\u1ea3ng l\u01b0u tr\u1eef code.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Jenkins-vs-GitHub-Actions\"><\/span>Jenkins vs. GitHub Actions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>GitHub Actions l\u00e0 &#8220;ng\u00f4i sao m\u1edbi n\u1ed5i&#8221; t\u00edch h\u1ee3p tr\u1ef1c ti\u1ebfp trong GitHub. \u0110i\u1ec3m m\u1ea1nh c\u1ee7a GitHub Actions l\u00e0 t\u00ednh ch\u1ea5t Serverless (b\u1ea1n kh\u00f4ng c\u1ea7n qu\u1ea3n l\u00fd m\u00e1y ch\u1ee7 build n\u1ebfu d\u00f9ng GitHub-hosted runner) v\u00e0 Marketplace phong ph\u00fa. Tuy nhi\u00ean, phi\u00ean b\u1ea3n mi\u1ec5n ph\u00ed c\u1ee7a GitHub Actions c\u00f3 gi\u1edbi h\u1ea1n s\u1ed1 ph\u00fat ch\u1ea1y (build minutes). V\u1edbi Jenkins, b\u1ea1n t\u1ef1 host server n\u00ean kh\u00f4ng b\u1ecb gi\u1edbi h\u1ea1n n\u00e0y, ch\u1ec9 ph\u1ee5 thu\u1ed9c v\u00e0o s\u1ee9c m\u1ea1nh ph\u1ea7n c\u1ee9ng c\u1ee7a b\u1ea1n.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Ket-luan-lua-chon\"><\/span>K\u1ebft lu\u1eadn l\u1ef1a ch\u1ecdn<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>H\u00e3y ch\u1ecdn Jenkins khi:<\/p>\n<ul>\n<li>D\u1ef1 \u00e1n c\u1ee7a b\u1ea1n y\u00eau c\u1ea7u b\u1ea3o m\u1eadt cao, d\u1eef li\u1ec7u kh\u00f4ng \u0111\u01b0\u1ee3c r\u1eddi kh\u1ecfi h\u1ec7 th\u1ed1ng n\u1ed9i b\u1ed9 (On-premise).<\/li>\n<li>B\u1ea1n c\u1ea7n ki\u1ec3m so\u00e1t ho\u00e0n to\u00e0n m\u00f4i tr\u01b0\u1eddng build v\u00e0 chi ph\u00ed h\u1ea1 t\u1ea7ng.<\/li>\n<li>Quy tr\u00ecnh c\u1ee7a b\u1ea1n r\u1ea5t ph\u1ee9c t\u1ea1p, c\u1ea7n k\u1ebft n\u1ed1i nhi\u1ec1u h\u1ec7 th\u1ed1ng legacy c\u0169.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Huong-dan-cai-dat-Jenkins-co-ban-Quick-Start\"><\/span>H\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t Jenkins c\u01a1 b\u1ea3n (Quick Start)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure id=\"attachment_38353\" aria-describedby=\"caption-attachment-38353\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-38353\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-4.webp\" alt=\"Jenkins\" width=\"800\" height=\"436\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-4.webp 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-4-300x164.webp 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Jenkins-4-768x419.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-38353\" class=\"wp-caption-text\">Jenkins<\/figcaption><\/figure>\n<p>Ph\u1ea7n n\u00e0y s\u1ebd h\u01b0\u1edbng d\u1eabn b\u1ea1n c\u00e1ch c\u00e0i \u0111\u1eb7t Jenkins nhanh ch\u00f3ng nh\u1ea5t b\u1eb1ng Docker. \u0110\u00e2y l\u00e0 ph\u01b0\u01a1ng ph\u00e1p hi\u1ec7n \u0111\u1ea1i, gi\u1eef cho h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n s\u1ea1ch s\u1ebd v\u00e0 d\u1ec5 d\u00e0ng n\u00e2ng c\u1ea5p sau n\u00e0y.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Yeu-cau-he-thong\"><\/span>Y\u00eau c\u1ea7u h\u1ec7 th\u1ed1ng<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u1ec3 ch\u1ea1y Jenkins m\u01b0\u1ee3t m\u00e0 cho m\u1ed9t nh\u00f3m nh\u1ecf, m\u00e1y ch\u1ee7 c\u1ee7a b\u1ea1n n\u00ean c\u00f3 t\u1ed1i thi\u1ec3u:<\/p>\n<ul>\n<li>RAM: 4GB (Khuy\u1ebfn ngh\u1ecb).<\/li>\n<li>CPU: 2 Cores.<\/li>\n<li>\u1ed4 c\u1ee9ng: 50GB tr\u1ed1ng.<\/li>\n<li>H\u1ec7 \u0111i\u1ec1u h\u00e0nh: Linux (Ubuntu\/CentOS) c\u00f3 c\u00e0i s\u1eb5n Docker.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Cai-dat-bang-Docker\"><\/span>C\u00e0i \u0111\u1eb7t b\u1eb1ng Docker<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>M\u1edf terminal tr\u00ean m\u00e1y ch\u1ee7 v\u00e0 ch\u1ea1y c\u00e2u l\u1ec7nh sau \u0111\u1ec3 t\u1ea3i v\u00e0 kh\u1edfi ch\u1ea1y Jenkins:<\/p>\n<pre><code class=\"language-plaintext\">docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \\\r\n  -v jenkins_home:\/var\/jenkins_home \\\r\n  jenkins\/jenkins:lts<\/code><\/pre>\n<p><strong>Gi\u1ea3i th\u00edch c\u00e2u l\u1ec7nh:<\/strong><\/p>\n<ul>\n<li>`-d`: Ch\u1ea1y container \u1edf ch\u1ebf \u0111\u1ed9 n\u1ec1n (background).<\/li>\n<li>`-p 8080:8080`: M\u1edf c\u1ed5ng 8080 \u0111\u1ec3 truy c\u1eadp giao di\u1ec7n web Jenkins.<\/li>\n<li>`-p 50000:50000`: M\u1edf c\u1ed5ng \u0111\u1ec3 c\u00e1c Agent k\u1ebft n\u1ed1i v\u1edbi Controller.<\/li>\n<li>`-v jenkins_home:\/var\/jenkins_home`: T\u1ea1o volume \u0111\u1ec3 l\u01b0u tr\u1eef d\u1eef li\u1ec7u b\u1ec1n v\u1eefng. D\u1eef li\u1ec7u s\u1ebd kh\u00f4ng b\u1ecb m\u1ea5t khi b\u1ea1n x\u00f3a container.<\/li>\n<li>`jenkins\/jenkins:lts`: S\u1eed d\u1ee5ng phi\u00ean b\u1ea3n \u1ed5n \u0111\u1ecbnh d\u00e0i h\u1ea1n (Long Term Support).<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Thiet-lap-ban-dau-Post-installation\"><\/span>Thi\u1ebft l\u1eadp ban \u0111\u1ea7u (Post-installation)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sau khi container ch\u1ea1y, b\u1ea1n truy c\u1eadp tr\u00ecnh duy\u1ec7t theo \u0111\u1ecba ch\u1ec9 `http:\/\/IP-MAY-CHU:8080`. Jenkins s\u1ebd y\u00eau c\u1ea7u m\u1eadt kh\u1ea9u qu\u1ea3n tr\u1ecb vi\u00ean (Administrator password) \u0111\u1ec3 m\u1edf kh\u00f3a.<\/p>\n<p>B\u1ea1n quay l\u1ea1i terminal v\u00e0 g\u00f5 l\u1ec7nh sau \u0111\u1ec3 l\u1ea5y m\u1eadt kh\u1ea9u:<\/p>\n<pre><code class=\"language-plaintext\">docker exec jenkins cat \/var\/jenkins_home\/secrets\/initialAdminPassword<\/code><\/pre>\n<p>Copy chu\u1ed7i k\u00fd t\u1ef1 hi\u1ec7n ra v\u00e0 d\u00e1n v\u00e0o tr\u00ecnh duy\u1ec7t. Ti\u1ebfp theo, ch\u1ecdn &#8220;Install suggested plugins&#8221; \u0111\u1ec3 Jenkins t\u1ef1 \u0111\u1ed9ng c\u00e0i \u0111\u1eb7t c\u00e1c plugin th\u00f4ng d\u1ee5ng nh\u1ea5t. Cu\u1ed1i c\u00f9ng, t\u1ea1o t\u00e0i kho\u1ea3n Admin v\u00e0 b\u1ea1n \u0111\u00e3 s\u1eb5n s\u00e0ng s\u1eed d\u1ee5ng.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cac-cau-hoi-thuong-gap-FAQs\"><\/span>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p (FAQs)<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"1-Jenkins-co-mien-phi-khong\"><\/span>1. Jenkins c\u00f3 mi\u1ec5n ph\u00ed kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u00f3, Jenkins l\u00e0 ph\u1ea7n m\u1ec1m m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 ho\u00e0n to\u00e0n mi\u1ec5n ph\u00ed theo gi\u1ea5y ph\u00e9p MIT. B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng cho m\u1ee5c \u0111\u00edch c\u00e1 nh\u00e2n ho\u1eb7c th\u01b0\u01a1ng m\u1ea1i m\u00e0 kh\u00f4ng ph\u1ea3i tr\u1ea3 ph\u00ed b\u1ea3n quy\u1ec1n.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2-Jenkinsfile-la-gi\"><\/span>2. Jenkinsfile l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Jenkinsfile l\u00e0 m\u1ed9t file text ch\u1ee9a \u0111\u1ecbnh ngh\u0129a quy tr\u00ecnh pipeline d\u01b0\u1edbi d\u1ea1ng code. File n\u00e0y th\u01b0\u1eddng \u0111\u01b0\u1ee3c l\u01b0u trong source control c\u00f9ng v\u1edbi m\u00e3 ngu\u1ed3n d\u1ef1 \u00e1n, gi\u00fap qu\u1ea3n l\u00fd phi\u00ean b\u1ea3n quy tr\u00ecnh CI\/CD d\u1ec5 d\u00e0ng.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3-Lam-sao-de-bao-mat-Jenkins\"><\/span>3. L\u00e0m sao \u0111\u1ec3 b\u1ea3o m\u1eadt Jenkins?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u1ec3 b\u1ea3o m\u1eadt, b\u1ea1n n\u00ean k\u00edch ho\u1ea1t t\u00ednh n\u0103ng Role-based Authorization \u0111\u1ec3 ph\u00e2n quy\u1ec1n chi ti\u1ebft. Ngo\u00e0i ra, h\u00e3y t\u00edch h\u1ee3p v\u1edbi h\u1ec7 th\u1ed1ng qu\u1ea3n l\u00fd ng\u01b0\u1eddi d\u00f9ng nh\u01b0 LDAP\/Active Directory v\u00e0 tuy\u1ec7t \u0111\u1ed1i kh\u00f4ng ch\u1ea1y c\u00e1c ti\u1ebfn tr\u00ecnh build b\u1eb1ng quy\u1ec1n root (super user) tr\u00ean server.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4-Yeu-cau-cau-hinh-toi-thieu-de-chay-Jenkins-la-bao-nhieu\"><\/span>4. Y\u00eau c\u1ea7u c\u1ea5u h\u00ecnh t\u1ed1i thi\u1ec3u \u0111\u1ec3 ch\u1ea1y Jenkins l\u00e0 bao nhi\u00eau?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u1ea5u h\u00ecnh t\u1ed1i thi\u1ec3u l\u00fd thuy\u1ebft l\u00e0 256MB RAM v\u00e0 1GB \u1ed5 c\u1ee9ng. Tuy nhi\u00ean, th\u1ef1c t\u1ebf \u0111\u1ec3 v\u1eadn h\u00e0nh \u1ed5n \u0111\u1ecbnh cho c\u00e1c t\u00e1c v\u1ee5 build th\u00f4ng th\u01b0\u1eddng, InterData khuy\u1ebfn ngh\u1ecb b\u1ea1n n\u00ean s\u1eed d\u1ee5ng m\u00e1y ch\u1ee7 c\u00f3 \u00edt nh\u1ea5t 4GB RAM v\u00e0 2 CPU cores.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"5-Jenkins-co-ho-tro-Docker-khong\"><\/span>5. Jenkins c\u00f3 h\u1ed7 tr\u1ee3 Docker kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u00f3, Jenkins h\u1ed7 tr\u1ee3 Docker r\u1ea5t m\u1ea1nh m\u1ebd. B\u1ea1n c\u00f3 th\u1ec3 c\u00e0i \u0111\u1eb7t Jenkins qua Docker, ho\u1eb7c s\u1eed d\u1ee5ng Docker l\u00e0m c\u00e1c Agent \u0111\u1ec3 th\u1ef1c thi build. Plugin Docker Pipeline cho ph\u00e9p b\u1ea1n x\u00e2y d\u1ef1ng v\u00e0 \u0111\u1ea9y Docker images m\u1ed9t c\u00e1ch d\u1ec5 d\u00e0ng.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Ket-luan\"><\/span>K\u1ebft lu\u1eadn<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nh\u00ecn chung, Jenkins v\u1eabn \u0111ang v\u00e0 s\u1ebd ti\u1ebfp t\u1ee5c l\u00e0 &#8220;x\u01b0\u01a1ng s\u1ed1ng&#8221; c\u1ee7a quy tr\u00ecnh DevOps t\u1ea1i nhi\u1ec1u doanh nghi\u1ec7p tr\u00ean to\u00e0n c\u1ea7u. M\u1eb7c d\u00f9 giao di\u1ec7n c\u00f3 ph\u1ea7n ch\u01b0a b\u1eaft m\u1eaft b\u1eb1ng c\u00e1c c\u00f4ng c\u1ee5 th\u1ebf h\u1ec7 m\u1edbi, nh\u01b0ng s\u1ef1 m\u1ea1nh m\u1ebd, t\u00ednh linh ho\u1ea1t v\u00e0 kh\u1ea3 n\u0103ng t\u00f9y bi\u1ebfn s\u00e2u r\u1ed9ng c\u1ee7a Jenkins l\u00e0 kh\u00f4ng th\u1ec3 ph\u1ee7 nh\u1eadn. V\u1edbi ki\u1ebfn tr\u00fac ph\u00e2n t\u00e1n Master-Slave v\u00e0 h\u1ec7 sinh th\u00e1i plugin \u0111\u1ed3 s\u1ed9, Jenkins c\u00f3 th\u1ec3 \u0111\u00e1p \u1ee9ng nh\u1eefng y\u00eau c\u1ea7u t\u00edch h\u1ee3p ph\u1ee9c t\u1ea1p nh\u1ea5t.<\/p>\n<p>InterData hy v\u1ecdng b\u00e0i vi\u1ebft n\u00e0y \u0111\u00e3 gi\u00fap b\u1ea1n hi\u1ec3u r\u00f5 &#8220;Jenkins l\u00e0 g\u00ec&#8221; c\u0169ng nh\u01b0 c\u00e1ch th\u1ee9c ho\u1ea1t \u0111\u1ed9ng c\u1ee7a c\u00f4ng c\u1ee5 n\u00e0y. N\u1ebfu b\u1ea1n \u0111ang t\u00ecm ki\u1ebfm m\u1ed9t gi\u1ea3i ph\u00e1p \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a quy tr\u00ecnh ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m, gi\u1ea3m thi\u1ec3u l\u1ed7i con ng\u01b0\u1eddi v\u00e0 t\u0103ng t\u1ed1c \u0111\u1ed9 ph\u00e1t h\u00e0nh s\u1ea3n ph\u1ea9m, h\u00e3y b\u1eaft \u0111\u1ea7u th\u1eed nghi\u1ec7m v\u1edbi Jenkins ngay h\u00f4m nay. Ch\u00fac c\u00e1c b\u1ea1n x\u00e2y d\u1ef1ng \u0111\u01b0\u1ee3c nh\u1eefng Pipeline hi\u1ec7u qu\u1ea3 v\u00e0 m\u1ea1nh m\u1ebd!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quy tr\u00ecnh ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m hi\u1ec7n \u0111\u1ea1i \u0111ang \u0111\u1ed1i m\u1eb7t v\u1edbi nhi\u1ec1u \u00e1p l\u1ef1c v\u1ec1 th\u1eddi gian v\u00e0 ch\u1ea5t l\u01b0\u1ee3ng. C\u00e1c l\u1eadp tr\u00ecnh vi\u00ean th\u01b0\u1eddng m\u1ea5t h\u00e0ng gi\u1edd \u0111\u1ed3ng h\u1ed3 ch\u1ec9 \u0111\u1ec3 t\u00edch h\u1ee3p code th\u1ee7 c\u00f4ng. Nh\u1eefng xung \u0111\u1ed9t m\u00e3 ngu\u1ed3n kh\u00f4ng mong mu\u1ed1n th\u01b0\u1eddng xuy\u00ean x\u1ea3y ra khi nhi\u1ec1u ng\u01b0\u1eddi c\u00f9ng l\u00e0m<\/p>\n","protected":false},"author":11,"featured_media":38354,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[140],"tags":[],"class_list":["post-30002","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lap-trinh"],"_links":{"self":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/30002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/comments?post=30002"}],"version-history":[{"count":8,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/30002\/revisions"}],"predecessor-version":[{"id":38358,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/30002\/revisions\/38358"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media\/38354"}],"wp:attachment":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media?parent=30002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/categories?post=30002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/tags?post=30002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}