{"id":1726,"date":"2026-07-03T15:41:04","date_gmt":"2026-07-03T15:41:04","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=1726"},"modified":"2026-08-31T07:32:51","modified_gmt":"2026-08-31T07:32:51","slug":"jenkins-%ed%95%b5%ec%8b%ac-%ec%a0%95%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=1726","title":{"rendered":"Jenkins \ud575\uc2ec \uc815\ub9ac"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Jenkins\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \uacfc\uc815\uc5d0\uc11c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 <strong>\ube4c\ub4dc, \ud14c\uc2a4\ud2b8, \ubc30\ud3ec \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud558\ub294 CI\/CD \uc11c\ubc84<\/strong>\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Actions\uc640 \ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud558\uc9c0\ub9cc \uad6c\uc870\uac00 \uc870\uae08 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Actions\ub294 GitHub Repository\uc640 \uac15\ud558\uac8c \uacb0\ud569\ub41c \uc790\ub3d9\ud654 \ud50c\ub7ab\ud3fc\uc774\uace0, Jenkins\ub294 <strong>\ubcc4\ub3c4\uc758 \uc11c\ubc84\ub97c \uc124\uce58\ud558\uace0 \uc9c1\uc811 \uc6b4\uc601\ud558\uba74\uc11c \ub2e4\uc591\ud55c \uac1c\ubc1c \ud658\uacbd\uacfc \ub3c4\uad6c\ub97c \uc5f0\uacb0\ud558\ub294 \uc790\ub3d9\ud654 \uc11c\ubc84<\/strong>\uc5d0 \uac00\uae5d\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GitHub Actions -&gt; GitHub \/ Workflow \/ Runner \/ Actions\n\nJenkins -&gt; Jenkins Server \/ Pipeline \/ Agent \/ Plugin \/ \uc678\ubd80 Repository \/ Build Tool \/ Deploy System<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\ub294 \uc624\ub798\uc804\ubd80\ud130 \uc0ac\uc6a9\ub418\uc5b4 \uc628 CI\/CD \ub3c4\uad6c\ub77c\uc11c \ub300\uaddc\ubaa8 \uc870\uc9c1\uc774\ub098 \uc0ac\ub0b4 \uc778\ud504\ub77c\uc5d0\uc11c \uc5ec\uc804\ud788 \ub9ce\uc774 \ubcfc \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\uac00 \ud544\uc694\ud55c \uc774\uc720<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c\uc790\uac00 \ucf54\ub4dc\ub97c \uc218\uc815\ud560 \ub54c\ub9c8\ub2e4 \uc9c1\uc811 \ub2e4\uc74c \uc791\uc5c5\uc744 \ud55c\ub2e4\uace0 \uc0dd\uac01\ud574\ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ucf54\ub4dc \uc218\uc815 -&gt; Build -&gt; Test -&gt; Package -&gt; \uc11c\ubc84 \uc811\uc18d -&gt; \ubc30\ud3ec -&gt; \uc11c\ube44\uc2a4 \uc7ac\uc2dc\uc791<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud55c\ub450 \ubc88\uc774\uba74 \ubb38\uc81c\uac00 \uc5c6\uc9c0\ub9cc \uac1c\ubc1c\uc790\uac00 \uacc4\uc18d \ubc18\ubcf5\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\ub97c \uc0ac\uc6a9\ud558\uba74 \uc774\ub7f0 \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Push -&gt; Jenkins -&gt; Build -&gt; Test -&gt; Package -&gt; Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac1c\ubc1c\uc790\ub294 \ucf54\ub4dc \ubcc0\uacbd\uc5d0 \uc9d1\uc911\ud558\uace0 Jenkins\uac00 \uc815\ud574\uc9c4 \uc808\ucc28\ub97c \uc218\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\uc758 \uae30\ubcf8 \uad6c\uc870<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\ub97c \uc774\ud574\ud560 \ub54c\ub294 \ub2e4\uc74c \uad6c\uc870\ub97c \uba3c\uc800 \uc7a1\ub294 \uac83\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Developer -&gt; Git Repository -&gt; Jenkins Controller -&gt; Jenkins Agent -&gt; Build \/ Test \/ Package \/ Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac01 \uc5ed\ud560\uc744 \ub098\ub204\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Controller -&gt; \uc791\uc5c5\uc744 \uad00\ub9ac\ud558\uace0 Pipeline\uc744 \uc870\uc815\n\nAgent -&gt; \uc2e4\uc81c Build \/ Test \/ Deploy \uc791\uc5c5\uc744 \uc2e4\ud589\n\nPipeline -&gt; \uc790\ub3d9\ud654 Workflow \uc815\uc758\n\nPlugin -&gt; \uc678\ubd80 \uc2dc\uc2a4\ud15c\uacfc Jenkins\ub97c \uc5f0\uacb0<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins Controller<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uc758 \uc911\uc2ec\uc774 \ub418\ub294 \uc11c\ubc84\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacfc\uac70\uc5d0\ub294 Master\ub77c\ub294 \uc6a9\uc5b4\ub97c \uc0ac\uc6a9\ud588\uc9c0\ub9cc \ud604\uc7ac\ub294 Controller\ub77c\ub294 \uc6a9\uc5b4\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\uac00 \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc9c1\uc811 \uc2e4\ud589\ud558\ub294 \uad6c\uc870\ub3c4 \uac00\ub2a5\ud558\uc9c0\ub9cc, \uaddc\ubaa8\uac00 \ucee4\uc9c0\uba74 Agent\ub97c \ubcc4\ub3c4\ub85c \ub450\ub294 \ubc29\uc2dd\uc774 \uc77c\ubc18\uc801\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Controller\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc791\uc5c5\uc744 \ub2f4\ub2f9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Job \uad00\ub9ac \/ Pipeline \uad00\ub9ac \/ Build \uc608\uc57d \/ Build \uacb0\uacfc \uad00\ub9ac \/ Agent \uad00\ub9ac \/ Credential \uad00\ub9ac \/ Plugin \uad00\ub9ac<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc911\uc694\ud55c \uc810\uc740 Controller\uac00 <strong>\uc791\uc5c5\uc744 \uc9c0\uc2dc\ud558\uace0 \uad00\ub9ac\ud558\ub294 \uc5ed\ud560<\/strong>\uc774\ub77c\ub294 \uac83\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c \ube4c\ub4dc\ub294 Agent\uc5d0\uc11c \uc218\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins Agent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Agent\ub294 \uc2e4\uc81c \uc791\uc5c5\uc744 \uc2e4\ud589\ud558\ub294 \uba38\uc2e0\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins Controller -&gt; Agent 1 \/ Agent 2 \/ Agent 3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud504\ub85c\uc81d\ud2b8\ub9c8\ub2e4 \ud544\uc694\ud55c \ud658\uacbd\uc774 \ub2e4\ub97c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Agent 1 -&gt; Linux \/ C++ \/ GCC\n\nAgent 2 -&gt; Windows \/ Visual Studio \/ C++\n\nAgent 3 -&gt; Linux \/ Node.js \/ Docker<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c Agent\ub97c \ub098\ub220 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac8c\uc784 \uac1c\ubc1c\uc5d0\uc11c\ub3c4 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Windows Agent -&gt; Unreal Build \/ Unity Build\n\nLinux Agent -&gt; Game Server Build \/ Docker Build<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins Pipeline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uc5d0\uc11c \uc790\ub3d9\ud654 Workflow\ub97c \uc815\uc758\ud558\ub294 \ud575\uc2ec \uac1c\ub150\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uacfc \uac19\uc740 Pipeline\uc744 \ub9cc\ub4e4 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Checkout -&gt; Build -&gt; Test -&gt; Package -&gt; Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pipeline\uc740 Jenkinsfile\uc774\ub77c\ub294 \ud30c\uc77c\ub85c \ucf54\ub4dc\ud654\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pipeline {\n    agent any\n\n    stages {\n        stage('Build') {\n            steps {\n                sh '.\/build.sh'\n            }\n        }\n\n        stage('Test') {\n            steps {\n                sh '.\/test.sh'\n            }\n        }\n\n        stage('Deploy') {\n            steps {\n                sh '.\/deploy.sh'\n            }\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c Pipeline\uc744 \ucf54\ub4dc\ub85c \uad00\ub9ac\ud558\ub294 \ubc29\uc2dd\uc744 <strong>Pipeline as Code<\/strong>\ub77c\uace0 \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkinsfile<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkinsfile\uc740 Jenkins Pipeline\uc744 \uc815\uc758\ud558\ub294 \ud30c\uc77c\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ubcf4\ud1b5 Repository\uc5d0 \ud568\uaed8 \uc800\uc7a5\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>project -&gt; src \/ tests \/ Dockerfile \/ Jenkinsfile<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 CI\/CD \uc124\uc815\ub3c4 \uc18c\uc2a4 \ucf54\ub4dc\uc640 \ud568\uaed8 \ubc84\uc804 \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git -&gt; Source Code \/ Test \/ Dockerfile \/ Jenkinsfile<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins \uc11c\ubc84\uc5d0 Pipeline \uc124\uc815\uc744 \uc218\ub3d9\uc73c\ub85c \uc791\uc131\ud558\ub294 \uac83\ubcf4\ub2e4 \ubcc0\uacbd \uc774\ub825\uc744 \uad00\ub9ac\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Declarative Pipeline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins Pipeline\uc740 \ud06c\uac8c Declarative\uc640 Scripted \ubc29\uc2dd\uc73c\ub85c \ub098\ub20c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc73c\ub85c \ucc98\uc74c \uc811\ud55c\ub2e4\uba74 Declarative Pipeline\ubd80\ud130 \uc774\ud574\ud558\ub294 \ud3b8\uc774 \uc88b\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pipeline {\n    agent any\n\n    stages {\n        stage('Build') {\n            steps {\n                sh '.\/build.sh'\n            }\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\ud574\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pipeline -&gt; agent \/ stages -&gt; stage -&gt; steps<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Stage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Stage\ub294 Pipeline\uc758 \ub17c\ub9ac\uc801\uc778 \uc791\uc5c5 \ub2e8\uc704\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Build \/ Test \/ Package \/ Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub97c \uac01\uac01 Stage\ub85c \ub9cc\ub4e4 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>stages {\n    stage('Build') {\n        steps {\n            sh '.\/build.sh'\n        }\n    }\n\n    stage('Test') {\n        steps {\n            sh '.\/test.sh'\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins UI\uc5d0\uc11c\ub3c4 Stage\ubcc4 \uacb0\uacfc\ub97c \ud655\uc778\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc5b4\ub5a4 \ub2e8\uacc4\uc5d0\uc11c \uc2e4\ud328\ud588\ub294\uc9c0 \ud30c\uc545\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Stage \uc548\uc5d0\uc11c \uc2e4\uc81c \uba85\ub839\uc744 \uc2e4\ud589\ud558\ub294 \ub2e8\uc704\uac00 Step\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>steps {\n    sh '.\/build.sh'\n    sh '.\/test.sh'\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Linux\uc5d0\uc11c\ub294 <code>sh<\/code>, Windows\uc5d0\uc11c\ub294 <code>bat<\/code> \ub4f1\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>steps {\n    bat 'build.bat'\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d Jenkins\ub294 \uac1c\ubc1c\uc790\uac00 \uae30\uc874\uc5d0 \ud130\ubbf8\ub110\uc5d0\uc11c \uc2e4\ud589\ud558\ub358 \uba85\ub839\uc744 <strong>\uc790\ub3d9\ud654\ub41c Pipeline \uc548\uc5d0\uc11c \uc2e4\ud589\ud558\ub294 \uac83<\/strong>\uc774\ub77c\uace0 \ubcfc \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\uc640 Git<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\ub294 Git\uacfc \ud568\uaed8 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Developer -&gt; Git Push -&gt; Jenkins -&gt; Checkout -&gt; Build<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uac00 Git Repository\uc5d0\uc11c \ucf54\ub4dc\ub97c \uac00\uc838\uc628 \ub2e4\uc74c Pipeline\uc744 \uc2e4\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkinsfile\uc774 Repository\uc5d0 \uc788\ub2e4\uba74<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Repository -&gt; Source Code \/ Jenkinsfile<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uac00 \ud574\ub2f9 \ud30c\uc77c\uc744 \uc77d\uc5b4\uc11c Pipeline\uc744 \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Trigger<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uac00 \uc5b8\uc81c Pipeline\uc744 \uc2e4\ud589\ud560 \uac83\uc778\uc9c0 \uacb0\uc815\ud574\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc778 \ubc29\uc2dd\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Push \/ Pull Request \/ Webhook \/ Schedule \/ Manual<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 GitHub\uc5d0\uc11c Push\uac00 \ubc1c\uc0dd\ud558\uba74 Webhook\uc744 \ud1b5\ud574 Jenkins\uc5d0 \uc774\ubca4\ud2b8\ub97c \uc804\ub2ec\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GitHub -&gt; Webhook -&gt; Jenkins -&gt; Pipeline \uc2e4\ud589<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Polling<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uac00 Git Repository\ub97c \uc8fc\uae30\uc801\uc73c\ub85c \ud655\uc778\ud574\uc11c \ubcc0\uacbd\uc0ac\ud56d\uc774 \uc788\ub294\uc9c0 \uac80\uc0ac\ud558\ub294 \ubc29\uc2dd\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins -&gt; \uc77c\uc815 \uc2dc\uac04\ub9c8\ub2e4 -&gt; Git Repository \ud655\uc778 -&gt; \ubcc0\uacbd \uc5c6\uc74c \/ \ubcc0\uacbd \uc788\uc74c -&gt; Build \uc2e4\ud589<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc Repository\uc5d0\uc11c \ubcc0\uacbd\uc774 \ubc1c\uc0dd\ud588\uc744 \ub54c \ubc14\ub85c Jenkins\uc5d0 \uc54c\ub824\uc8fc\ub294 Webhook \ubc29\uc2dd\uc774 \ub354 \ud6a8\uc728\uc801\uc778 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">CI Pipeline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 CI Pipeline\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Push -&gt; Checkout -&gt; Build -&gt; Unit Test -&gt; Integration Test -&gt; Static Analysis -&gt; Build Success<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 C++ \ud504\ub85c\uc81d\ud2b8\ub77c\uba74<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Checkout -&gt; CMake Configure -&gt; Build -&gt; Unit Test -&gt; Package<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 Pipeline\uc744 \ub9cc\ub4e4 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\ub77c\uba74<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Checkout -&gt; npm ci -&gt; npm run build -&gt; npm test -&gt; Package<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ucc98\ub7fc \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">CD Pipeline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CI\uac00 \ucf54\ub4dc\uc758 \ud488\uc9c8\uc744 \uac80\uc99d\ud55c\ub2e4\uba74 CD\ub294 \uacb0\uacfc\ubb3c\uc744 \uc2e4\uc81c \ud658\uacbd\uc5d0 \uc804\ub2ec\ud558\ub294 \uc5ed\ud560\uc744 \ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Build -&gt; Package -&gt; Artifact -&gt; Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Docker\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uba74<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Push -&gt; Jenkins -&gt; Docker Build -&gt; Docker Image -&gt; Registry Push -&gt; Server Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 \uad6c\uc870\uac00 \ub41c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\uc640 Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\ub294 Docker\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins Agent \uc790\uccb4\ub97c Docker Container\ub85c \uc2e4\ud589\ud560 \uc218\ub3c4 \uc788\uace0, Pipeline\uc5d0\uc11c Docker Image\ub97c \ube4c\ub4dc\ud560 \uc218\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins -&gt; Docker Build -&gt; Image -&gt; Registry -&gt; Production<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud658\uacbd\uc744 Docker Image\ub85c \uace0\uc815\ud558\uba74 CI \ud658\uacbd \ucc28\uc774\ub85c \ubc1c\uc0dd\ud558\ub294 \ubb38\uc81c\ub97c \uc904\uc77c \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins Plugin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uc758 \uac15\ub825\ud55c \ubd80\ubd84 \uc911 \ud558\ub098\uac00 Plugin \uc2dc\uc2a4\ud15c\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins \uc790\uccb4\uac00 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc9c1\uc811 \uad6c\ud604\ud558\uae30\ubcf4\ub2e4\ub294 Plugin\uc744 \ud1b5\ud574 \ub2e4\uc591\ud55c \uc678\ubd80 \uc2dc\uc2a4\ud15c\uacfc \uc5f0\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git \/ GitHub \/ GitLab \/ Docker \/ Kubernetes \/ AWS \/ Slack \/ SonarQube<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub4f1\uacfc \uc5f0\ub3d9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uad6c\uc870\ub97c \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins -&gt; Git Plugin \/ Docker Plugin \/ Kubernetes Plugin \/ Slack Plugin \/ Cloud Plugin<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c Jenkins\ub294 \ud2b9\uc815 \uac1c\ubc1c \ud658\uacbd\uc5d0 \ub9de\ucdb0 \uc0c1\ub2f9\ud788 \uc790\uc720\ub86d\uac8c \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc Plugin\uc774 \ub9ce\uc544\uc9c8\uc218\ub85d \uad00\ub9ac\ud574\uc57c \ud560 \uc758\uc874\uc131\ub3c4 \uc99d\uac00\ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\uc640 Kubernetes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\uaddc\ubaa8 CI\/CD \ud658\uacbd\uc5d0\uc11c\ub294 Jenkins Agent\ub97c Kubernetes\uc5d0\uc11c \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ud558\ub294 \uad6c\uc870\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins Controller -&gt; Kubernetes -&gt; Agent Pod \/ Agent Pod \/ Agent Pod<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Build \uc694\uccad\uc774 \ub4e4\uc5b4\uc624\uba74 \ud544\uc694\ud55c Agent Pod\ub97c \uc0dd\uc131\ud574\uc11c \uc791\uc5c5\uc744 \uc218\ud589\ud558\uace0 \uc791\uc5c5\uc774 \ub05d\ub098\uba74 \uc81c\uac70\ud558\ub294 \ubc29\uc2dd\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Build \uc694\uccad -&gt; Agent \uc0dd\uc131 -&gt; Build -&gt; Test -&gt; \uacb0\uacfc \uc800\uc7a5 -&gt; Agent \uc81c\uac70<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uba74 \uc791\uc5c5\ub7c9\uc5d0 \ub530\ub77c \uc2e4\ud589 \ud658\uacbd\uc744 \uc720\ub3d9\uc801\uc73c\ub85c \ud655\uc7a5\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Artifact<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Build \uacb0\uacfc\ubb3c\uc744 \ub2e4\uc74c \ub2e8\uacc4\uc5d0\uc11c \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4\uba74 Artifact\ub85c \uad00\ub9ac\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Build -&gt; game-server \/ game-client \/ installer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 \uacb0\uacfc\ubb3c\uc774 \ub9cc\ub4e4\uc5b4\uc9c8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pipeline\uc5d0\uc11c\ub294<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Build -&gt; Artifact \uc800\uc7a5 -&gt; Test -&gt; Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 \uad6c\uc870\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Artifact Repository\ub97c \ubcc4\ub3c4\ub85c \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\ub3c4 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins -&gt; Artifact -&gt; Nexus \/ Artifactory -&gt; Deploy<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins Credential<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">CI\/CD\uc5d0\uc11c\ub294 Git \uc778\uc99d\uc815\ubcf4, SSH Key, Cloud Credential, API Token \uac19\uc740 \ubbfc\uac10\ud55c \uac12\uc774 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uac12\uc744 Jenkinsfile\uc5d0 \uc9c1\uc811 \ub123\uc73c\uba74 \uc548 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \uc798\ubabb\ub41c \ubc29\uc2dd\nsh 'deploy --token=abc123'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uc5d0\uc11c\ub294 Credential\uc744 \ubcc4\ub3c4\ub85c \uad00\ub9ac\ud558\uace0 Pipeline\uc5d0\uc11c \ucc38\uc870\ud558\ub3c4\ub85d \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins -&gt; Credentials -&gt; SSH Key \/ API Token \/ Username \/ Password \/ Cloud Credential<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pipeline\uc740 Credential\uc758 \uc2e4\uc81c \uac12\uc744 \uc9c1\uc811 \ucf54\ub4dc\uc5d0 \uc791\uc131\ud558\uc9c0 \uc54a\uace0 \ud544\uc694\ud55c \uc791\uc5c5\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\uc640 GitHub Actions\uc758 \ucc28\uc774<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ub458 \ub2e4 CI\/CD\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc9c0\ub9cc \uc6b4\uc601 \ubc29\uc2dd\uc5d0\uc11c \ucc28\uc774\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\uad6c\ubd84<\/th><th>Jenkins<\/th><th>GitHub Actions<\/th><\/tr><\/thead><tbody><tr><td>\ud615\ud0dc<\/td><td>\ubcc4\ub3c4 CI\/CD \uc11c\ubc84<\/td><td>GitHub \uae30\ubc18 CI\/CD<\/td><\/tr><tr><td>\uc6b4\uc601<\/td><td>\uc9c1\uc811 \uc6b4\uc601<\/td><td>GitHub\uac00 \uae30\ubcf8 \uc778\ud504\ub77c \uc81c\uacf5<\/td><\/tr><tr><td>Pipeline<\/td><td>Jenkinsfile<\/td><td>YAML Workflow<\/td><\/tr><tr><td>\uc2e4\ud589 \ud658\uacbd<\/td><td>Agent<\/td><td>Runner<\/td><\/tr><tr><td>\ud655\uc7a5<\/td><td>Plugin<\/td><td>Action<\/td><\/tr><tr><td>GitHub \uc5f0\ub3d9<\/td><td>\ubcc4\ub3c4 \uad6c\uc131 \uac00\ub2a5<\/td><td>\ub9e4\uc6b0 \uc790\uc5f0\uc2a4\ub7ec\uc6c0<\/td><\/tr><tr><td>Self-hosted<\/td><td>\uac00\ub2a5<\/td><td>\uac00\ub2a5<\/td><\/tr><tr><td>\ucee4\uc2a4\ud130\ub9c8\uc774\uc9d5<\/td><td>\ub9e4\uc6b0 \ub192\uc74c<\/td><td>\ub192\uc74c<\/td><\/tr><tr><td>\uc720\uc9c0\ubcf4\uc218<\/td><td>\uc9c1\uc811 \uad00\ub9ac \ud544\uc694<\/td><td>\uc0c1\ub300\uc801\uc73c\ub85c \uc801\uc74c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\uad6c\uc870\uc801\uc73c\ub85c \ube44\uad50\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins -&gt; Git -&gt; Jenkins Controller -&gt; Jenkins Agent -&gt; Build \/ Test \/ Deploy<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>GitHub Actions -&gt; GitHub -&gt; Workflow -&gt; Runner -&gt; Build \/ Test \/ Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub2e4\ub9cc \ub458\uc758 \uc5ed\ud560 \uc790\uccb4\ub294 \uc0c1\ub2f9\ud788 \uacb9\uce5c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\ub97c \uc0ac\uc6a9\ud558\ub294 \uc774\uc720<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uc758 \uc7a5\uc810\uc740 <strong>\uc790\uc720\ub3c4\uc640 \uae30\uc874 \uc2dc\uc2a4\ud15c\uacfc\uc758 \ud1b5\ud569 \ub2a5\ub825<\/strong>\uc5d0 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 \ub2e4\uc74c\uacfc \uac19\uc740 \ud658\uacbd\uc5d0\uc11c \uc758\ubbf8\uac00 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uc0ac\ub0b4 \uc778\ud504\ub77c \/ \ud3d0\uc1c4\ub9dd \/ \ubcf5\uc7a1\ud55c Build \ud658\uacbd \/ \ucee4\uc2a4\ud140 CI\/CD \/ \uae30\uc874 Jenkins Pipeline \/ \ub300\uaddc\ubaa8 Plugin \uc0dd\ud0dc\uacc4 \/ \uc5ec\ub7ec \uc885\ub958\uc758 Agent<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc608\ub97c \ub4e4\uc5b4 \ud68c\uc0ac \ub0b4\ubd80\uc5d0 \uc774\ubbf8<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GitLab \/ Jenkins \/ Nexus \/ Docker Registry \/ Kubernetes \/ AWS<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uac00 \uad6c\ucd95\ub418\uc5b4 \uc788\ub2e4\uba74 Jenkins\ub97c \uc911\uc2ec\uc73c\ub85c \uc804\uccb4 Pipeline\uc744 \uc5f0\uacb0\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Jenkins\uc758 \ub2e8\uc810<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\ubc18\ub300\ub85c Jenkins\ub294 \uc9c1\uc811 \uc6b4\uc601\ud574\uc57c \ud558\ub294 \ubd80\ubd84\uc774 \ub9ce\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins Server \uad00\ub9ac \/ Plugin \uad00\ub9ac \/ Agent \uad00\ub9ac \/ Credential \uad00\ub9ac \/ \ubc31\uc5c5 \/ \ubcf4\uc548 \/ \uc5c5\ub370\uc774\ud2b8 \/ \uc7a5\uc560 \ub300\uc751<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud2b9\ud788 Plugin \uc758\uc874\uc131\uc774 \ub9ce\uc544\uc9c0\uba74 Jenkins \uc790\uccb4\uac00 \ud558\ub098\uc758 \uc6b4\uc601 \uc2dc\uc2a4\ud15c\uc774 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Jenkins -&gt; Plugin A \/ Plugin B \/ Plugin C \/ Plugin D -&gt; Dependency \/ Version \/ Compatibility<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ub2e8\uc21c\ud55c GitHub \ud504\ub85c\uc81d\ud2b8\ub77c\uba74 GitHub Actions\uac00 \ub354 \ud3b8\ud55c \uacbd\uc6b0\ub3c4 \ub9ce\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc2e4\ubb34\uc5d0\uc11c Jenkins\ub97c \ubc14\ub77c\ubcf4\ub294 \ubc29\ubc95<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\ub97c \ub2e8\uc21c\ud788 &#8220;\ube4c\ub4dc \uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8&#8221;\uc774\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ubc94\uc704\uac00 \ub108\ubb34 \uc881\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\uc81c\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 Pipeline\uc744 \uad00\ub9ac\ud558\ub294 <strong>\uc790\ub3d9\ud654 Orchestrator<\/strong>\uc5d0 \uac00\uae5d\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git -&gt; Jenkins -&gt; Checkout -&gt; Build -&gt; Test -&gt; Static Analysis -&gt; Package -&gt; Artifact Repository -&gt; Docker -&gt; Kubernetes -&gt; Cloud -&gt; Production<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins \uc790\uccb4\uac00 \ubaa8\ub4e0 \uc791\uc5c5\uc744 \uc218\ud589\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \uac01 \uac1c\ubc1c \ub3c4\uad6c\ub97c \uc5f0\uacb0\ud558\uace0 <strong>\uc815\ud574\uc9c4 \uc21c\uc11c\uc640 \uc870\uac74\uc5d0 \ub530\ub77c \uc791\uc5c5\uc744 \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc5ed\ud560<\/strong>\uc744 \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc2e4\ubb34 Jenkins Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \ud300 \uac1c\ubc1c \ud658\uacbd\uc744 \ud558\ub098\ub85c \uc5f0\uacb0\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\uac1c\ubc1c\uc790 -&gt; Feature Branch -&gt; Commit -&gt; Push -&gt; Pull Request -&gt; Jenkins -&gt; Checkout \/ Build \/ Test \/ Lint -&gt; Code Review -&gt; Merge -&gt; main -&gt; Jenkins -&gt; Build \/ Package \/ Docker Build \/ Registry Push -&gt; Deploy -&gt; Production<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc774 \uad6c\uc870\uc5d0\uc11c Jenkins\ub294 <strong>\ucf54\ub4dc\uac00 \ubcc0\uacbd\ub41c \uc774\ud6c4 \uc2e4\uc81c \uc11c\ube44\uc2a4\uc5d0 \ubc18\uc601\ub420 \ub54c\uae4c\uc9c0\uc758 \uc790\ub3d9\ud654 \ud750\ub984\uc744 \uc2e4\ud589\ud558\ub294 \uc5ed\ud560<\/strong>\uc744 \ud55c\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\uc815\ub9ac<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Jenkins\uc758 \ud575\uc2ec \uac1c\ub150\uc740 \ub9ce\uc9c0 \uc54a\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Controller -&gt; Pipeline\uc744 \uad00\ub9ac\n\nAgent -&gt; \uc2e4\uc81c \uc791\uc5c5\uc744 \uc2e4\ud589\n\nPipeline -&gt; CI\/CD Workflow\n\nJenkinsfile -&gt; Pipeline\uc744 \ucf54\ub4dc\ub85c \uc815\uc758\n\nStage -&gt; Pipeline\uc758 \uc791\uc5c5 \ub2e8\uacc4\n\nStep -&gt; \uc2e4\uc81c \uc2e4\ud589 \uc791\uc5c5\n\nPlugin -&gt; \uc678\ubd80 \uc2dc\uc2a4\ud15c\uacfc \uc5f0\uacb0\n\nCredential -&gt; \uc778\uc99d\uc815\ubcf4 \uad00\ub9ac\n\nArtifact -&gt; Build \uacb0\uacfc\ubb3c \uad00\ub9ac<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc804\uccb4 \uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc774\ud574\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Git Repository -&gt; Jenkins Controller -&gt; Jenkins Agent -&gt; Build \/ Test \/ Package \/ Deploy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 Jenkins\uc758 \ubcf8\uc9c8\uc740 <strong>\uac1c\ubc1c\uc790\uac00 \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud558\ub358 Build, Test, Package, Deploy \uacfc\uc815\uc744 Pipeline\uc73c\ub85c \uc815\uc758\ud558\uace0 \uc790\ub3d9 \uc2e4\ud589\ud558\ub294 \uac83<\/strong>\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub Actions\uc640 \ube44\uad50\ud558\uba74 GitHub Actions\ub294 GitHub\uc5d0 \ubd99\uc5b4 \uc788\ub294 \uad00\ub9ac\ud615 CI\/CD\uc5d0 \uac00\uae5d\uace0, Jenkins\ub294 \uc9c1\uc811 \uc11c\ubc84\uc640 Agent\ub97c \uc6b4\uc601\ud558\uba74\uc11c \ud544\uc694\ud55c \ub3c4\uad6c\ub4e4\uc744 \uc870\ud569\ud558\ub294 <strong>\ubc94\uc6a9\uc801\uc778 CI\/CD \uc790\ub3d9\ud654 \uc11c\ubc84<\/strong>\uc5d0 \uac00\uae5d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc2e4\ubb34\uc5d0\uc11c\ub294 \ub458 \uc911 \ud558\ub098\uac00 \uc808\ub300\uc801\uc73c\ub85c \uc6b0\uc6d4\ud558\ub2e4\uae30\ubcf4\ub2e4 <strong>\ud604\uc7ac \uc870\uc9c1\uc758 Repository, \uc778\ud504\ub77c, \ubcf4\uc548 \uc815\ucc45, Build \ud658\uacbd, \uc6b4\uc601 \ubc29\uc2dd\uc5d0 \ub9de\ub294 \ucabd\uc744 \uc120\ud0dd\ud558\ub294 \ubb38\uc81c<\/strong>\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jenkins\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \uacfc\uc815\uc5d0\uc11c \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \ube4c\ub4dc, \ud14c\uc2a4\ud2b8, \ubc30\ud3ec \uc791\uc5c5\uc744 \uc790\ub3d9\ud654\ud558\ub294 CI\/CD \uc11c\ubc84\ub2e4. GitHub Actions\uc640 \ube44\uc2b7\ud55c \uc5ed\ud560\uc744 \ud558\uc9c0\ub9cc \uad6c\uc870\uac00 \uc870\uae08 \ub2e4\ub974\ub2e4. GitHub Actions\ub294 GitHub Repository\uc640 \uac15\ud558\uac8c \uacb0\ud569\ub41c \uc790\ub3d9\ud654 \ud50c\ub7ab\ud3fc\uc774\uace0, Jenkins\ub294 \ubcc4\ub3c4\uc758 \uc11c\ubc84\ub97c \uc124\uce58\ud558\uace0 \uc9c1\uc811 \uc6b4\uc601\ud558\uba74\uc11c \ub2e4\uc591\ud55c \uac1c\ubc1c \ud658\uacbd\uacfc \ub3c4\uad6c\ub97c \uc5f0\uacb0\ud558\ub294 \uc790\ub3d9\ud654 \uc11c\ubc84\uc5d0 \uac00\uae5d\ub2e4. Jenkins\ub294 \uc624\ub798\uc804\ubd80\ud130 \uc0ac\uc6a9\ub418\uc5b4 \uc628 CI\/CD \ub3c4\uad6c\ub77c\uc11c \ub300\uaddc\ubaa8 \uc870\uc9c1\uc774\ub098 \uc0ac\ub0b4 \uc778\ud504\ub77c\uc5d0\uc11c \uc5ec\uc804\ud788 \ub9ce\uc774 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52],"tags":[],"class_list":["post-1726","post","type-post","status-publish","format-standard","hentry","category-tools"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1726"}],"version-history":[{"count":3,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1726\/revisions"}],"predecessor-version":[{"id":2004,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/1726\/revisions\/2004"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}