{"id":3398,"date":"2025-09-10T13:15:51","date_gmt":"2025-09-10T13:15:51","guid":{"rendered":"https:\/\/www.woojin.help\/?p=3398"},"modified":"2025-09-10T13:15:53","modified_gmt":"2025-09-10T13:15:53","slug":"ci-cd-pipeline","status":"publish","type":"post","link":"https:\/\/www.woojin.help\/ko\/ci-cd-pipeline\/","title":{"rendered":"CI\/CD Pipeline Documentation &#8211; Wabot App"},"content":{"rendered":"<div class=\"pdfprnt-buttons pdfprnt-buttons-post pdfprnt-top-right\"><\/div>\n<p class=\"wp-block-paragraph\">Project Repository: <a href=\"https:\/\/gitlab.woojin.help\/wjATControlTeam\/wabot-app\">https:\/\/gitlab.woojin.help\/wjATControlTeam\/wabot-app<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is a CI\/CD Pipeline?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5d0\uc774 <strong>CI\/CD Pipeline<\/strong> (Continuous Integration\/Continuous Deployment) is an automated process that runs every time you make changes to your code. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Builds <\/strong>Docker images from your code automatically<\/li>\n\n\n\n<li><strong>Tests <\/strong>the code (if tests are present)<\/li>\n\n\n\n<li><strong>Publishes<\/strong> the images to a registry<\/li>\n\n\n\n<li><strong>Deploys <\/strong>the application automatically<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Think of it as your personal assistant that takes care of all the boring, repetitive tasks every time you write new code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Our Pipeline Works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our pipeline is defined in the `<strong>.gitlab-ci.yml<\/strong>` file and gets triggered by automatically by Gitlab on certain conditions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1419\" height=\"950\" src=\"https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image.png\" alt=\"\" class=\"wp-image-3399\" srcset=\"https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image.png 1419w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-300x201.png 300w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1024x686.png 1024w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-768x514.png 768w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-18x12.png 18w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1320x884.png 1320w\" sizes=\"(max-width: 1419px) 100vw, 1419px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1372\" height=\"1143\" src=\"https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1.png\" alt=\"\" class=\"wp-image-3400\" srcset=\"https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1.png 1372w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1-300x250.png 300w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1-1024x853.png 1024w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1-768x640.png 768w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1-14x12.png 14w, https:\/\/www.woojin.help\/wp-content\/uploads\/2025\/09\/image-1-1320x1100.png 1320w\" sizes=\"(max-width: 1372px) 100vw, 1372px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Development (`dev` branch)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trigger<\/strong>: Every code commit to `<strong>dev<\/strong>` branch<\/li>\n\n\n\n<li><strong>Creates<\/strong>: Images with `:<strong>dev<\/strong>` tag<\/li>\n\n\n\n<li><strong>Usage<\/strong>: Office development and testing<\/li>\n\n\n\n<li><strong>Updates<\/strong>: Automatic every 30 seconds<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Serial Production (`v1.2.3` tags)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trigger<\/strong>: Git tags like <code>v1.2.3<\/code> (only from <strong><code>main<\/code> <\/strong>branch)<\/li>\n\n\n\n<li><strong>Creates<\/strong>: Images with version tag + <code>:<\/code><strong><code>latest<\/code> <\/strong>tag<\/li>\n\n\n\n<li><strong>Usage<\/strong>: Serial production and software releases<\/li>\n\n\n\n<li><strong>Updates<\/strong>: Manual, controlled production deployment<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Production Testing (`v1.2.3-beta` tags)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trigger<\/strong>: Git tags like <code>v1.2.3-beta1<\/code> (only from <strong><code>main<\/code> <\/strong>branch)<\/li>\n\n\n\n<li><strong>Creates<\/strong>: Images with version tag only<\/li>\n\n\n\n<li><strong>Usage<\/strong>: Production testing and validation<\/li>\n\n\n\n<li><strong>Updates<\/strong>: Manual deployment for testing<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Tag<\/td><td class=\"has-text-align-center\" data-align=\"center\">Usage<\/td><td class=\"has-text-align-center\" data-align=\"center\">Update Frequency<\/td><td class=\"has-text-align-center\" data-align=\"center\">Stability<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>:dev<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Office development &amp; testing<\/td><td class=\"has-text-align-center\" data-align=\"center\">Every commit<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Experimental<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong><strong>:v1.2.3<\/strong><\/strong> -> <strong>:latest<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Serial production &amp; software releases<\/td><td class=\"has-text-align-center\" data-align=\"center\">\uc218\ub3d9<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Production-ready<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>:v1.2.3-beta<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Testing before software release<\/td><td class=\"has-text-align-center\" data-align=\"center\">\uc218\ub3d9<\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Stable<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Security Features<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Serial production tags must come from `main` branch only<\/strong><\/li>\n\n\n\n<li>Prevents accidental deployments from development branches<\/li>\n\n\n\n<li>Beta versions don&#8217;t get `:<strong>latest<\/strong>` tag (prevents automatic production updates)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>Project Repository: https:\/\/gitlab.woojin.help\/wjATControlTeam\/wabot-app What is a CI\/CD Pipeline? A CI\/CD Pipeline (Continuous Integration\/Continuous Deployment) is an automated process that runs [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[379,398,1],"tags":[],"class_list":["post-3398","post","type-post","status-publish","format-standard","hentry","category-documentation","category-wabot","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/posts\/3398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/comments?post=3398"}],"version-history":[{"count":1,"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/posts\/3398\/revisions"}],"predecessor-version":[{"id":3401,"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/posts\/3398\/revisions\/3401"}],"wp:attachment":[{"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/media?parent=3398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/categories?post=3398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.woojin.help\/ko\/wp-json\/wp\/v2\/tags?post=3398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}