{"id":3373,"date":"2021-07-03T12:17:06","date_gmt":"2021-07-03T05:17:06","guid":{"rendered":"https:\/\/ton.packetlove.com\/blog\/?p=3373"},"modified":"2021-11-03T14:35:05","modified_gmt":"2021-11-03T07:35:05","slug":"ci-cd-pipeline","status":"publish","type":"post","link":"https:\/\/ton.packetlove.com\/blog\/devops\/ci-cd-pipeline.html","title":{"rendered":"\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a DevOps Architecture CI\/CD Pipeline \u0e43\u0e2b\u0e49\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e01\u0e31\u0e1a\u0e07\u0e32\u0e19 \u0e41\u0e25\u0e30\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23"},"content":{"rendered":"<figure id=\"attachment_3374\" aria-describedby=\"caption-attachment-3374\" style=\"width: 640px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1-640x414.png\" alt=\"\" width=\"640\" height=\"414\" class=\"size-medium wp-image-3374\" srcset=\"https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1-640x414.png 640w, https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1-1024x663.png 1024w, https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1-768x497.png 768w, https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1-1536x994.png 1536w, https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1-524x339.png 524w, https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1-100x65.png 100w, https:\/\/ton.packetlove.com\/blog\/wp-content\/uploads\/2021\/07\/iam_v1.png 1672w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-3374\" class=\"wp-caption-text\">DevOps Architecture CI\/CD Pipeline<\/figcaption><\/figure>\n<p>\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35\u0e04\u0e23\u0e31\u0e1a .. <strong>DevOps 101<\/strong> \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32 \u0e27\u0e31\u0e19\u0e19\u0e35\u0e49\u0e21\u0e35\u0e42\u0e08\u0e17\u0e22\u0e4c \u0e21\u0e32\u0e2d\u0e31\u0e19\u0e19\u0e36\u0e07\u0e04\u0e23\u0e31\u0e1a \u0e43\u0e2b\u0e49\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a <strong>Architecture<\/strong>, <strong>Tech Stack<\/strong> \u0e41\u0e25\u0e30 <strong>CI\/CD Pipeline<\/strong> \u0e02\u0e2d\u0e07 <strong>Application<\/strong> \u0e17\u0e35\u0e48\u0e21\u0e35\u0e04\u0e19\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e08\u0e33\u0e19\u0e27\u0e19\u0e21\u0e32\u0e01 app \u0e19\u0e36\u0e07 \u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23 \u0e02\u0e19\u0e32\u0e14\u0e43\u0e2b\u0e0d\u0e48 \u0e23\u0e30\u0e14\u0e31\u0e1a\u0e1e\u0e19\u0e31\u0e01\u0e07\u0e32\u0e19 <strong>200,000<\/strong> \u0e04\u0e19 ++ .. <\/p>\n<p>\u0e08\u0e23\u0e34\u0e07\u0e46 \u0e43\u0e19\u0e01\u0e32\u0e23\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a \u0e44\u0e21\u0e48\u0e21\u0e35\u0e2d\u0e30\u0e44\u0e23\u0e16\u0e39\u0e01\u0e2d\u0e30\u0e44\u0e23\u0e1c\u0e34\u0e14\u0e04\u0e23\u0e31\u0e1a .. \u0e2b\u0e25\u0e31\u0e01\u0e01\u0e32\u0e23\u0e07\u0e48\u0e32\u0e22\u0e46 \u0e01\u0e47\u0e04\u0e37\u0e2d &#8220;<strong>Simply the best<\/strong>&#8221; .. \u0e17\u0e33\u0e43\u0e2b\u0e49 deploy \u0e07\u0e48\u0e32\u0e22\u0e46 .. \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a load \u0e2a\u0e39\u0e07\u0e46 \u0e43\u0e2b\u0e49\u0e44\u0e14\u0e49 .. \u0e21\u0e35\u0e23\u0e30\u0e1a\u0e1a Monitoring \u0e17\u0e35\u0e48\u0e14\u0e35 .. \u0e41\u0e25\u0e30\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21 \u0e01\u0e31\u0e1a\u0e07\u0e32\u0e19\u0e41\u0e25\u0e30\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23 ..<\/p>\n<p>\u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07\u0e08\u0e32\u0e01 \u0e17\u0e32\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23 \u0e21\u0e35 <strong>Single Sign-On<\/strong> \u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e0b\u0e36\u0e48\u0e07\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1c\u0e48\u0e32\u0e19 <strong>AWS Cognito<\/strong> \u0e44\u0e14\u0e49 .. \u0e40\u0e23\u0e32\u0e01\u0e47\u0e40\u0e25\u0e22\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16 \u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49\u0e40\u0e25\u0e22 \u0e41\u0e25\u0e30\u0e40\u0e2d\u0e32\u0e44\u0e1b\u0e15\u0e48\u0e2d\u0e01\u0e31\u0e1a <strong>CI\/CD Tools<\/strong> \u0e17\u0e35\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e44\u0e14\u0e49 \u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19 <strong>GitLab<\/strong>, <strong>Jenkins<\/strong>, <strong>Nexus Repository<\/strong> \u0e41\u0e25\u0e30\u0e2d\u0e37\u0e48\u0e19\u0e46 \u0e43\u0e19\u0e2d\u0e19\u0e32\u0e04\u0e15 ..<\/p>\n<p>\u0e43\u0e19\u0e17\u0e35\u0e48\u0e19\u0e35\u0e49 \u0e15\u0e31\u0e27 <strong>Application<\/strong> \u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e1e\u0e31\u0e12\u0e19\u0e32\u0e42\u0e14\u0e22\u0e43\u0e0a\u0e49 <strong>Next.js<\/strong> \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e27\u0e48\u0e32 \u0e15\u0e49\u0e2d\u0e07\u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a user \u0e17\u0e35\u0e48\u0e40\u0e02\u0e49\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e2b\u0e25\u0e32\u0e01\u0e2b\u0e25\u0e32\u0e22 \u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19 \u0e1a\u0e19 Desktop \u0e41\u0e25\u0e30 Mobile .. \u0e41\u0e25\u0e30\u0e17\u0e32\u0e07\u0e17\u0e35\u0e21 <strong>Developer<\/strong> \u0e21\u0e35\u0e04\u0e27\u0e32\u0e21\u0e40\u0e0a\u0e35\u0e48\u0e22\u0e27\u0e0a\u0e32\u0e0d\u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 Next.js \u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27 .. \u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 <strong>CI\/CD Tools<\/strong> \u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49 <strong>Jenkins<\/strong> \u0e41\u0e25\u0e30\u0e17\u0e33 CI\/CD Pipeline \u0e40\u0e1b\u0e47\u0e19 <strong>Jenkinsfile<\/strong> (Declarative Pipeline) \u0e41\u0e1a\u0e1a\u0e07\u0e48\u0e32\u0e22\u0e46 <strong>stage<\/strong> \u0e15\u0e23\u0e07\u0e44\u0e1b\u0e15\u0e23\u0e07\u0e21\u0e32 \u0e43\u0e04\u0e23\u0e21\u0e32\u0e2d\u0e48\u0e32\u0e19 \u0e01\u0e47\u0e40\u0e02\u0e49\u0e32\u0e43\u0e08 .. \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e27\u0e48\u0e32\u0e2d\u0e19\u0e32\u0e04\u0e15 \u0e40\u0e23\u0e32\u0e2d\u0e22\u0e32\u0e01\u0e40\u0e2d\u0e32 template \u0e19\u0e35\u0e49 \u0e44\u0e1b reuse \u0e43\u0e2b\u0e49\u0e17\u0e35\u0e21\u0e2d\u0e37\u0e48\u0e19 \u0e43\u0e19\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23 \u0e40\u0e23\u0e32\u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e15\u0e32\u0e21\u0e14\u0e49\u0e27\u0e22 ..<\/p>\n<p>\u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 <strong>Artifactory<\/strong> \u0e17\u0e35\u0e48\u0e43\u0e0a\u0e49\u0e40\u0e01\u0e47\u0e1a <strong>Docker Images<\/strong> \u0e41\u0e25\u0e30 <strong>binary files<\/strong> \u0e15\u0e48\u0e32\u0e07\u0e46 \u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49 <strong>Nexus Repository<\/strong> \u0e40\u0e1b\u0e47\u0e19 private repository \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32 .. \u0e2a\u0e48\u0e27\u0e19 <strong>SCM<\/strong> (Source Code Management) \u0e2d\u0e31\u0e19\u0e19\u0e35\u0e49\u0e08\u0e23\u0e34\u0e07\u0e46 \u0e40\u0e23\u0e32\u0e04\u0e34\u0e14\u0e27\u0e48\u0e32 \u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e30\u0e44\u0e23\u0e01\u0e47\u0e44\u0e14\u0e49 \u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e08\u0e30 github, gitlab, ecr, bitbucket .. \u0e41\u0e15\u0e48\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e40\u0e23\u0e32\u0e21\u0e35 <strong>GitLab<\/strong> \u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e01\u0e47\u0e40\u0e25\u0e22\u0e43\u0e0a\u0e49\u0e15\u0e31\u0e27\u0e19\u0e35\u0e49\u0e44\u0e1b\u0e40\u0e25\u0e22 .. \u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 <strong>static code scan<\/strong> \u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49 <strong>SonarQube<\/strong> \u0e41\u0e15\u0e48\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e2d\u0e22\u0e32\u0e01\u0e14\u0e39\u0e08\u0e23\u0e34\u0e07\u0e46 \u0e01\u0e47\u0e40\u0e1b\u0e47\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 <strong>code coverage<\/strong> \u0e21\u0e32\u0e01\u0e01\u0e27\u0e48\u0e32 ..<\/p>\n<p>\u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 <strong>Server \u0e17\u0e35\u0e48\u0e40\u0e23\u0e32\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e43\u0e19\u0e01\u0e32\u0e23 deploy<\/strong> \u0e15\u0e31\u0e27 Application \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32\u0e02\u0e36\u0e49\u0e19\u0e44\u0e1b \u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49 <strong>Amazon EKS<\/strong> (\u0e21\u0e31\u0e19\u0e04\u0e37\u0e2d k8s cluster \u0e1a\u0e19 AWS) \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e27\u0e48\u0e32\u0e40\u0e23\u0e32\u0e44\u0e21\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e27\u0e38\u0e48\u0e19\u0e27\u0e32\u0e22\u0e43\u0e19\u0e01\u0e32\u0e23\u0e2a\u0e23\u0e49\u0e32\u0e07 k8s cluster \u0e02\u0e36\u0e49\u0e19\u0e21\u0e32\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e40\u0e2d\u0e07 \u0e41\u0e25\u0e30\u0e15\u0e31\u0e27 cost \u0e02\u0e2d\u0e07 <strong>Amazon EKS \u0e01\u0e47\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e41\u0e1e\u0e07\u0e01\u0e27\u0e48\u0e32 EC2 \u0e18\u0e23\u0e23\u0e21\u0e14\u0e32<\/strong> \u0e40\u0e17\u0e48\u0e32\u0e44\u0e23\u0e19\u0e31\u0e01 .. <\/p>\n<h3>\u0e17\u0e33\u0e44\u0e21\u0e16\u0e36\u0e07\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49 EKS \u0e44\u0e21\u0e48\u0e43\u0e0a\u0e49 ECS ? <\/h3>\n<p>&#8211; \u0e1c\u0e21\u0e40\u0e2d\u0e07\u0e15\u0e49\u0e2d\u0e07\u0e2d\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19\u0e04\u0e23\u0e31\u0e1a \u0e27\u0e48\u0e32\u0e04\u0e27\u0e32\u0e21\u0e23\u0e39\u0e49\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a <strong>ECS<\/strong> \u0e02\u0e2d\u0e07\u0e1c\u0e21 \u0e41\u0e17\u0e1a\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19 0 .. \u0e41\u0e15\u0e48\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e44\u0e14\u0e49\u0e40\u0e02\u0e49\u0e32 <strong>training \u0e01\u0e31\u0e1a AWS<\/strong> \u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 <strong>ECS + DevOps<\/strong> .. \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1c\u0e21\u0e1e\u0e2d\u0e44\u0e14\u0e49\u0e23\u0e39\u0e49\u0e1a\u0e49\u0e32\u0e07\u0e27\u0e48\u0e32 \u0e15\u0e31\u0e27 ECS \u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e44\u0e23 .. \u0e40\u0e23\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16 \u0e17\u0e33\u0e2d\u0e30\u0e44\u0e23\u0e01\u0e31\u0e1a\u0e21\u0e31\u0e19\u0e44\u0e14\u0e49\u0e1a\u0e49\u0e32\u0e07 .. \u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1c\u0e21\u0e15\u0e31\u0e14\u0e2a\u0e34\u0e19\u0e43\u0e08\u0e44\u0e14\u0e49\u0e17\u0e31\u0e19\u0e17\u0e35 \u0e27\u0e48\u0e32\u0e07\u0e31\u0e49\u0e19\u0e40\u0e23\u0e32\u0e44\u0e1b <strong>EKS<\/strong> \u0e40\u0e16\u0e2d\u0e30 .. \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e27\u0e48\u0e32 \u0e43\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33 Application \u0e17\u0e35\u0e48\u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a\u0e04\u0e19\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e08\u0e33\u0e19\u0e27\u0e19\u0e21\u0e32\u0e01\u0e19\u0e31\u0e49\u0e19 .. \u0e01\u0e32\u0e23 <strong>scale<\/strong> \u0e41\u0e25\u0e30\u0e01\u0e32\u0e23 <strong>monitoring metrics<\/strong> \u0e15\u0e48\u0e32\u0e07\u0e46 \u0e16\u0e37\u0e2d\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e21\u0e32\u0e01 \u0e0b\u0e36\u0e48\u0e07\u0e1c\u0e21\u0e40\u0e2d\u0e07\u0e04\u0e34\u0e14\u0e27\u0e48\u0e32 <strong>EKS<\/strong> \u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 <strong>k8s cluster eco system<\/strong> \u0e21\u0e31\u0e19 <strong>flexible<\/strong> \u0e01\u0e27\u0e48\u0e32 .. \u0e2d\u0e32\u0e08\u0e08\u0e30\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e2b\u0e15\u0e38\u0e1c\u0e25\u0e17\u0e35\u0e48\u0e40\u0e2d\u0e19\u0e40\u0e2d\u0e35\u0e22\u0e07\u0e19\u0e34\u0e14\u0e2b\u0e19\u0e48\u0e2d\u0e22 \u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e1c\u0e21\u0e04\u0e38\u0e49\u0e19\u0e40\u0e04\u0e22\u0e01\u0e31\u0e1a <strong>Container Platform<\/strong> \u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 k8s \u0e14\u0e49\u0e27\u0e22 .. (k8s, OpenShift)<\/p>\n<p>\u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07 <strong>Dashboard &#038; Monitoring Tools<\/strong> \u0e43\u0e19\u0e17\u0e35\u0e48\u0e19\u0e35\u0e49\u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49 <strong>APM<\/strong> (Application Performance Monitoring) + <strong>ELK Stack<\/strong> \u0e43\u0e19\u0e01\u0e32\u0e23 monitoring Application \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32 \u0e17\u0e35\u0e48\u0e40\u0e1b\u0e47\u0e19 <strong>Next.js<\/strong> .. \u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e2d\u0e07\u0e15\u0e31\u0e27 <strong>EKS (k8s Cluster)<\/strong> \u0e40\u0e23\u0e32\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e43\u0e0a\u0e49 <strong>Lens<\/strong> + <strong>Prometheus<\/strong> \u0e40\u0e1b\u0e47\u0e19 manage \u0e41\u0e25\u0e30 monitoring metrics \u0e15\u0e48\u0e32\u0e07\u0e46 .. \u0e41\u0e15\u0e48\u0e15\u0e31\u0e27 Lens \u0e40\u0e2d\u0e07 \u0e21\u0e31\u0e19\u0e04\u0e37\u0e2d\u0e14\u0e39\u0e41\u0e1a\u0e1a \u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e43\u0e04\u0e23\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e31\u0e19 .. \u0e2d\u0e19\u0e32\u0e04\u0e15 \u0e16\u0e49\u0e32\u0e40\u0e23\u0e32\u0e2d\u0e22\u0e32\u0e01\u0e17\u0e33\u0e40\u0e1b\u0e47\u0e19 dashboard \u0e43\u0e2b\u0e49\u0e17\u0e31\u0e49\u0e07\u0e17\u0e35\u0e21 \u0e44\u0e14\u0e49\u0e14\u0e39\u0e1c\u0e48\u0e32\u0e19\u0e08\u0e2d TV LED \u0e23\u0e48\u0e27\u0e21\u0e01\u0e31\u0e19 \u0e01\u0e47\u0e19\u0e48\u0e32\u0e08\u0e30\u0e40\u0e2d\u0e32 <strong>Grafana<\/strong> \u0e21\u0e32\u0e17\u0e33 dashboard \u0e43\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e19\u0e35\u0e49 .. \u0e2a\u0e48\u0e27\u0e19\u0e15\u0e31\u0e27 <strong>Alert Notification<\/strong> \u0e40\u0e23\u0e32\u0e43\u0e0a\u0e49\u0e40\u0e1b\u0e47\u0e19 webhook \u0e02\u0e2d\u0e07 <strong>MS Teams<\/strong> \u0e40\u0e1e\u0e23\u0e32\u0e30\u0e27\u0e48\u0e32\u0e17\u0e35\u0e21\u0e40\u0e23\u0e32 \u0e41\u0e25\u0e30\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23\u0e40\u0e23\u0e32 \u0e43\u0e0a\u0e49 MS Teams \u0e40\u0e1b\u0e47\u0e19\u0e2b\u0e25\u0e31\u0e01 \u0e43\u0e19\u0e01\u0e32\u0e23\u0e17\u0e33\u0e07\u0e32\u0e19\u0e2d\u0e22\u0e39\u0e48\u0e41\u0e25\u0e49\u0e27 ..<\/p>\n<h3>Tech Stack <\/h3>\n<p>&#8211; Next.js<br \/>\n&#8211; GitLab<br \/>\n&#8211; Jenkins<br \/>\n&#8211; Nexus Repository<br \/>\n&#8211; SonarQube<br \/>\n&#8211; nginx<br \/>\n&#8211; Docker<br \/>\n&#8211; Kubernetes (k8s)<br \/>\n&#8211; AWS Cognito<br \/>\n&#8211; AWS EKS<br \/>\n&#8211; Elasticsearch<br \/>\n&#8211; Logstash + APM<br \/>\n&#8211; Kibana<br \/>\n&#8211; Prometheus<br \/>\n&#8211; Lens\/Grafana<br \/>\n&#8211; Microsoft Teams<\/p>\n<h3>Jenkins Pipeline Examples <\/h3>\n<p><a href=\"https:\/\/github.com\/pornpasok\/demo-app-k8s\">https:\/\/github.com\/pornpasok\/demo-app-k8s<\/a><\/p>\n<p>\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e17\u0e48\u0e32\u0e19\u0e43\u0e14 \u0e17\u0e35\u0e48\u0e2a\u0e19\u0e43\u0e08 \u0e43\u0e19\u0e01\u0e32\u0e23\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a Architecture, Tech Stack \u0e41\u0e25\u0e30 CI\/CD Pipeline \u0e01\u0e47\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16 \u0e21\u0e32 comment \u0e1e\u0e39\u0e14\u0e04\u0e38\u0e22 \u0e41\u0e25\u0e01\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19 \u0e1b\u0e23\u0e36\u0e01\u0e29\u0e32\u0e01\u0e31\u0e19\u0e44\u0e14\u0e49\u0e15\u0e23\u0e07\u0e19\u0e35\u0e49\u0e19\u0e30\u0e04\u0e23\u0e31\u0e1a .. \u0e2d\u0e22\u0e48\u0e32\u0e07\u0e17\u0e35\u0e48\u0e1c\u0e21\u0e40\u0e19\u0e49\u0e19\u0e22\u0e49\u0e33\u0e15\u0e25\u0e2d\u0e14 \u0e44\u0e21\u0e48\u0e21\u0e35\u0e41\u0e1a\u0e1a\u0e44\u0e2b\u0e19\u0e1c\u0e34\u0e14 \u0e41\u0e1a\u0e1a\u0e44\u0e2b\u0e19\u0e16\u0e39\u0e01 .. \u0e41\u0e15\u0e48\u0e41\u0e1a\u0e1a\u0e44\u0e2b\u0e19\u0e17\u0e35\u0e48\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e01\u0e31\u0e1a\u0e40\u0e23\u0e32 \u0e19\u0e31\u0e48\u0e19\u0e41\u0e2b\u0e25\u0e30 \u0e04\u0e37\u0e2d\u0e14\u0e35\u0e17\u0e35\u0e48\u0e2a\u0e38\u0e14 \u0e04\u0e23\u0e31\u0e1a .. \ud83d\ude42<\/p>\n<div class=\"fcbkbttn_buttons_block\" id=\"fcbkbttn_left\"><div class=\"fcbkbttn_like \"><fb:like href=\"https:\/\/ton.packetlove.com\/blog\/devops\/ci-cd-pipeline.html\" action=\"like\" colorscheme=\"light\" layout=\"button_count\"  size=\"small\"><\/fb:like><\/div><div class=\"fb-share-button  \" data-href=\"https:\/\/ton.packetlove.com\/blog\/devops\/ci-cd-pipeline.html\" data-type=\"button_count\" data-size=\"small\"><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>\u0e2a\u0e27\u0e31\u0e2a\u0e14\u0e35\u0e04\u0e23\u0e31\u0e1a .. DevOps 101 \u0e02\u0e2d\u0e07\u0e40\u0e23\u0e32 \u0e27\u0e31\u0e19\u0e19\u0e35\u0e49\u0e21\u0e35\u0e42\u0e08\u0e17\u0e22\u0e4c \u0e21\u0e32\u0e2d\u0e31\u0e19\u0e19\u0e36\u0e07\u0e04\u0e23\u0e31\u0e1a \u0e43\u0e2b\u0e49\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a Architecture, Tech Stack \u0e41\u0e25\u0e30 CI\/CD Pipeline \u0e02\u0e2d\u0e07 Application \u0e17\u0e35\u0e48\u0e21\u0e35\u0e04\u0e19\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e08\u0e33\u0e19\u0e27\u0e19\u0e21\u0e32\u0e01 app \u0e19\u0e36\u0e07 \u0e43\u0e2b\u0e49\u0e01\u0e31\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23 \u0e02\u0e19\u0e32\u0e14\u0e43\u0e2b\u0e0d\u0e48 \u0e23\u0e30\u0e14\u0e31\u0e1a\u0e1e\u0e19\u0e31\u0e01\u0e07\u0e32\u0e19 200,000 \u0e04\u0e19 ++ .. \u0e08\u0e23\u0e34\u0e07\u0e46 \u0e43\u0e19\u0e01\u0e32\u0e23\u0e2d\u0e2d\u0e01\u0e41\u0e1a\u0e1a \u0e44\u0e21\u0e48\u0e21\u0e35\u0e2d\u0e30\u0e44\u0e23\u0e16\u0e39\u0e01\u0e2d\u0e30\u0e44\u0e23\u0e1c\u0e34\u0e14\u0e04\u0e23\u0e31\u0e1a .. \u0e2b\u0e25\u0e31\u0e01\u0e01\u0e32\u0e23\u0e07\u0e48\u0e32\u0e22\u0e46 \u0e01\u0e47\u0e04\u0e37\u0e2d &#8220;Simply the best&#8221; .. \u0e17\u0e33\u0e43\u0e2b\u0e49 deploy \u0e07\u0e48\u0e32\u0e22\u0e46 .. \u0e23\u0e2d\u0e07\u0e23\u0e31\u0e1a load \u0e2a\u0e39\u0e07\u0e46 \u0e43\u0e2b\u0e49\u0e44\u0e14\u0e49 .. \u0e21\u0e35\u0e23\u0e30\u0e1a\u0e1a Monitoring \u0e17\u0e35\u0e48\u0e14\u0e35 .. \u0e41\u0e25\u0e30\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21 \u0e01\u0e31\u0e1a\u0e07\u0e32\u0e19\u0e41\u0e25\u0e30\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23 .. \u0e40\u0e19\u0e37\u0e48\u0e2d\u0e07\u0e08\u0e32\u0e01 \u0e17\u0e32\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e01\u0e23 \u0e21\u0e35 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1080],"tags":[1061,1074,1060,1083,1090,1087,1085,1068,1084,1088,1086,1089],"class_list":["post-3373","post","type-post","status-publish","format-standard","hentry","category-devops","tag-cicd","tag-dashboard","tag-devops","tag-eks","tag-elk","tag-grafana","tag-jenkins","tag-k8s","tag-lens","tag-monitoring","tag-pipeline","tag-prometheus"],"_links":{"self":[{"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/posts\/3373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/comments?post=3373"}],"version-history":[{"count":11,"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/posts\/3373\/revisions"}],"predecessor-version":[{"id":3439,"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/posts\/3373\/revisions\/3439"}],"wp:attachment":[{"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/media?parent=3373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/categories?post=3373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ton.packetlove.com\/blog\/wp-json\/wp\/v2\/tags?post=3373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}