{"id":683837,"date":"2026-02-26T12:53:12","date_gmt":"2026-02-26T11:53:12","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=teamcity&#038;p=683837"},"modified":"2026-02-26T12:55:18","modified_gmt":"2026-02-26T11:55:18","slug":"the-jenkins-migration-planning-kit","status":"publish","type":"teamcity","link":"https:\/\/blog.jetbrains.com\/ko\/teamcity\/2026\/02\/the-jenkins-migration-planning-kit\/","title":{"rendered":"Jenkins \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacc4\ud68d \ud0a4\ud2b8"},"content":{"rendered":"\n<p><em>\uc774 \uae00\uc740 <em>draft.dev<\/em>\uc758 <a href=\"https:\/\/portal.draft.dev\/writers\/rec4Io5U8JlZaFFy2\" data-type=\"link\" data-id=\"https:\/\/portal.draft.dev\/writers\/rec4Io5U8JlZaFFy2\" target=\"_blank\" rel=\"noopener\">Cameron Pavey<\/a>\uac00 \uc791\uc131\ud588\uc2b5\ub2c8\ub2e4.<\/em><\/p>\n\n\n\n<p>Jenkins\ub294 10\ub144\uc774 \ub118\ub294 \uae30\uac04 \ub3d9\uc548 \uac1c\ubc1c\uc790 \ucee4\ubba4\ub2c8\ud2f0\ub97c \ud6cc\ub96d\ud558\uac8c \uc9c0\uc6d0\ud574 \uc654\uc9c0\ub9cc \ud604\uc7ac\uc758 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ud658\uacbd\uacfc\ub294 \ub2e4\ub978 \uc2dc\ub300\ub97c \uace0\ub824\ud574 \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud50c\ub7ec\uadf8\uc778 \ud638\ud658\uc131 \ubb38\uc81c\uc640 \ub290\ub9b0 \ube4c\ub4dc, \ubd88\uc548\uc815\ud55c \uad6c\uc131\uc73c\ub85c \uc778\ud574 \ud53c\ub85c\uac10\uc744 \ub290\ub07c\ub294 \uac1c\ubc1c\uc790\ub294 \uc0c8\ub85c\uc6b4 \ub300\uc548\uc744 \uac80\ud1a0\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud558\uc9c0\ub9cc \uc870\uc9c1\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \uc804\ud658\uc744 \ub9de\uc774\ud560 \uc900\ube44\uac00 \ub418\uc5b4 \uc788\uc744\uae4c\uc694? \uc2e4\uc81c\ub85c \uc5b4\ub5a4 \uc791\uc5c5\uc774 \ud544\uc694\ud558\uac8c \ub420\uae4c\uc694? \uadf8\ub9ac\uace0 \ucd5c\uc2e0 CI\/CD \uc194\ub8e8\uc158\uc758 \uc774\uc810\uc744 \uc5b4\ub5bb\uac8c \ub9ac\ub354\uc2ed\uc5d0 \uc804\ub2ec\ud574 \ub3d9\uc758\ub97c \uc5bb\uc744 \uc218 \uc788\uc744\uae4c\uc694?<\/p>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacc4\ud68d \ud0a4\ud2b8\ub97c \uc774\uc6a9\ud558\uba74 \uc774\ub7ec\ud55c \uc9c8\ubb38\uc5d0 \ub300\ud55c \ub2f5\uc744 \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<ul>\n<li><strong>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc900\ube44\ub3c4 \ud3c9\uac00<\/strong>\ub97c \ud1b5\ud574 \uc870\uc9c1\uc758 \uc900\ube44 \uc0c1\ud0dc\ub97c \uc810\uc218\ud654\ud558\uace0, \ud574\ub2f9 \uc870\uc9c1\uc774 Jenkins \uc0ac\uc6a9\uc73c\ub85c \ud604\uc7ac \uacaa\uace0 \uc788\ub294 \uace0\ucda9\uacfc \ube44\uad50\ud558\uc5ec \uc774\uc0c1\uc801 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \ub300\uc0c1\uc778\uc9c0, \uba3c\uc800 \uae30\ubc18 \ubb38\uc81c\ub97c \ud574\uacb0\ud574\uc57c \ud558\ub294\uc9c0 \ub610\ub294 \ub2e4\ub978 \uc6b0\uc120 \uc21c\uc704\uc5d0 \uc9d1\uc911\ud574\uc57c \ud558\ub294\uc9c0 \ud310\ub2e8\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li>Jenkins \ud328\ud134\uc774 TeamCity\uc640 \uc5b4\ub5bb\uac8c \ube44\uad50\ub418\ub294\uc9c0 \ud655\uc778\ud558\uace0, <strong>\ud544\uc694\ud55c \ub178\ub825\uc744 \ud3c9\uac00\ud558\uc5ec \ud6a8\uacfc\uc801\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uacc4\ud68d<\/strong>\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\uc548\uc804\ud55c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacc4\ud68d<\/strong>\uc740 \ud0d0\uc0c9 \ubc0f \ud3c9\uac00, \ud30c\uc77c\ub7ff \uc124\uc815, \uc810\uc9c4\uc801 \ub9c8\uc774\uadf8\ub808\uc774\uc158, \ucd5c\uc801\ud654, \uc804\uccb4 \uc804\ud658\uc73c\ub85c \uc774\uc5b4\uc9c0\ub294 \uc131\uacf5\uc801 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 5\ub2e8\uacc4\ub97c \uc548\ub0b4\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \uc774\uc810\uc744 \uacbd\uc601\uc9c4\uc5d0\uac8c \uc804\ub2ec\ud558\ub294 \ubc29\ubc95<\/strong>\uc5d0 \ub300\ud55c \ud15c\ud50c\ub9bf\uacfc \uac00\uc774\ub4dc\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p>\ubcf8 \uac00\uc774\ub4dc\uc5d0\ub294 \uc0c1\uc138\ud55c \ub0b4\uc6a9\uc774 \ub2f4\uaca8 \uc788\uc2b5\ub2c8\ub2e4. \uc0c1\ub2e8\uc758 \ud558\uc774\ud37c\ub9c1\ud06c\ub97c \uc774\uc6a9\ud558\uba74 \uc9c0\uae08 \ubc14\ub85c \ud655\uc778\uc774 \ud544\uc694\ud55c \uc139\uc158\uc73c\ub85c \ube60\ub974\uac8c \uc774\ub3d9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc900\ube44 \uac00\uc774\ub4dc: \ud300\uc758 \uc900\ube44 \uc0c1\ud0dc \uc9c4\ub2e8<\/strong><\/h2>\n\n\n\n<p>\uc131\uacf5\uc801\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc704\ud574 \uac00\uc7a5 \uba3c\uc800 \ud560 \uc77c\uc740 \ud604\uc7ac \ud300\uc758 CI\/CD \uc219\ub828\ub3c4\uc640 \ubcc0\ud654 \uc218\uc6a9 \ub2a5\ub825\uc744 \uac1d\uad00\uc801\uc73c\ub85c \uc810\uac80\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\uc5b4\uc9c0\ub294 \uc790\uac00 \uc9c4\ub2e8 \ud56d\ubaa9\uc744 \ud1b5\ud574 \uc9c0\uae08\uc774 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \uc801\uae30\uc778\uc9c0 \ud655\uc778\ud558\uace0, \uc6b0\uc120\uc801\uc73c\ub85c \uac1c\uc120\ud574\uc57c \ud560 \ud3ec\uc778\ud2b8\ub97c \uac80\ud1a0\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\uc870\uc9c1 \uc5ed\ub7c9 \uc9c4\ub2e8<\/strong><\/h3>\n\n\n\n<p>\uba3c\uc800 \ud604\uc7ac \uc870\uc9c1 \ub0b4\uc5d0\uc11c Jenkins \uc778\ud504\ub77c \uc6b4\uc601\uacfc \ud30c\uc774\ud504\ub77c\uc778 \uac1c\ubc1c\uc774 \uc5b4\ub5a4 \ubc29\uc2dd\uc73c\ub85c \uc774\ub8e8\uc5b4\uc9c0\uace0 \uc788\ub294\uc9c0 \uc810\uac80\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>Jenkins \uad00\ub9ac \uc8fc\uccb4\uac00 \uc911\uc559 \uc870\uc9c1\uc778\uac00\uc694, \uc544\ub2c8\uba74 \ud300\ubcc4\ub85c \ubd84\uc0b0\ud615 \uc6b4\uc601 \uc911\uc778\uac00\uc694?<\/em> \uc778\ud504\ub77c\ub97c \uc911\uc559\uc5d0\uc11c \uad00\ub9ac\ud560\uc218\ub85d \ud45c\uc900\ud654 \uc218\uc900\uc774 \ub192\uc544\uc9c0\uba70, \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacfc\uc815\uc5d0\uc11c\uc758 \uc804\uc0ac\uc801 \uc870\uc728 \ub610\ud55c \uc218\uc6d4\ud574\uc9d1\ub2c8\ub2e4. \ubd84\uc0b0\ud615 \uad00\ub9ac \ubc29\uc2dd\uc740 \ub354 \ub9ce\uc740 \uacc4\ud68d\uc774 \ud544\uc694\ud560 \uc218 \uc788\uc9c0\ub9cc, \ud300\uc774 \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \ub300\ud574 \ub354 \uac15\ud55c \uc18c\uc720\uad8c\uc744 \uac16\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ud604\uc7ac \uc870\uc9c1 \ub0b4\uc5d0 \uc804\uc0ac\uc801\uc73c\ub85c \ud1b5\uc6a9\ub418\ub294 \ud30c\uc774\ud504\ub77c\uc778 \ud45c\uc900 \uac00\uc774\ub4dc\uac00 \ub9c8\ub828\ub418\uc5b4 \uc788\ub098\uc694?<\/em> \uc77c\uad00\ub41c \uc124\uacc4 \ud328\ud134\uacfc \uacf5\uc720 \ub77c\uc774\ube0c\ub7ec\ub9ac, \ubb38\uc11c\ud654\ub41c \ud45c\uc900 \ud504\ub85c\uc138\uc2a4\ub97c \uc774\ubbf8 \uac16\ucd94\uace0 \uc788\ub2e4\uba74 \uc870\uc9c1\uc758 \ub09c\uc81c\ub97c \uc0c1\ub2f9 \ubd80\ubd84 \ud574\uacb0\ud55c \uc0c1\ud0dc\uc774\ubbc0\ub85c \ud6e8\uc52c \uc218\uc6d4\ud558\uac8c \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc9c4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud504\ub85c\uc81d\ud2b8\ub9c8\ub2e4 \ud30c\uc774\ud504\ub77c\uc778 \ubc29\uc2dd\uc774 \ud06c\uac8c \ub2e4\ub974\ub2e4\uba74, \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \uc811\uadfc \ubc29\uc2dd\uc744 \ud45c\uc900\ud654\ud558\ub294 \uac83\uc744 \uace0\ub824\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><em>\ube4c\ub4dc\uac00 \uc548\uc815\uc801\uc778\uac00\uc694, \uc544\ub2c8\uba74 \uac04\ud5d0\uc801\uc778 \uc2e4\ud328\uac00 \uc790\uc8fc \ubc1c\uc0dd\ud558\ub098\uc694?<\/em> \uc774 \uc9c8\ubb38\uc740 \uae30\uc220 \ubd80\ucc44\uc640 \ud300\uc758 \uc2e4\ubb34 \uad00\ud589\uc744 \ubaa8\ub450 \ud655\uc778\ud569\ub2c8\ub2e4. \uc548\uc815\uc801 \ube4c\ub4dc\ub294 \uc6b0\uc218\ud55c \ud14c\uc2a4\ud2b8 \uad00\ud589\uacfc \uc548\uc815\uc801 \uc778\ud504\ub77c\ub97c \uc758\ubbf8\ud558\uc9c0\ub9cc, \ube48\ubc88\ud55c \ubd88\uc548\uc815\uc131\uc740 \ub9c8\uc774\uadf8\ub808\uc774\uc158\ub9cc\uc73c\ub85c\ub294 \ud574\uacb0\ud560 \uc218 \uc5c6\ub294 \uadfc\ubcf8\uc801 \ubb38\uc81c \ub54c\ubb38\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\uae30\uc220 \uc778\ubca4\ud1a0\ub9ac \uc9c8\ubb38<\/strong><\/h3>\n\n\n\n<p>\uc131\uacf5\uc801 \uacc4\ud68d \uc218\ub9bd\uc744 \uc704\ud574 \ud604\uc7ac Jenkins \uc0ac\uc6a9 \ud604\ud669\uc744 \ud30c\uc545\ud558\ub294 \uac83\uc740 \ud544\uc218\uc801\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ubaa8\ub4e0 \uc800\uc7a5\uc18c\uc5d0\uc11c \uc720\uc9c0 \uad00\ub9ac \uc911\uc778 Jenkinsfile\uc740 \uba87 \uac1c\uc778\uac00\uc694?<\/em> \uc774\ub97c \ud1b5\ud574 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc5d0 \ud22c\uc785\ub420 \uc791\uc5c5 \uaddc\ubaa8\ub97c \uac00\ub2a0\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubcc0\ud658\uc774 \ud544\uc694\ud55c \uc120\uc5b8\uc801 \ud30c\uc774\ud504\ub77c\uc778\uacfc \ud504\ub9ac\uc2a4\ud0c0\uc77c \uc791\uc5c5\uc744 \ubaa8\ub450 \ud655\uc778\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><em>\ud604\uc7ac \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc5b4\ub5a4 Jenkins \ud50c\ub7ec\uadf8\uc778\uc744 \uc8fc\ub85c \uc0ac\uc6a9\ud558\uc2dc\ub098\uc694?<\/em> \ube4c\ub4dc \ub3c4\uad6c, \ubc30\ud3ec \ud1b5\ud569, \uc54c\ub9bc \uc2dc\uc2a4\ud15c \ubc0f \ubcf4\uace0 \ud50c\ub7ec\uadf8\uc778\uc744 \ud3ec\ud568\ud558\uc5ec \ud3ec\uad04\uc801 \ubaa9\ub85d\uc744 \uc791\uc131\ud574 \ubcf4\uc138\uc694. \uc8fc\uc694 \ud50c\ub7ec\uadf8\uc778\uc5d0 \ub300\uc751\ud558\ub294 TeamCity \uae30\ub2a5\uc744 \ud655\uc778\ud558\uace0, \ub9de\ucda4\ud615 \uac1c\ubc1c\uc774\ub098 \uc6cc\ud06c\ud50c\ub85c \ubcc0\uacbd\uc774 \ud544\uc694\ud55c \ud56d\ubaa9\uc774 \uc788\ub294\uc9c0 \ud30c\uc545\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><em>\ub9de\ucda4\ud615 \ud1b5\ud569, \uc2a4\ud06c\ub9bd\ud2b8 \ub610\ub294 Jenkins \ud655\uc7a5 \uae30\ub2a5\uc744 \uc0ac\uc6a9 \uc911\uc774\uc2e0\uac00\uc694?<\/em> \ub9de\ucda4\ud615 \ucf54\ub4dc\ub294 TeamCity\ub85c \uc790\ub3d9 \ubcc0\ud658\ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc2dc \uac00\uc7a5 \ud070 \uc704\ud5d8\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac01 \ud1b5\ud569 \uae30\ub2a5\uc740 \uc11c\ub85c \ub2e4\ub978 API\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc644\uc804\ud788 \ub2e4\uc2dc \uad6c\ucd95\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub54c \uae30\uc874 \ube44\uc988\ub2c8\uc2a4 \uc694\uad6c \uc0ac\ud56d\uc774\ub098 \uc885\uc18d\uc131\uc5d0 \ub300\ud55c \uba85\ud655\ud55c \ubb38\uc11c\ub294 \uc5c6\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. Jenkins API\uc640 \uc9c1\uc811 \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ub9de\ucda4\ud615 \ud50c\ub7ec\uadf8\uc778, \uacf5\uc720 \ub77c\uc774\ube0c\ub7ec\ub9ac \ub610\ub294 \uc678\ubd80 \ud1b5\ud569 \uae30\ub2a5\uc744 \ubaa8\ub450 \ubb38\uc11c\ud654\ud574 \ub450\uc138\uc694.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>CI\/CD \ud398\uc778 \ud3ec\uc778\ud2b8 \ubd84\uc11d<\/strong><\/h3>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \ud1b5\ud574 \ud300\uc774 \ud574\uacb0\ud558\uace0\uc790 \ud558\ub294 \uad6c\uccb4\uc801\uc778 \ubb38\uc81c\uac00 \ubb34\uc5c7\uc778\uc9c0 \uace0\ubbfc\ud558\uace0 \ud30c\uc545\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><em>\ube4c\ub4dc \uc18d\ub3c4\uac00 \ub290\ub9ac\uac70\ub098 \ubcd1\ubaa9 \ud604\uc0c1\uc744 \uc790\uc8fc \uacaa\uace0 \uacc4\uc2e0\uac00\uc694?<\/em> \uc77c\ubc18\uc801\uc73c\ub85c \ub290\ub9b0 \ube4c\ub4dc \uc5d0\uc774\uc804\ud2b8, \ube44\ud6a8\uc728\uc801 \uc544\ud2f0\ud329\ud2b8 \uad00\ub9ac, \ubd80\uc871\ud55c \ubcd1\ub82c \ucc98\ub9ac, \ud53c\ud06c \uc2dc\uac04\ub300\uc758 \ub9ac\uc18c\uc2a4 \uacbd\ud569 \ub4f1\uc758 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uba85\ud655\ud55c \ubaa9\ud45c\ub97c \uc124\uc815\ud558\ub294 \uac83\uc740 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacfc\uc815 \uc804\ubc18\uc758 \uc758\uc0ac \uacb0\uc815\uc5d0 \uc911\uc694\ud55c \uc9c0\uce68\uc774 \ub418\ubbc0\ub85c \ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ub514\ubc84\uadf8 \uacfc\uc815\uc5d0\uc11c \uc790\uc8fc \uc5b4\ub824\uc6c0\uc744 \uacaa\uace0 \uacc4\uc2e0\uac00\uc694?<\/em> \ud300\uc774 \ud30c\uc774\ud504\ub77c\uc778 \uc2e4\ud328\ub97c \uc870\uc0ac\ud558\uac70\ub098 \ub2e4\uc6b4\ub41c \ube4c\ub4dc \ud658\uacbd \ubb38\uc81c\ub97c \ucd94\uc801\ud558\uac70\ub098 \ub85c\uceec\uacfc CI \ud658\uacbd\uc5d0\uc11c \ud14c\uc2a4\ud2b8 \uacb0\uacfc\uac00 \uc65c \ub2e4\ub978\uc9c0 \uc774\ud574\ud558\ub294 \ub370 \ud22c\uc5ec\ub418\ub294 \uc2dc\uac04\uc744 \uace0\ub824\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><em>\ud604\uc7ac \ud658\uacbd\uc744 \uc81c\ud55c\ud558\ub294 \ud655\uc7a5\uc131 \ubb38\uc81c\ub97c \uacaa\uace0 \uacc4\uc2e0\uac00\uc694?<\/em> \ubc14\uc05c \uc2dc\uac04\ub300\uc5d0 \ubc1c\uc0dd\ud558\ub294 \ube4c\ub4dc \ub300\uae30\uc5f4\uc774\ub098 \uc2e0\uaddc \ud504\ub85c\uc81d\ud2b8 \ucd94\uac00\uc758 \uc5b4\ub824\uc6c0 \ub610\ub294 \ud300 \uaddc\ubaa8\ubcf4\ub2e4 \ube60\ub974\uac8c \uc99d\uac00\ud558\ub294 \uc778\ud504\ub77c \ube44\uc6a9 \ub4f1\uc758 \uc9d5\ud6c4\uac00 \uc788\ub294\uc9c0 \ud655\uc778\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><em>\ud30c\uc774\ud504\ub77c\uc778 \ub85c\uc9c1\uacfc \uc778\ud504\ub77c\ub97c \ub354 \ud6a8\uc728\uc801\uc73c\ub85c \uc81c\uc5b4\ud558\uace0 \uc2f6\uc73c\uc2e0\uac00\uc694?<\/em> Jenkins\uc758 \ud55c\uacc4\ub97c \uadf9\ubcf5\ud558\uae30 \uc704\ud574 \ubc29\ubc95\uc744 \ucc3e\uac70\ub098 \ub9de\ucda4\ud615 \uc194\ub8e8\uc158\uc744 \ub9cc\ub4dc\ub294 \ub370 \ub9ce\uc740 \uc2dc\uac04\uc744 \ud5c8\ube44\ud558\uace0 \uc788\ub2e4\uba74, TeamCity\uc758 \uc720\uc5f0\ud55c \uc544\ud0a4\ud14d\ucc98\ub97c \ud1b5\ud574 \ud070 \ub3c4\uc6c0\uc744 \ubc1b\uc73c\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ubd88\uc548\uc815\ud558\uac70\ub098 \ub290\ub9b0 \ud14c\uc2a4\ud2b8\uc5d0 \ub300\ud574 \ub354 \uba85\ud655\ud55c \uac00\uc2dc\uc131\uc774 \ud544\uc694\ud558\uc2e0\uac00\uc694?<\/em> \ud300\uc6d0\ub4e4\uc774 \uc2e0\ub8b0\ud560 \uc218 \uc5c6\ub294 \ud14c\uc2a4\ud2b8\ub97c \uc2dd\ubcc4\ud558\uac70\ub098 \uc131\ub2a5 \ubcd1\ubaa9 \ud604\uc0c1\uc744 \ud30c\uc545\ud558\ub294 \ub370 \uc5b4\ub824\uc6c0\uc744 \uacaa\uace0 \uc788\ub2e4\uba74, TeamCity\uc5d0\uc11c <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/teamcity\/ci-cd-guide\/automated-testing\/\" target=\"_blank\" rel=\"noopener\">\uae30\ubcf8 \uc81c\uacf5\ud558\ub294 \ud14c\uc2a4\ud2b8 \uc778\ud154\ub9ac\uc804\uc2a4<\/a> \uae30\ub2a5\uc774 \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\uc81c\ud488 \uac1c\ubc1c\ubcf4\ub2e4 CI \uc778\ud504\ub77c \uc720\uc9c0 \uad00\ub9ac\uc5d0 \ub354 \ub9ce\uc740 \uc2dc\uac04\uc744 \uc4f0\uace0 \uacc4\uc2e0\uac00\uc694?<\/em> \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \ud50c\ub7ab\ud3fc\uc774 \uc0dd\uc0b0\uc131\uc744 \ub192\uc5ec\uc8fc\ub294 \ub3c4\uad6c\uac00 \uc544\ub2c8\ub77c \uc624\ud788\ub824 \uc5c5\ubb34 \ud750\ub984\uc744 \ubc29\ud574\ud558\ub294 \uc7a5\uc560\ubb3c\uc774 \ub418\uace0 \uc788\ub2e4\ub294 \uba85\ubc31\ud55c \uc2e0\ud638\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \ud3c9\uac00 \uacb0\uacfc \ud574\uc11d<\/strong><\/h3>\n\n\n\n<p>\uc774\uc81c \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc704\ud55c \ud300\uc758 \uc900\ube44 \uc0c1\ud0dc\ub97c \ucd5c\uc885\uc801\uc73c\ub85c \ud655\uc778\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ubcf8 \uc900\ube44 \uc0c1\ud0dc \uccb4\ud06c\ub9ac\uc2a4\ud2b8\uc758 \uc778\uc1c4\uc6a9 \ubc84\uc804\uc740 <a href=\"https:\/\/docs.google.com\/document\/d\/1i6jv7uMX4-KzTkLSM3xBQEC4hrwpzzLoPyFpxxxKGmA\/edit?usp=sharing\" target=\"_blank\" rel=\"noopener\">\uc9c0\uc6d0 \ud30c\uc77c<\/a>\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uba3c\uc800, \ub2e4\uc74c \ub450 \uac00\uc9c0 \uc810\uc218\ub97c \uacc4\uc0b0\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><strong>\uc900\ube44\ub3c4 \uc810\uc218:<\/strong><\/p>\n\n\n\n<p>\ub2e4\uc74c \ud56d\ubaa9 \uc911 &#8216;\uc608&#8217;\ub77c\uace0 \ub2f5\ud55c \ud56d\ubaa9\uc5d0 1\uc810\uc744 \ub9e4\uae30\uc138\uc694.<\/p>\n\n\n\n<ul>\n<li>\uc911\uc559 \uc9d1\uc911\uc2dd Jenkins \uad00\ub9ac \uccb4\uacc4<\/li>\n\n\n\n<li>\ud300 \uc804\uccb4\uc5d0 \uc801\uc6a9\ub41c \ud45c\uc900\ud654\ub41c \ud30c\uc774\ud504\ub77c\uc778 \uad00\ud589<\/li>\n\n\n\n<li>\uac04\ud5d0\uc801 \uc2e4\ud328\uac00 \uac70\uc758 \uc5c6\ub294 \uc548\uc815\uc801\uc778 \ube4c\ub4dc \uc0c1\ud0dc<\/li>\n\n\n\n<li>Jenkinsfile \ubc0f \ud50c\ub7ec\uadf8\uc778 \ud604\ud669\uc5d0 \ub300\ud55c \uba85\ud655\ud55c \uc778\ubca4\ud1a0\ub9ac \ubcf4\uc720<\/li>\n\n\n\n<li>\ub9de\ucda4\ud615 \ud1b5\ud569 \uae30\ub2a5 \ubc0f \uc885\uc18d\uc131\uc5d0 \ub300\ud55c \ubb38\uc11c\ud654 \uc644\ub8cc<\/li>\n<\/ul>\n\n\n\n<p><strong>\ud53c\ub85c\ub3c4 \uc810\uc218:<\/strong><\/p>\n\n\n\n<p>\ub2e4\uc74c \ud56d\ubaa9 \uc911 &#8216;\uc608&#8217;\ub77c\uace0 \ub2f5\ud55c \ud56d\ubaa9\uc5d0 1\uc810\uc744 \ub9e4\uae30\uc138\uc694.<\/p>\n\n\n\n<ul>\n<li>\ube4c\ub4dc \uc18d\ub3c4 \uc800\ud558 \ub610\ub294 \ube48\ubc88\ud55c \ubcd1\ubaa9 \ud604\uc0c1 \ubc1c\uc0dd<\/li>\n\n\n\n<li>\ud300\uc758 \uc2dc\uac04\uc744 \uc7a1\uc544\uba39\ub294 \uc7a6\uc740 \ub514\ubc84\uadf8 \ubb38\uc81c<\/li>\n\n\n\n<li>\uc131\uc7a5\uc744 \uac00\ub85c\ub9c9\ub294 \ud655\uc7a5\uc131 \ubb38\uc81c<\/li>\n\n\n\n<li>\ub354 \ub9ce\uc740 \ud30c\uc774\ud504\ub77c\uc778 \uc81c\uc5b4\uc640 \uc720\uc5f0\uc131\uc758 \ud544\uc694\uc131<\/li>\n\n\n\n<li>\ud14c\uc2a4\ud2b8 \uc131\ub2a5\uacfc \uc2e4\ud328\uc5d0 \ub300\ud55c \uac00\uc2dc\uc131 \ubd80\uc871<\/li>\n\n\n\n<li>\ube4c\ub4dc\ubcf4\ub2e4 \uc720\uc9c0 \uad00\ub9ac\uc5d0 \ub354 \ub9ce\uc740 \uc2dc\uac04 \uc18c\uc694<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \uad8c\uc7a5 \uc0ac\ud56d<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"1024\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2026\/01\/1a36a4e6-ddee-44b0-a673-491d946a8171.png\" alt=\"\" class=\"wp-image-677067\"\/><\/figure>\n\n\n\n<p><strong>\ub0ae\uc740 \uc900\ube44\ub3c4(0~3\uc810) \ubc0f \ub192\uc740 \ud53c\ub85c\ub3c4(4~6\uc810):<\/strong> \uae30\ucd08\uc801\uc778 \ubb38\uc81c\ubd80\ud130 \ucc28\uadfc\ucc28\uadfc \ud574\uacb0\ud574 \ub098\uac00\uc57c \ud569\ub2c8\ub2e4. \uc774 \uacfc\uc815\uc5d0\uc11c TeamCity\uc758 \uac15\ub825\ud55c \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud558\uba74 \uc815\ub9ac\uc5d0 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4. \uc870\uc9c1 \ub0b4\ubd80\uc758 \uac1c\uc120 \uc791\uc5c5\uacfc \uc18c\uaddc\ubaa8 \ud30c\uc77c\ub7ff \ud504\ub85c\uc81d\ud2b8\ubd80\ud130 \uc2dc\uc791\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><strong>\ub0ae\uc740 \uc900\ube44\ub3c4(0~3\uc810) + \ub0ae\uc740 \ud53c\ub85c\ub3c4(0~3\uc810):<\/strong> \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \uc6b0\uc120\uc21c\uc704\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uba3c\uc800 \uac1c\ubc1c \ud504\ub85c\uc138\uc2a4\uc758 \uac1c\uc120\uc5d0 \uc9d1\uc911\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>TeamCity\ub97c \uc120\ud0dd\ud574\uc57c \ud558\ub294 \uc774\uc720<\/strong><\/h1>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc2dc\uae30\ub97c \ud30c\uc545\ud558\ub294 \uac83\ub9cc\uc73c\ub85c\ub294 \ucda9\ubd84\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud560 \ub300\uc0c1 \ud50c\ub7ab\ud3fc\uc774 \ubbff\uc744 \ub9cc\ud574\uc57c \ud569\ub2c8\ub2e4. TeamCity\ub294 \ud300\uc774 Jenkins\ub97c \uba40\ub9ac \ud558\uac8c \ub418\ub294 \ud575\uc2ec \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub294 \ub3d9\uc2dc\uc5d0, \uae30\uc874 CI\/CD \ud50c\ub7ab\ud3fc\uc5d0\ub294 \uc5c6\uc5c8\ub358 \uac15\ub825\ud55c \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. TeamCity\uac00 \uc81c\uacf5\ud558\ub294 \uac00\uce58 \uc911 \ub2e4\uc74c \uba87 \uac00\uc9c0\ub97c \ud655\uc778\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><strong>\uc720\uc9c0 \uad00\ub9ac\uac00 \uc26c\uc6b4 \ud30c\uc774\ud504\ub77c\uc778 \ub85c\uc9c1\uc744 \uc704\ud55c Kotlin DSL<\/strong><\/p>\n\n\n\n<p>TeamCity\uc758 Kotlin DSL\uc740 \ud0c0\uc785 \uc548\uc804\uc131, IDE \uc9c0\uc6d0 \ubc0f \ucef4\ud30c\uc77c\ud0c0\uc784 \uac80\uc99d \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ud15c\ud50c\ub9bf\uc744 \uc0dd\uc131\ud558\uace0, \uad6c\uc131\uc744 \uc548\uc2ec\ud558\uace0 \ub9ac\ud329\ud130\ub9c1\ud558\uba70, \ubcc0\uacbd \uc0ac\ud56d\uc744 \ucee4\ubc0b\ud558\uae30 \uc804\uc5d0 \uc624\ub958\ub97c \ubbf8\ub9ac \uc7a1\uc544\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubcf5\uc7a1\ud55c \ud30c\uc774\ud504\ub77c\uc778 \ub85c\uc9c1\uc740 \uc608\uc0c1\uce58 \ubabb\ud558\uac8c \uae68\uc9c0\ub294 \ucde8\uc57d\ud55c \uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc544\ub2c8\ub77c \uc720\uc9c0 \uad00\ub9ac \uac00\ub2a5\ud55c \ucf54\ub4dc\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\uae30\ubcf8 \uc81c\uacf5\ub418\ub294 \ud14c\uc2a4\ud2b8 \uc778\ud154\ub9ac\uc804\uc2a4<\/strong><\/p>\n\n\n\n<p>\uac04\ud5d0\uc801 \uc2e4\ud328 \ud14c\uc2a4\ud2b8 \ud0d0\uc9c0, \uc790\ub3d9 \uc2e4\ud328 \ud560\ub2f9, \ud3ec\uad04\uc801 \ud14c\uc2a4\ud2b8 \uae30\ub85d\uc740 \ud50c\ub7ab\ud3fc\uc758 \uae30\ubcf8 \uae30\ub2a5\uc785\ub2c8\ub2e4. TeamCity\ub294 \uc5b4\ub5a4 \ud14c\uc2a4\ud2b8\uac00 \uc77c\uad00\uc131 \uc5c6\uc774 \uc2e4\ud328\ud558\ub294\uc9c0 \uc2dd\ubcc4\ud558\uace0, \ube4c\ub4dc \uc804\ubc18\uc758 \ud328\ud134\uc744 \ucd94\uc801\ud558\uba70, \ucd5c\uadfc \ubcc0\uacbd \uc0ac\ud56d\uc744 \ubc14\ud0d5\uc73c\ub85c \uc870\uc0ac\ub97c \uc790\ub3d9\uc73c\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4. \uc774\uc81c \uc2e4\ud328 \uc6d0\uc778\uc744 \ud30c\uc545\ud558\uae30 \uc704\ud574 \ub85c\uadf8\ub97c \ubd84\uc11d\ud558\uac70\ub098 \ub9de\ucda4\ud615 \uc194\ub8e8\uc158\uc744 \uad6c\ucd95\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ud50c\ub7ab\ud3fc\uc5d0\uc11c \ubc14\ub85c \ubb34\uc5c7\uc774 \uc798\ubabb\ub418\uace0 \ub204\uac00 \ud574\uacb0\ud574\uc57c \ud558\ub294\uc9c0 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\uc5d4\ud130\ud504\ub77c\uc774\uc988\uc758 \ubcf5\uc7a1\ud568\uc774 \uc5c6\ub294 \uc5d4\ud130\ud504\ub77c\uc774\uc988 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158<\/strong><\/p>\n\n\n\n<p>\ube4c\ub4dc \uccb4\uc778, \uc544\ud2f0\ud329\ud2b8 \uc885\uc18d\uc131, \ubcd1\ub82c \uc2e4\ud589 \uae30\ub2a5\uc774 \ubcf5\uc7a1\ud55c \uc124\uc815\uc774\ub098 \uace0\ub3c4\uc758 \uc804\ubb38 \uc9c0\uc2dd \uc5c6\uc774\ub3c4 \uc6d0\ud65c\ud558\uac8c \uc791\ub3d9\ud569\ub2c8\ub2e4. \uc2dc\uac01\uc801 \ud30c\uc774\ud504\ub77c\uc778 \uc5d0\ub514\ud130\ub97c \ud1b5\ud574 \uc2e0\uaddc \ud300\uc6d0\ub3c4 \ubcf5\uc7a1\ud55c \uc6cc\ud06c\ud50c\ub85c\ub97c \uc989\uc2dc \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5d4\ud130\ud504\ub77c\uc774\uc988 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \ud754\ud788 \ubc1c\uc0dd\ud558\ub294 \uc6b4\uc601 \uc624\ubc84\ud5e4\ub4dc \uc5c6\uc774 \uc218\uc900 \ub192\uc740 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158 \uae30\ub2a5\uc744 \uacbd\ud5d8\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Jenkins \ud30c\uc774\ud504\ub77c\uc778\uacfc TeamCity \ube44\uad50<\/strong><\/h2>\n\n\n\n<p>\uae30\uc874\uc758 Jenkins \ud328\ud134\uc774 TeamCity\uc5d0\uc11c \uc5b4\ub5bb\uac8c \ubcc0\ud658\ub418\ub294\uc9c0 \uc774\ud574\ud558\uba74, \ud6a8\uacfc\uc801\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacc4\ud68d\uc758 \uc77c\ud658\uc73c\ub85c \uc5b4\ub5a4 \uc6cc\ud06c\ud50c\ub85c\ub97c \uc0dd\uc131\ud574\uc57c \ud560\uc9c0 \ud30c\uc545\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ud30c\uc774\ud504\ub77c\uc778\uacfc \ube4c\ub4dc \uccb4\uc778 \ube44\uad50<\/strong><\/h3>\n\n\n\n<p>TeamCity\ub294 \ube4c\ub4dc \uc6cc\ud06c\ud50c\ub85c \uc815\uc758\ub97c \uc704\ud574 \ube4c\ub4dc \uccb4\uc778\uacfc \ud30c\uc774\ud504\ub77c\uc778\uc774\ub77c\ub294 \ub450 \uac00\uc9c0 \uc0c1\ud638 \ubcf4\uc644\uc801\uc778 \uc811\uadfc \ubc29\uc2dd\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/build-chain.html\" target=\"_blank\" rel=\"noopener\">\ube4c\ub4dc \uccb4\uc778<\/a>\uc740 \uc885\uc18d\uc131\uacfc \ubcf5\uc7a1\ud55c \uc6cc\ud06c\ud50c\ub85c\ub97c \ubaa8\ub378\ub9c1\ud558\uae30 \uc704\ud574 \ub9ce\uc774 \uc0ac\uc6a9\ub418\ub294 \ubc29\ubc95\uc774\uace0, 2025.07 \ubc84\uc804\uc758 \uc2e0\uaddc \uae30\ub2a5\uc778 <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/teamcity\/\" target=\"_blank\" rel=\"noopener\">\ud30c\uc774\ud504\ub77c\uc778<\/a>\uc740 \ucd5c\uc2e0 \ud30c\uc774\ud504\ub77c\uc778 \uacbd\ud5d8\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc2e4\uc804\uc5d0\uc11c \uac80\uc99d\ub41c \ube4c\ub4dc \uccb4\uc778\uc5d0 \ube44\ud574 \uc2e0\uaddc \uae30\ub2a5\uc778 \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc544\uc9c1 \uadf8\ub9cc\ud07c \uc0ac\uc6a9 \uc0ac\ub840\ub97c \uc9c0\uc6d0\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc, Jenkins\uc5d0\uc11c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\ub294 \ud300\uc5d0\uac8c \ub354 \uce5c\uc219\ud558\uace0 \uc9c1\uad00\uc801\uc778 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc5b4\ub5a4 \uc635\uc158\uc774 \ub354 \uc88b\uc740\uc9c0\ub294 \uad6c\ud604\ud558\ub824\ub294 \uad6c\uccb4\uc801\uc778 CI\/CD \ud504\ub85c\uc138\uc2a4\uc5d0 \ub530\ub77c \ub2e4\ub985\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ub2e4\uc74c \uacbd\uc6b0\uc5d0\ub294 \ube4c\ub4dc \uccb4\uc778\uc744 \uc120\ud0dd\ud558\uc138\uc694.<\/strong><\/p>\n\n\n\n<ul>\n<li>\uc544\ud2f0\ud329\ud2b8 \uc885\uc18d\uc131, \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ud2b8\ub9ac\uac70, \uc2a4\ub0c5\uc0f7 \uaca9\ub9ac\uc640 \uac19\uc740 \uace0\uae09 \uae30\ub2a5\uc744 \uac16\ucd98 \uc131\uc219\ud558\uace0 \ud504\ub85c\ub355\uc158\uc5d0 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc624\ucf00\uc2a4\ud2b8\ub808\uc774\uc158\uc774 \ud544\uc694\ud55c \uacbd\uc6b0.<\/li>\n\n\n\n<li>\uc218\ub9ce\uc740 \uad6c\uc131 \uc694\uc18c\ub97c \uc870\uc728\ub41c \ubc29\uc2dd\uc73c\ub85c \ube4c\ub4dc, \ud14c\uc2a4\ud2b8 \ubc0f \ubc30\ud3ec\ud574\uc57c \ud558\ub294 \ub300\uaddc\ubaa8 \ub2e8\uc77c \uc800\uc7a5\uc18c \ub610\ub294 \ub2e4\uc911 \ud504\ub85c\uc81d\ud2b8 \ube4c\ub4dc\uac00 \uc6cc\ud06c\ud50c\ub85c\uc5d0 \ud3ec\ud568\ub41c \uacbd\uc6b0.<\/li>\n\n\n\n<li>\ucd5c\uc2e0 \ud30c\uc774\ud504\ub77c\uc778 \uad6c\ubb38\ubcf4\ub2e4 \uc2dc\uc2a4\ud15c\uc758 \uc548\uc815\uc131\uacfc \uc7a5\uae30\uc801\uc778 \uc9c0\uc6d0\uc774 \ub354 \uc911\uc694\ud55c \uacbd\uc6b0.<\/li>\n<\/ul>\n\n\n\n<p><strong>\ub2e4\uc74c \uacbd\uc6b0\uc5d0\ub294 \ud30c\uc774\ud504\ub77c\uc778\uc744 \uc120\ud0dd\ud558\uc138\uc694.<\/strong><\/p>\n\n\n\n<ul>\n<li>Jenkins, GitHub Actions \ub610\ub294 GitLab CI\uc640 \uc720\uc0ac\ud55c \ucd5c\uc2e0 YAML \uae30\ubc18 \ucf54\ub4dc\ud615 \ud30c\uc774\ud504\ub77c\uc778(Pipeline-as-code) \uc811\uadfc \ubc29\uc2dd\uc744 \uc120\ud638\ud558\ub294 \uacbd\uc6b0.<\/li>\n\n\n\n<li>\uc6cc\ud06c\ud50c\ub85c\uac00 \ube44\uad50\uc801 \ub2e8\uc21c\ud558\uba70(\ube4c\ub4dc \u2192 \ud14c\uc2a4\ud2b8 \u2192 \ubc30\ud3ec), \ubcf5\uc7a1\ud55c \uc544\ud2f0\ud329\ud2b8\ub098 \uc2a4\ub0c5\uc0f7 \uc885\uc18d\uc131 \ubaa8\ub378\ub9c1\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0.<\/li>\n\n\n\n<li>\uc5d4\ud130\ud504\ub77c\uc774\uc988\uae09\uc758 \ubcf5\uc7a1\ud568\ubcf4\ub2e4 \uac1c\ubc1c\uc790 \uce5c\ud654\uc801 \uc0ac\uc6a9\uc131\uacfc \uc800\uc7a5\uc18c \uc911\uc2ec\uc758 \uad6c\uc131\uc744 \ub354 \uac00\uce58 \uc788\uac8c \uc5ec\uae30\ub294 \uacbd\uc6b0.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\uc0d8\ud50c \ud328\ud134<\/strong><\/h3>\n\n\n\n<p>\ube4c\ub4dc \uccb4\uc778\uacfc \ud30c\uc774\ud504\ub77c\uc778 \ubaa8\ub450 \uad6c\uc131\uc5d0 Kotlin DSL\uc744 \uc9c0\uc6d0\ud558\uba70(<a href=\"https:\/\/lp.jetbrains.com\/teamcity-pipelines-in-enterprise-eap-4708\/\" target=\"_blank\" rel=\"noopener\">\ud30c\uc774\ud504\ub77c\uc778\uc758 \uacbd\uc6b0 2025.11 \uc774\ud6c4 \uc9c0\uc6d0 \uc608\uc815<\/a>), \uc774\ub294 \uae30\uc874 Jenkinsfile \uad6c\ubb38\uc5d0 \ube44\ud574 \uc0c1\ub2f9\ud55c \uc774\uc810\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub2e4\uc74c\uc740 \uc77c\ubc18 Jenkins \ud30c\uc774\ud504\ub77c\uc778 \ud328\ud134\uacfc TeamCity\uc758 Kotlin DSL\uc744 \ube44\uad50\ud558\uc5ec, \uad6c\ubb38\uc0c1\uc758 \ucc28\uc774\uc810\uacfc TeamCity\uc758 \ud5a5\uc0c1\ub41c \uae30\ubcf8 \uae30\ub2a5\uc744 \ubcf4\uc5ec\uc8fc\ub294 \uc608\uc2dc\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\uc120\uc5b8\uc801 \ud30c\uc774\ud504\ub77c\uc778 \uc815\uc758<\/strong><\/h4>\n\n\n\n<p>Jenkins\uc758 \uc120\uc5b8\uc801 \ud30c\uc774\ud504\ub77c\uc778\uc740 Groovy \ub0b4\uc5d0\uc11c YAML\uacfc \uc720\uc0ac\ud55c \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud558\uc9c0\ub9cc, \ucf54\ub4dc\uac00 \uc7a5\ud669\ud574\uc9c0\uac70\ub098 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uae30 \uc27d\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Jenkinsfile\n\npipeline {\n\n\u00a0\u00a0\u00a0\u00a0agent any\n\n\u00a0\u00a0\u00a0\u00a0stages {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Build') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh 'echo \"Building application...\"'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/gradlew build'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Test') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/gradlew test'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Deploy') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/deploy.sh'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>\ubc18\uba74, TeamCity\uc758 Kotlin DSL\uc740 \ud0c0\uc785 \uc548\uc804\uc131\uacfc \ub354 \uc6b0\uc218\ud55c IDE \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ .teamcity\/settings.kts\n\nimport jetbrains.buildServer.configs.kotlin.*\n\nimport jetbrains.buildServer.configs.kotlin.buildSteps.script\n\nimport jetbrains.buildServer.configs.kotlin.triggers.vcs\n\nobject Build : BuildType({\n\n\u00a0\u00a0\u00a0\u00a0name = \"Build and Deploy\"\n\n\u00a0\u00a0\u00a0\u00a0vcs {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0root(DslContext.settingsRoot)\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Build\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \"\"\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Building application...\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.\/gradlew build\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\"\".trimIndent()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Test\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \".\/gradlew test\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Deploy\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \".\/deploy.sh\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0triggers {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0vcs {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branchFilter = \"+:*\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n})<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>VCS \ucee4\ubc0b \uc2dc \ube4c\ub4dc \ud2b8\ub9ac\uac70<\/strong><\/h4>\n\n\n\n<p>Jenkins\ub294 \ud50c\ub7ec\uadf8\uc778\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud3f4\ub9c1 \ub610\ub294 \uc6f9\ud6c4\ud06c \uad6c\uc131\uc744 \uc9c4\ud589\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pipeline {\n\n\u00a0\u00a0\u00a0\u00a0triggers {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0pollSCM('H\/5 * * * *')\u00a0 \/\/ Poll every 5 minutes\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ OR\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0githubPush()\u00a0 \/\/ Requires GitHub plugin\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0stages {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Build on Commit') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0when {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0anyOf {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branch 'main'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branch 'develop'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0changeRequest()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/build.sh'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>TeamCity\ub294 \uc815\uad50\ud55c \ube0c\ub79c\uce58 \ud544\ud130\ub9c1 \uae30\ub2a5\uc744 \uac16\ucd98 \uae30\ubcf8 VCS \ud1b5\ud569 \uae30\ub2a5\uc744 \uae30\ubcf8\uc73c\ub85c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">object BuildOnCommit : BuildType({\n\n\u00a0\u00a0\u00a0\u00a0name = \"Build on VCS Commit\"\n\n\u00a0\u00a0\u00a0\u00a0vcs {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0root(DslContext.settingsRoot)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branchFilter = \"\"\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+:refs\/heads\/main\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+:refs\/heads\/develop\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+:refs\/heads\/feature\/*\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\"\".trimIndent()\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0triggers {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0vcs {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branchFilter = \"+:*\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0enableQueueOptimization = false\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Build Application\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \".\/build.sh\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n})<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\ud658\uacbd \ubcc0\uc218 \ubc0f \uad6c\uc131<\/strong><\/h4>\n\n\n\n<p>Jenkins\ub294 \ud30c\uc774\ud504\ub77c\uc778 \uad6c\ubb38\uc744 \ud1b5\ud574 \ud658\uacbd \ubcc0\uc218\ub97c \ucc98\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pipeline {\n\n\u00a0\u00a0\u00a0\u00a0environment {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DATABASE_URL = 'jdbc:postgresql:\/\/localhost:5432\/mydb'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0API_KEY = credentials('api-key')\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0stages {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Deploy') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0environment {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DEPLOY_ENV = 'staging'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh 'echo \"Deploying to ${DEPLOY_ENV}\"'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>TeamCity\ub294 \ud0c0\uc785 \uc548\uc804\uc131\uc774 \ubcf4\uc7a5\ub41c \ub354 \uc720\uc5f0\ud55c \ub9e4\uac1c\ubcc0\uc218 \uad00\ub9ac \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">object Deploy : BuildType({\n\n\u00a0\u00a0\u00a0\u00a0name = \"Deploy Application\"\n\n\u00a0\u00a0\u00a0\u00a0params {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0text(\"database.url\", \"jdbc:postgresql:\/\/localhost:5432\/mydb\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0password(\"api.key\", \"credentialsJSON:api-key\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0select(\"deploy.environment\", \"staging\", options = listOf(\"staging\", \"production\"))\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \"\"\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Deploying to %deploy.environment%\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.\/deploy.sh --env %deploy.environment%\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\"\".trimIndent()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n})<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\ud14c\uc2a4\ud2b8 \ubcf4\uace0 \ud1b5\ud569<\/strong><\/h4>\n\n\n\n<p>Jenkins\uc5d0\uc11c \ud3ec\uad04\uc801\uc778 \ud14c\uc2a4\ud2b8 \ubcf4\uace0\ub97c \uad6c\ud604\ud558\ub824\uba74 \ubcc4\ub3c4\uc758 \ud50c\ub7ec\uadf8\uc778\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pipeline {\n\n\u00a0\u00a0\u00a0\u00a0stages {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Test') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/gradlew test'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0post {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0always {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0publishTestResults([\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0testResultsFiles: 'build\/test-results\/test\/*.xml',\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0allowEmptyResults: false\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0])\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0publishHTML([\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0allowMissing: false,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0alwaysLinkToLastBuild: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0keepAll: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reportDir: 'build\/reports\/tests\/test',\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reportFiles: 'index.html',\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reportName: 'Test Report'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0])\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>TeamCity\ub294 \uc790\ub3d9 \uc2e4\ud328 \ud560\ub2f9\uc774 \ud3ec\ud568\ub41c \ud14c\uc2a4\ud2b8 \uc778\ud154\ub9ac\uc804\uc2a4\ub97c \uae30\ubcf8 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">object TestWithReporting : BuildType({\n\n\u00a0\u00a0\u00a0\u00a0name = \"Test with Reporting\"\n\n\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Run Tests\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \".\/gradlew test\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0features {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0xmlReport {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reportType = XmlReport.XmlReportType.JUNIT\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0rules = \"build\/test-results\/test\/*.xml\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0htmlReport {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reportDir = \"build\/reports\/tests\/test\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0startPage = \"index.html\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0reportName = \"Test Results\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0investigationsAutoAssigner {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0users = \"teamlead\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0assignOnSecondFailure = true\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0assignOnNewFailure = true\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0failureConditions {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0executionTimeoutMin = 30\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0testFailure = false\u00a0 \/\/ Don't fail build on test failures, just report\n\n\u00a0\u00a0\u00a0\u00a0}\n\n})<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\uc870\uac74\ubd80 \uc2a4\ud14c\uc774\uc9c0 \ubc0f \ub9e4\ud2b8\ub9ad\uc2a4 \ube4c\ub4dc<\/strong><\/h4>\n\n\n\n<p>Jenkins\uc758 \uc870\uac74\ubd80 \ub85c\uc9c1\uc740 \ubcf5\uc7a1\ud574\uc9c0\uace0 \uc720\uc9c0 \uad00\ub9ac\uac00 \uc5b4\ub824\uc6cc\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pipeline {\n\n\u00a0\u00a0\u00a0\u00a0stages {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Deploy to Production') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0when {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branch 'main'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0environment name: 'DEPLOY_PROD', value: 'true'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/deploy-prod.sh'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0strategy {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0matrix {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0axes {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0axis {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name 'JAVA_VERSION'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0values '11', '17', '21'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0axis {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name 'OS'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0values 'ubuntu-latest', 'windows-latest'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stages {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Test Matrix') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/test-java-${JAVA_VERSION}.sh'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>TeamCity\uc758 \uc811\uadfc \ubc29\uc2dd\uc740 \ub354 \uba85\uc2dc\uc801\uc774\uace0 \uc720\uc9c0 \uad00\ub9ac\uac00 \uc6a9\uc774\ud558\uba70, \uc7ac\uc0ac\uc6a9\uc131\ub3c4 \ub354 \ub6f0\uc5b4\ub0a9\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">object ProductionDeploy : BuildType({\n\n\u00a0\u00a0\u00a0\u00a0name = \"Production Deploy\"\n\n\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Deploy to Production\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \".\/deploy-prod.sh\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0conditions {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0equals(\"teamcity.build.branch\", \"main\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0equals(\"deploy.environment\", \"production\")\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n})\n\n\/\/ Matrix builds as separate build configurations with reusable functions\n\nfun createTestBuild(javaVersion: String, os: String): BuildType {\n\n\u00a0\u00a0\u00a0\u00a0return BuildType({\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Test Java $javaVersion on $os\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0params {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0text(\"java.version\", javaVersion)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0text(\"agent.os\", os)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \".\/test-java-%java.version%.sh\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0requirements {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0equals(\"system.os\", os)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0})\n\n}\n\n\/\/ Create matrix builds programmatically\n\nval testBuilds = listOf(\n\n\u00a0\u00a0\u00a0\u00a0createTestBuild(\"11\", \"Linux\"),\n\n\u00a0\u00a0\u00a0\u00a0createTestBuild(\"17\", \"Linux\"),\n\n\u00a0\u00a0\u00a0\u00a0createTestBuild(\"21\", \"Linux\"),\n\n\u00a0\u00a0\u00a0\u00a0createTestBuild(\"11\", \"Windows\"),\n\n\u00a0\u00a0\u00a0\u00a0createTestBuild(\"17\", \"Windows\"),\n\n\u00a0\u00a0\u00a0\u00a0createTestBuild(\"21\", \"Windows\")\n\n)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\uc544\ud2f0\ud329\ud2b8 \uad00\ub9ac<\/strong><\/h4>\n\n\n\n<p>Jenkins\uc758 \uc544\ud2f0\ud329\ud2b8 \ucc98\ub9ac \ubc29\uc2dd\uc740 \uc138\uc2ec\ud55c \uad6c\uc131\uc774 \ud544\uc694\ud558\uba70, \uc815\uad50\ud55c \uc885\uc18d\uc131 \uad00\ub9ac \uae30\ub2a5\uc774 \ubd80\uc871\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pipeline {\n\n\u00a0\u00a0\u00a0\u00a0stages {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Build') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh '.\/gradlew build'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0post {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0success {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0archiveArtifacts([\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0artifacts: 'build\/libs\/*.jar,build\/distributions\/*.zip',\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0allowEmptyArchive: false,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fingerprint: true\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0])\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stage('Deploy') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Copy artifacts from upstream build\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0copyArtifacts([\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0projectName: 'upstream-job',\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0selector: lastSuccessful(),\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0target: 'artifacts\/'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0])\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sh 'deploy.sh artifacts\/*.jar'\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/pre>\n\n\n\n<p>TeamCity\ub294 \uc885\uc18d\uc131 \ucd94\uc801\uacfc \uc790\ub3d9 \uc815\ub9ac\ub97c \ud3ec\ud568\ud55c \uc815\uad50\ud55c \uc544\ud2f0\ud329\ud2b8 \uad00\ub9ac \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">object BuildWithArtifacts : BuildType({\n\n\u00a0\u00a0\u00a0\u00a0name = \"Build and Archive\"\n\n\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Build Application\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \".\/gradlew build\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0artifactRules = \"\"\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0build\/libs\/*.jar => libs\/\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0build\/distributions\/*.zip => distributions\/\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0build\/reports\/** => reports\/\n\n\u00a0\u00a0\u00a0\u00a0\"\"\".trimIndent()\n\n\u00a0\u00a0\u00a0\u00a0cleanup {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0keepRule {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0id = \"keep_successful_builds\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0keepAtLeast = days(30)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0applyToBuilds {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0inBranches {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0branchFilter = \"+:refs\/heads\/main\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0withStatus = BuildStatus.SUCCESSFUL\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0preserveArtifacts = PreserveArtifacts.ALL\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n})\n\nobject DeployWithArtifacts : BuildType({\n\n\u00a0\u00a0\u00a0\u00a0name = \"Deploy Application\"\n\n\u00a0\u00a0\u00a0\u00a0dependencies {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0artifacts(BuildWithArtifacts) {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0buildRule = lastSuccessful()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0artifactRules = \"\"\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0libs\/*.jar => app\/\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0distributions\/*.zip => packages\/\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\"\".trimIndent()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0steps {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0script {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = \"Deploy\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0scriptContent = \"\"\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Deploying artifacts...\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.\/deploy.sh app\/*.jar\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\"\".trimIndent()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0}\n\n})<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Kotlin DSL\uc758 \uc774\uc810<\/strong><\/h3>\n\n\n\n<p>\ubcf5\uc7a1\ud55c \ud30c\uc774\ud504\ub77c\uc778\uc744 \uad00\ub9ac\ud560 \ub54c TeamCity Kotlin DSL\uc758 \uc774\uc810\uc774 \ub354 \ud655\uc5f0\ud574\uc9d1\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ud0c0\uc785 \uc548\uc804\uc131 \ubc0f IDE \uc9c0\uc6d0:<\/strong> IDE\uac00 \ud30c\uc774\ud504\ub77c\uc778 \uad6c\uc131\uc5d0 \uc790\ub3d9 \uc644\uc131, \ub9ac\ud329\ud130\ub9c1 \ub3c4\uad6c, \ucef4\ud30c\uc77c\ud0c0\uc784 \uc624\ub958 \uac80\uc0ac \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 Jenkinsfile \uac1c\ubc1c \uc2dc \ud754\ud788 \ubc1c\uc0dd\ud558\ub294 \uc2dc\ud589\ucc29\uc624\ub97c \uc904\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\uc7ac\uc0ac\uc6a9\uc131 \ubc0f \ubaa8\ub4c8\ud654:<\/strong> \uc7ac\uc0ac\uc6a9 \uac00\ub2a5\ud55c \ud568\uc218, \ud15c\ud50c\ub9bf, \uacf5\uc720 \uad6c\uc131 \uac1d\uccb4\ub97c \uc790\uc720\ub86d\uac8c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc \uc911\ubcf5\uc744 \uc904\uc5ec\uc8fc\uba70 \uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\uc5d0 \uac78\uccd0 \uc77c\uad00\ub41c \ud328\ud134\uc744 \uc27d\uac8c \uc720\uc9c0\ud558\ub3c4\ub85d \ub3d5\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ubc84\uc804 \uad00\ub9ac \uc2dc\uc2a4\ud15c \ud1b5\ud569:<\/strong> Kotlin DSL \uad6c\uc131\uc744 \uc774\uc6a9\ud558\uba74 \ud480 \ub9ac\ud018\uc2a4\ud2b8\uc5d0\uc11c \uac80\ud1a0\ud558\uace0 \ubcc0\uacbd \ub0b4\uc6a9\uc744 \ucd94\uc801\ud558\uace0 \uc218\uc815\uc758 \uc601\ud5a5\uc744 \ud30c\uc545\ud558\uae30\uac00 \ub354 \uc218\uc6d4\ud574\uc9d1\ub2c8\ub2e4. \ud0c0\uc785 \uc2dc\uc2a4\ud15c\uc744 \ud1b5\ud574\uc11c\ub294 \uac01 \ubcc0\uacbd\uc758 \uc601\ud5a5\uc744 \ub354 \uba85\ud655\ud558\uac8c \ud30c\uc545\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\uc548\uc804\ud55c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacc4\ud68d<\/strong><\/h2>\n\n\n\n<p>Jenkins\uc5d0\uc11c \ub354 \ud604\ub300\uc801\uc778 \uc2dc\uc2a4\ud15c\uc73c\ub85c \uc131\uacf5\uc801\uc73c\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\ub824\uba74, \uc704\ud5d8\uc744 \ucd5c\uc18c\ud654\ud558\uba74\uc11c \uc810\uc9c4\uc801\uc73c\ub85c \uac00\uce58\ub97c \uc99d\uba85\ud574 \ub098\uac00\ub294 \uccb4\uacc4\uc801\uc774\uace0 \ub2e8\uacc4\uc801\uc778 \uc811\uadfc\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \ub2e8\uc21c\ud55c \uc9c1\uc811 \ubcc0\ud658 \uc791\uc5c5\uc774 \uc544\ub2cc, CI\/CD \uc6cc\ud06c\ud50c\ub85c\ub97c \ud604\ub300\ud654\ud558\uace0 \uac1c\uc120\ud560 \uc218 \uc788\ub294 \uae30\ud68c\ub85c \ubd10\uc57c \uac00\uc7a5 \ud070 \uac00\uce58\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1\ub2e8\uacc4: \ud0d0\uc0c9 \ubc0f \ud3c9\uac00<\/strong><\/h3>\n\n\n\n<p><strong>\ubaa9\ud45c:<\/strong> \ud604\uc7ac\uc758 Jenkins \ud658\uacbd\uc744 \ubd84\uc11d\ud558\uace0, \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \ud1b5\ud574 \ud574\uacb0\ud558\uace0\uc790 \ud558\ub294 \ud575\uc2ec \uacfc\uc81c\ub97c \ud30c\uc545\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ud575\uc2ec \uc9c8\ubb38:<\/strong> \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \ud1b5\ud574 \ud574\uacb0\ud558\ub824\ub294 \uac00\uc7a5 \uc911\ub300\ud55c \ubb38\uc81c\ub294 \ubb34\uc5c7\uc774\uba70, \uc131\uacf5 \uc5ec\ubd80\ub97c \uc5b4\ub5bb\uac8c \uce21\uc815\ud560 \uac83\uc778\uac00?<\/p>\n\n\n\n<p>\ud0d0\uc0c9 \ub2e8\uacc4\uc5d0\uc11c\ub294 Jenkins \uc778\uc2a4\ud134\uc2a4\uc5d0 \ub300\ud55c \ud3ec\uad04\uc801\uc778 \uac10\uc0ac\ub97c \uc2e4\uc2dc\ud558\uace0, \ud604\uc7ac \uc0ac\uc6a9 \uc911\uc778 \ubaa8\ub4e0 \uc791\uc5c5\uacfc \ud30c\uc774\ud504\ub77c\uc778, \uadf8\ub9ac\uace0 \uadf8 \uc885\uc18d\uc131\uc744 \ubb38\uc11c\ud654\ud569\ub2c8\ub2e4. Jenkinsfile, \ud504\ub9ac\uc2a4\ud0c0\uc77c \uc791\uc5c5, \uacf5\uc720 \ub77c\uc774\ube0c\ub7ec\ub9ac, \ub9de\ucda4\ud615 \ud50c\ub7ec\uadf8\uc778 \ubc0f \uc678\ubd80 \uc5f0\ub3d9 \uc11c\ube44\uc2a4 \ub4f1\uc744 \ud3ec\ud568\ud55c \uc804\uccb4 \uc778\ubca4\ud1a0\ub9ac\ub97c \uc791\uc131\ud569\ub2c8\ub2e4. \ub2e4\uc6b4\ud0c0\uc784\uc744 \ud5c8\uc6a9\ud560 \uc218 \uc5c6\ub294 \ud575\uc2ec \ud30c\uc774\ud504\ub77c\uc778\uacfc \ud2b9\ubcc4\ud55c \uad00\ub9ac\uac00 \ud544\uc694\ud55c \ub9de\ucda4\ud615 \uae30\ub2a5\uc744 \uc2dd\ubcc4\ud558\ub294 \ub370 \uac01\ubcc4\ud788 \uc8fc\uc758\ub97c \uae30\uc6b8\uc5ec\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub7ec\ud55c \uac10\uc0ac\ub294 \ub2e8\uc21c\ud55c \ubb38\uc11c\ud654 \uc774\uc0c1\uc758 \uc758\ubbf8\ub97c \uc9c0\ub2d9\ub2c8\ub2e4. \uac01 Jenkins \ud30c\uc774\ud504\ub77c\uc778\uc774 \uc6d0\ub798 \uc5b4\ub5a4 \ube44\uc988\ub2c8\uc2a4 \ubaa9\ud45c\ub97c \ub2ec\uc131\ud558\uae30 \uc704\ud574 \uc124\uacc4\ub418\uc5c8\ub294\uc9c0 \uac80\ud1a0\ud558\uc138\uc694. \ub300\ubd80\ubd84\uc758 \ubcf5\uc7a1\ud55c Jenkins \uad6c\uc131\uc740 \ucd5c\uc801\uc758 \uc194\ub8e8\uc158\uc774\ub77c\uae30\ubcf4\ub2e4 \ud50c\ub7ab\ud3fc \uc790\uccb4\uc758 \ud55c\uacc4\ub97c \uadf9\ubcf5\ud558\uae30 \uc704\ud55c \uc784\uc2dc\ubc29\ud3b8\uc778 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \ub9c8\ucc2c\uac00\uc9c0\ub85c, \uc77c\ubd80 \ud30c\uc774\ud504\ub77c\uc778\uc740 \uc2dc\uac04\uc774 \ud750\ub974\uba70 \uc720\uae30\uc801\uc73c\ub85c \ube44\ub300\ud574\uc838 \ubcf5\uc7a1\uc131\uc774 \ub204\uc801\ub418\uc5c8\uc744 \uc218 \uc788\uc73c\uba70, \uc774\ub294 \uc0c8\ub85c\uc6b4 \uc2dc\uc2a4\ud15c \uad6c\ud604\uc744 \ud1b5\ud574 \ub9d0\ub054\ud788 \uc81c\uac70\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774 \ub2e8\uacc4\uc5d0\uc11c\ub294 \uac1c\ubc1c \ud300\uacfc \uc18c\ud1b5\ud558\uba70 \ud604\uc7ac \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uacaa\uace0 \uc788\ub294 \uace0\ucda9 \uc0ac\ud56d\uc744 \ud30c\uc545\ud569\ub2c8\ub2e4. \uc720\uc9c0 \uad00\ub9ac \uc624\ubc84\ud5e4\ub4dc, \ub514\ubc84\uadf8\uc758 \uc5b4\ub824\uc6c0, \uc6cc\ud06c\ud50c\ub85c\uc758 \ube44\ud6a8\uc728\uc131 \ub4f1\uc744 \ubcf4\uc5ec\uc8fc\ub294 \uad6c\uccb4\uc801\uc778 \uc0ac\ub840\ub97c \ubb38\uc11c\ud654\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \uc218\uc9d1\ub41c \uc815\ubcf4\ub294 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc6b0\uc120\uc21c\uc704\ub97c \uc815\ud558\ub294 \uae30\uc900\uc774 \ub418\uba70, TeamCity \uad6c\ud604\uc758 \uc131\uacf5\uc744 \uce21\uc815\ud558\ub294 \uc9c0\ud45c\ub85c \ud65c\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2\ub2e8\uacc4: \ud30c\uc77c\ub7ff \ud658\uacbd \uad6c\ucd95<\/strong><\/h3>\n\n\n\n<p><strong>\ubaa9\ud45c:<\/strong> \uc704\ud5d8\ub3c4\uac00 \ub0ae\uc740 TeamCity \ud658\uacbd\uc744 \uad6c\ucd95\ud558\uace0, \ub300\ud45c\uc801\uc778 \uc6cc\ud06c\ub85c\ub4dc\ub97c \ud1b5\ud574 \ud575\uc2ec \uc5ed\ub7c9\uc744 \uac80\uc99d\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ud575\uc2ec \uc9c8\ubb38:<\/strong> \ubcf8\uaca9\uc801\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc5d0 \uc55e\uc11c, \uc18c\uaddc\ubaa8 \ud658\uacbd\uc5d0\uc11c \uce21\uc815 \uac00\ub2a5\ud55c \uac00\uce58\ub97c \uc99d\uba85\ud560 \uc218 \uc788\ub294\uac00?<\/p>\n\n\n\n<p>\uc870\uc9c1 \ub0b4 \uc77c\ubc18\uc801\uc778 \ud328\ud134\uc744 \ud3ec\ud568\ud558\ub418, \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\ub354\ub77c\ub3c4 \ube44\uc988\ub2c8\uc2a4 \uc6b4\uc601\uc5d0 \uce58\uba85\uc801\uc774\uc9c0 \uc54a\uc740 \ud30c\uc77c\ub7ff \ud504\ub85c\uc81d\ud2b8\ub97c \uc120\uc815\ud558\uc138\uc694. \ub0b4\ubd80 \ub3c4\uad6c, \uc2a4\ud14c\uc774\uc9d5 \ud658\uacbd \ud30c\uc774\ud504\ub77c\uc778 \ub610\ub294 \uc0c8\ub85c\uc6b4 \ud53c\ucc98 \ube0c\ub79c\uce58 \uc6cc\ud06c\ud50c\ub85c\uac00 \uc801\ud569\ud55c \ud6c4\ubcf4\uac00 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc2e4\uc81c \uc5c5\ubb34\ub97c \ud1b5\ud574 TeamCity\uc758 \uae30\ub2a5\uc744 \uac80\uc99d\ud558\uace0 \ud300 \ub0b4\ubd80\uc758 \uc2e0\ub8b0\ub97c \uad6c\ucd95\ud558\ub294 \uac83\uc774 \ubaa9\ud45c\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uae30\uc874 Jenkins \ud30c\uc774\ud504\ub77c\uc778\uc744 \uadf8\ub300\ub85c TeamCity\uc5d0 \uc62e\uaca8\uc624\uace0 \uc2f6\uc740 \uc720\ud639\uc744 \ubfcc\ub9ac\uccd0\uc57c \ud569\ub2c8\ub2e4. \ud30c\uc77c\ub7ff \ub2e8\uacc4\ub97c \uc2dc\uc791 \ub2e8\uacc4\ubd80\ud130 \ubaa8\ubc94 \uc0ac\ub840\ub97c \uc801\uc6a9\ud558\uace0 \uad6c\ud604\ud560 \uc18c\uc911\ud55c \uae30\ud68c\ub85c \ud65c\uc6a9\ud558\uc138\uc694. TeamCity\uc758 \uc2dc\uac01\uc801 \ube4c\ub4dc \uccb4\uc778\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud30c\uc774\ud504\ub77c\uc778 \uc885\uc18d\uc131\uc744 \uba85\ud655\ud788 \ud558\uace0, \uc720\uc9c0 \uad00\ub9ac\uac00 \uc6a9\uc774\ud55c \uad6c\uc131\uc744 \uc704\ud574 Kotlin DSL\uc744 \ud65c\uc6a9\ud558\uba70, \ud14c\uc2a4\ud2b8 \ubcd1\ub82c\ud654 \ubc0f \ubd88\uc548\uc815\ud55c \ud14c\uc2a4\ud2b8 \ud0d0\uc9c0\uc640 \uac19\uc740 \ub0b4\uc7a5\ub41c \uae30\ub2a5\uc744 \uc774\uc6a9\ud558\uc138\uc694.<\/p>\n\n\n\n<p>\uac00\ub2a5\ud55c \uacbd\uc6b0 \ub098\ub780\ud788 \ube44\uad50\ud574 \ubcf4\uc138\uc694. Jenkins\uc640 TeamCity\uc5d0\uc11c \ub3d9\uc77c\ud55c \ube4c\ub4dc\ub97c \ub3d9\uc2dc\uc5d0 \uc2e4\ud589\ud558\uc5ec \uc131\ub2a5\uacfc \uc548\uc815\uc131, \uac1c\ubc1c\uc790 \uacbd\ud5d8\uc744 \ube44\uad50\ud574 \ubcf4\uc138\uc694. \ube4c\ub4dc \uc2dc\uac04 \ub2e8\ucd95, \uba85\ud655\ud55c \uc2e4\ud328 \uc9c4\ub2e8, \uad6c\uc131 \uad00\ub9ac\uc758 \uc6a9\uc774\uc131 \ub4f1 \uad6c\uccb4\uc801\uc778 \uac1c\uc120 \uc0ac\ud56d\uc744 \ubb38\uc11c\ud654\ud558\uc138\uc694.<\/p>\n\n\n\n<p>\ud30c\uc77c\ub7ff \uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud558\ub294 \uac1c\ubc1c \ud300\uc73c\ub85c\ubd80\ud130 \uc0c1\uc138\ud55c \ud53c\ub4dc\ubc31\uc744 \uc218\uc9d1\ud558\uc138\uc694. \uc77c\uc77c \uc6cc\ud06c\ud50c\ub85c \uc601\ud5a5\uc5d0 \uc9d1\uc911\ud558\uc138\uc694. \ube4c\ub4dc \uc2e4\ud328 \uc6d0\uc778\uc744 \ud30c\uc545\ud558\uae30\uac00 \ub354 \uc26c\uc6cc\uc84c\ub294\uc9c0, \uad6c\uc131 \ubcc0\uacbd \uc791\uc5c5\uc740 \ub354 \uac04\ud3b8\ud574\uc84c\ub294\uc9c0, \uc2dc\uc2a4\ud15c\uc740 \ud14c\uc2a4\ud2b8 \uacb0\uacfc\uc5d0 \ub300\ud574 \ub354 \ub098\uc740 \uac00\uc2dc\uc131\uc744 \uc81c\uacf5\ud558\ub294\uc9c0 \ud30c\uc545\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3\ub2e8\uacc4: \uc810\uc9c4\uc801 \ub9c8\uc774\uadf8\ub808\uc774\uc158<\/strong><\/h3>\n\n\n\n<p><strong>\ubaa9\ud45c:<\/strong> \ubcf5\uc7a1\ub3c4\uc640 \ube44\uc988\ub2c8\uc2a4 \uc911\uc694\ub3c4\uc5d0 \ub530\ub77c \ub0a8\uc740 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\uba70, Jenkins\ub97c \ub300\uccb4 \uc635\uc158\uc73c\ub85c \uc720\uc9c0\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ud575\uc2ec \uc9c8\ubb38:<\/strong> \ud300\uc758 \uc0dd\uc0b0\uc131\uc774\ub098 \ubc30\ud3ec \uc5ed\ub7c9\uc744 \uc800\ud574\ud558\uc9c0 \uc54a\uace0 \uc5b4\ub5bb\uac8c \uc548\uc804\ud558\uac8c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud560 \uc218 \uc788\ub294\uac00?<\/p>\n\n\n\n<p>\ud30c\uc774\ud504\ub77c\uc778\uc758 \ubcf5\uc7a1\uc131, \ube44\uc988\ub2c8\uc2a4 \uc911\uc694\ub3c4, \uadf8\ub9ac\uace0 \ud300\uc758 \uc900\ube44 \uc0c1\ud0dc\ub97c \uae30\uc900\uc73c\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc6b0\uc120\uc21c\uc704 \ub9e4\ud2b8\ub9ad\uc2a4\ub97c \uac1c\ubc1c\ud558\uc138\uc694. \uc0c1\ub300\uc801\uc73c\ub85c \ub2e8\uc21c\ud558\uace0 \uc911\uc694\ub3c4\uac00 \ub0ae\uc740 \ud30c\uc774\ud504\ub77c\uc778\ubd80\ud130 \uc2dc\uc791\ud558\uc5ec \uc804\ubb38 \uc9c0\uc2dd\uacfc \uc790\uc2e0\uac10\uc744 \uc313\uc544 \ub098\uac00\uc138\uc694. \uac00\uc7a5 \ubcf5\uc7a1\ud558\uac70\ub098 \ube44\uc988\ub2c8\uc2a4\uc758 \ud575\uc2ec \uc2dc\uc2a4\ud15c\uc740 \ud300\uc774 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \ubaa8\ubc94 \uc0ac\ub840\ub97c \uac1c\ubc1c\ud55c \uc774\ud6c4\ub85c \ubbf8\ub904\ub461\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uac01 \ud30c\uc774\ud504\ub77c\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc2dc \uc77c\uad00\ub41c \ud604\ub300\ud654 \ubc29\uc2dd\uc744 \ub530\ub974\uc138\uc694. \uae30\uc874 Jenkins \uad6c\ud604\uc744 \uac80\ud1a0\ud558\uc5ec \uc758\ub3c4\ub41c \ubaa9\uc801\uc744 \ud30c\uc545\ud558\uc138\uc694. \uadf8\ub7f0 \ub2e4\uc74c, \uae30\ubcf8 \ud50c\ub7ab\ud3fc \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub3d9\uc77c\ud55c \ubaa9\ud45c\ub97c \ub2ec\uc131\ud558\ub294 TeamCity \uc194\ub8e8\uc158\uc744 \uc124\uacc4\ud558\uc138\uc694. \uc774 \uacfc\uc815\uc744 \ud1b5\ud574 \ub300\uac1c \ub354 \ub2e8\uc21c\ud558\uace0 \uc720\uc9c0 \uad00\ub9ac\uac00 \uc26c\uc6b4 \uad6c\uc131\uc744 \uc5bb\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \uae30\uac04 \uc911\uc5d0\ub294 Jenkins \ud30c\uc774\ud504\ub77c\uc778\uc744 \uacc4\uc18d \uc720\uc9c0\ud558\uc5ec \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uacbd\uc6b0 \ube60\ub974\uac8c \ub864\ubc31\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\uc138\uc694. \ud53c\ucc98 \ud50c\ub798\uadf8\ub098 \ube0c\ub79c\uce58 \uae30\ubc18 \ub77c\uc6b0\ud305\uc744 \uc0ac\uc6a9\ud558\uc5ec Jenkins\ub77c\ub294 \uc548\uc804\ub9dd\uc744 \uc720\uc9c0\ud55c \ucc44 \ud2b8\ub798\ud53d\uc744 \uc810\uc9c4\uc801\uc73c\ub85c TeamCity\ub85c \uc804\ud658\ud558\uc138\uc694. \uc774\ub7ec\ud55c \ubcd1\ub82c \uc6b4\uc601\uc740 TeamCity \uad6c\ud604\uc774 \uae30\uc874\uacfc \ub3d9\uc77c\ud55c \uacb0\uacfc\ub97c \uc0dd\uc131\ud558\ub294\uc9c0 \uac80\uc99d\ud558\ub294 \uae30\ud68c\uac00 \ub418\uae30\ub3c4 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc0c8\ub85c\uc6b4 TeamCity \uad6c\uc131\uc5d0\ub294 Kotlin DSL\uc744 \uc77c\uad00\ub418\uac8c \uc0ac\uc6a9\ud558\uc138\uc694. \ud0c0\uc785 \uc548\uc815\uc131\uacfc \uc720\uc9c0 \uad00\ub9ac\uac00 \uc6a9\uc774\ud55c \ud30c\uc774\ud504\ub77c\uc778 \uc815\uc758\uc5d0 \uc774\ub807\uac8c \ud22c\uc790\ud558\uba74 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \ud655\uc7a5\ub418\uace0 \ub354 \ub9ce\uc740 \ud300\uc774 \ud50c\ub7ab\ud3fc\uc744 \ub3c4\uc785\ud568\uc5d0 \ub530\ub77c \ud6a8\uc728\uc131\uc774 \uc99d\ub300\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4\ub2e8\uacc4: \ucd5c\uc801\ud654<\/strong><\/h3>\n\n\n\n<p><strong>\ubaa9\ud45c:<\/strong> \uae30\ubcf8\uc801\uc778 \ud30c\uc774\ud504\ub77c\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc774\uc0c1\uc758 \uc774\uc810\uc744 \ub2ec\uc131\ud558\uae30 \uc704\ud574 TeamCity\uc758 \uace0\uae09 \uae30\ub2a5\uc744 \ucda9\ubd84\ud788 \ud65c\uc6a9\ud574 \ubcf4\uc138\uc694.<\/p>\n\n\n\n<p><strong>\ud575\uc2ec \uc9c8\ubb38:<\/strong> Jenkins\uc5d0\uc11c\ub294 \ubd88\uac00\ub2a5\ud588\ub358 \uae30\ub2a5\uc744 \uc5b4\ub5bb\uac8c \ud65c\uc6a9\ud558\uc5ec \uac1c\ubc1c \uc18d\ub3c4\uc640 \ud488\uc9c8\uc744 \ud55c \ub2e8\uacc4 \ub354 \ub192\uc77c \uc218 \uc788\uc744 \uac83\uc778\uac00?<\/p>\n\n\n\n<p>\uc774 \ub2e8\uacc4\uc5d0\uc11c\ub294 TeamCity\uac00 \uae30\ubcf8 \uc81c\uacf5\ud558\ub294 \uc9c0\ub2a5\ud615 \uae30\ub2a5\uacfc \ucd5c\uc801\ud654 \ub3c4\uad6c\ub97c \ud65c\uc6a9\ud558\ub294 \ub370 \uc9d1\uc911\ud558\uc138\uc694. \ubd88\uc548\uc815\ud55c \ud14c\uc2a4\ud2b8 \ud0d0\uc9c0 \uae30\ub2a5\uc744 \ud65c\uc131\ud654\ud558\uc5ec \uac1c\ubc1c\uc790\uc758 \uc2dc\uac04\uc744 \ub0ad\ube44\ud558\ub294 \ubd88\uc548\uc815\ud55c \ud14c\uc2a4\ud2b8\ub97c \uc790\ub3d9\uc73c\ub85c \uc2dd\ubcc4\ud558\uc138\uc694. \ud14c\uc2a4\ud2b8 \ubcd1\ub82c\ud654\ub97c \uad6c\uc131\ud558\uc5ec \ube4c\ub4dc \uc2dc\uac04\uc744 \ub2e8\ucd95\ud558\uace0 \ubcc0\uacbd \uc0ac\ud56d\uc5d0 \ub300\ud55c \ud53c\ub4dc\ubc31\uc744 \ub354 \ube60\ub974\uac8c \uc81c\uacf5\ud558\uc138\uc694.<\/p>\n\n\n\n<p>\ubcf5\uc7a1\ud55c \uc6cc\ud06c\ud50c\ub85c\ub97c \ub354 \uc27d\uac8c \uc774\ud574\ud558\uace0 \uc720\uc9c0 \uad00\ub9ac\ud560 \uc218 \uc788\ub3c4\ub85d \uc2dc\uac01\uc801 \ube4c\ub4dc \uccb4\uc778\uc744 \uad6c\ud604\ud558\uc138\uc694. TeamCity\uc758 \uc885\uc18d\uc131 \uad00\ub9ac\ub97c \ud65c\uc6a9\ud558\uc5ec \ub9ac\uc18c\uc2a4 \ud65c\uc6a9\uc744 \ucd5c\uc801\ud654\ud558\uace0 \ubd88\ud544\uc694\ud55c \uc791\uc5c5\uc744 \uc904\uc774\uc138\uc694. \ub610\ud55c TeamCity\uc758 \ud0c1\uc6d4\ud55c \uad00\ucc30 \uae30\ub2a5\uc744 \uc774\uc6a9\ud574 \ubcf4\uc138\uc694. \ub300\uc2dc\ubcf4\ub4dc\ub97c \uc124\uc815\ud558\uc5ec \ube4c\ub4dc \uc131\ub2a5, \ud14c\uc2a4\ud2b8 \uacb0\uacfc, \uc2dc\uc2a4\ud15c \uc0c1\ud0dc\ub97c \ud55c\ub208\uc5d0 \ud30c\uc545\ud560 \uc218 \uc788\ub294 \uac00\uc2dc\uc131\uc744 \ud655\ubcf4\ud558\uc138\uc694. \ub178\uc774\uc988\uac00 \uc544\ub2cc \uc758\ubbf8 \uc788\ub294 \uc54c\ub9bc\uc744 \uad6c\uc131\ud558\uc5ec \uac1c\ubc1c\uc790\uac00 \uc870\uce58 \uac00\ub2a5\ud55c \ubb38\uc81c\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\uc138\uc694.<\/p>\n\n\n\n<p>IDE, \uc774\uc288 \ud2b8\ub798\ucee4, \ubc30\ud3ec \ud50c\ub7ab\ud3fc\uacfc \uac19\uc740 \uac1c\ubc1c \ub3c4\uad6c\uc640 TeamCity\uc758 \ud1b5\ud569 \uae30\ub2a5\uc744 \uad6c\ud604\ud574 \ubcf4\uc138\uc694. \uc774\ub7ec\ud55c \ud1b5\ud569\uc740 TeamCity \ube4c\ub4dc \uc791\uc5c5\uc744 \uc218\ud589\ud560 \ub54c \uac1c\ubc1c \uc6cc\ud06c\ud50c\ub85c\uc758 \ud6a8\uc728\uc131\uc744 \ud06c\uac8c \uac1c\uc120\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5\ub2e8\uacc4: \uc644\uc804\ud55c \uc804\ud658<\/strong><\/h3>\n\n\n\n<p><strong>\ubaa9\ud45c:<\/strong> Jenkins\ub97c \uc911\ub2e8\ud558\uace0 \ubaa8\ub4e0 \ud300\uc774 TeamCity\uc5d0\uc11c \uc131\uacf5\uc801\uc73c\ub85c \uc6b4\uc601\ub418\ub3c4\ub85d \ubcf4\uc7a5\ud558\uc5ec \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc644\ub8cc\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ud575\uc2ec \uc9c8\ubb38:<\/strong> \ud604\uc7ac\uc758 TeamCity \uad6c\ud604 \uacb0\uacfc\uac00 Jenkins\ub97c \uc911\ub2e8\ud558\uace0 \uc774 \uc131\uacf5 \uc0ac\ub840\ub97c \ub2e4\ub978 \ud300\uc73c\ub85c \ud655\uc7a5\ud560 \ub9cc\ud07c \ucda9\ubd84\ud788 \uc2e0\ub8b0\ud560 \ub9cc\ud55c\uac00?<\/p>\n\n\n\n<p>Jenkins\ub97c \uc911\ub2e8\ud558\uae30 \uc804, TeamCity \ud658\uacbd\uc5d0 \ub300\ud55c \ud3ec\uad04\uc801\uc778 \ubaa8\ub2c8\ud130\ub9c1 \uccb4\uacc4\ub97c \uad6c\ucd95\ud558\uc138\uc694. \uc5ec\uae30\uc5d0\ub294 \uc2dc\uc2a4\ud15c \uc131\ub2a5 \uba54\ud2b8\ub9ad, \ube4c\ub4dc \uc131\uacf5\ub960, \uac1c\ubc1c\uc790 \ub9cc\uc871\ub3c4 \uc9c0\ud45c \ub4f1\uc774 \ud3ec\ud568\ub429\ub2c8\ub2e4. \ubb38\uc81c\ub97c \uc2e0\uc18d\ud558\uac8c \ud30c\uc545\ud558\uace0 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \uc131\uacf5\uc744 \uc785\uc99d\ud560 \uc218 \uc788\ub294 \ub370\uc774\ud130\ub97c \ud655\ubcf4\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ubaa8\ub4e0 \uc900\ube44\uac00 \uc644\ub8cc\ub418\uba74 \ub370\uc774\ud130 \ubcf4\uad00, \uc561\uc138\uc2a4 \uad8c\ud55c \ud68c\uc218, \uc778\ud504\ub77c \ud574\uccb4\ub97c \ud3ec\ud568\ud55c \uc815\uc2dd Jenkins \uc11c\ube44\uc2a4 \uc911\ub2e8 \uacc4\ud68d\uc744 \uc218\ub9bd\ud569\ub2c8\ub2e4. \uaddc\uc815 \uc900\uc218\ub098 \ub514\ubc84\uadf8 \ubaa9\uc801\uc5d0 \ud544\uc694\ud560 \uacbd\uc6b0\ub97c \ub300\ube44\ud574, \uacfc\uac70 \ube4c\ub4dc \ub370\uc774\ud130\uc640 \uc544\ud2f0\ud329\ud2b8\uc5d0 \ub300\ud55c \uc561\uc138\uc2a4 \uad8c\ud55c\uc744 \ubc18\ub4dc\uc2dc \uc720\uc9c0\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \uacb0\uacfc\uc640 \uad50\ud6c8\uc744 \ubb38\uc11c\ud654\ud569\ub2c8\ub2e4. \ube4c\ub4dc \uc131\ub2a5, \uac1c\ubc1c\uc790 \uc0dd\uc0b0\uc131, \uc2dc\uc2a4\ud15c \uc720\uc9c0 \uad00\ub9ac\uc131 \uce21\uba74\uc5d0\uc11c\uc758 \uc815\ub7c9\uc801\uc73c\ub85c \uce21\uc815 \uac00\ub2a5\ud55c \uac1c\uc120 \ud6a8\uacfc\ub97c \ubcf4\uc5ec\uc8fc\ub294 \uc0ac\ub840 \uc5f0\uad6c\ub97c \uc791\uc131\ud558\ub294 \uac83\uc744 \uace0\ub824\ud574 \ubcf4\uc138\uc694. \uc774\ub7ec\ud55c \ubb38\uc11c\ub294 \ub2e4\ub978 \ud300\uc73c\ub85c TeamCity \ub3c4\uc785\uc744 \ud655\uc0b0\uc2dc\ud0a4\uace0 \uc9c0\uc18d\uc801\uc778 \uc2dc\uc2a4\ud15c \ucd5c\uc801\ud654\ub97c \ucd94\uc9c4\ud558\ub294 \ub370 \uadc0\uc911\ud55c \uc790\ub8cc\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub610\ud55c TeamCity\ub97c \ud65c\uc6a9\ud55c CI\/CD \ubaa8\ubc94 \uc0ac\ub840\uc5d0 \uc9d1\uc911\ud558\ub294 \uc0ac\ub0b4 \ubaa8\uc784\uc744 \ub9cc\ub4dc\ub294 \uac83\ub3c4 \ud6a8\uacfc\uc801\uc785\ub2c8\ub2e4. \uc774 \uadf8\ub8f9\uc740 \uc0c8\ub85c\uc6b4 \ud300\uc774 \ud50c\ub7ab\ud3fc\uc744 \ud6a8\uacfc\uc801\uc73c\ub85c \ub3c4\uc785\ud558\ub3c4\ub85d \ub3d5\uace0, \ube44\uc988\ub2c8\uc2a4 \uc694\uad6c\uc0ac\ud56d\uc5d0 \ub9de\ucdb0 \uad6c\ud604 \ubc29\uc2dd\uc744 \uc9c0\uc18d\uc801\uc73c\ub85c \ubc1c\uc804\uc2dc\ud0a4\ub294 \uc5ed\ud560\uc744 \uc218\ud589\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\uad00\ub9ac\uc790\uc5d0\uac8c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc124\uba85<\/strong><\/h2>\n\n\n\n<p>\uae30\uc220\uc801 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \uc2e4\ud328\ud558\ub294 \uc774\uc720\ub294 \uae30\uc220 \uc790\uccb4\uc758 \ubb38\uc81c\ubcf4\ub2e4 \uc774\ud574\uad00\uacc4\uc790\uc640\uc758 \ubd88\ucda9\ubd84\ud55c \uc18c\ud1b5 \ubc0f \uacf5\uac10\ub300 \ud615\uc131 \ubd80\uc871\uc778 \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \ub9ac\ub354\uc2ed\uc740 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \ube44\uc988\ub2c8\uc2a4 \uc0ac\ub840\uc640 \uc774\ub97c \uc548\uc804\ud55c \ud22c\uc790\uac00 \ub418\uac8c \ud558\ub294 \uc704\ud5d8 \uc644\ud654 \uc804\ub7b5\uc744 \ubaa8\ub450 \uc774\ud574\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ub9ac\ub354\uc2ed\uc5d0\uac8c \uc124\uba85\ud560 \uc8fc\uc694 \uc774\uc810<\/strong><\/h3>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \uc774\uc810\uc744 \uae30\uc220 \uc0ac\uc591\uc774 \uc544\ub2cc \ube44\uc988\ub2c8\uc2a4 \ud6a8\uacfc \uce21\uba74\uc5d0\uc11c \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>CI\/CD \uc720\uc9c0 \uad00\ub9ac \ubd80\ub2f4 \uc644\ud654<\/em>\ub97c \ud1b5\ud574 \uc5d4\uc9c0\ub2c8\uc5b4\ub294 \uc778\ud504\ub77c \uc7a5\uc560 \ub300\uc751\uc774 \uc544\ub2cc, \uc81c\ud488 \uac1c\ubc1c\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\ub294 \uc2dc\uac04\uc744 \ud655\ubcf4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac00\ub2a5\ud55c \uacbd\uc6b0 \uc774\ub97c \uc218\uce58\ud654\ud574 \ubcf4\uc138\uc694. \uc120\uc784 \uc5d4\uc9c0\ub2c8\uc5b4\uac00 \ud604\uc7ac \uc2dc\uac04\uc758 10%\ub97c Jenkins \uad00\ub9ac\uc5d0 \uc4f0\uace0 \uc788\ub2e4\uba74, \uc774\ub294 \uc0c1\ub2f9\ud55c \uae30\ud68c \ube44\uc6a9 \uc190\uc2e4\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ube4c\ub4dc \ubc0f \ubc30\ud3ec \uc8fc\uae30 \uac00\uc18d\ud654<\/em>\ub294 \uace7 \uc2dc\uc7a5 \ucd9c\uc2dc \uae30\uac04 \ub2e8\ucd95\uacfc \uace0\uac1d\uc5d0 \ub300\ud55c \ube60\ub978 \uc751\ub2f5\uc73c\ub85c \uc774\uc5b4\uc9d1\ub2c8\ub2e4. TeamCity\uc758 \ucd5c\uc801\ud654 \uae30\ub2a5\uc774 \uc5b4\ub5bb\uac8c \ud53c\ub4dc\ubc31 \ub8e8\ud504\ub97c \ub2e8\ucd95\ud558\uace0 \ub354 \ube48\ubc88\ud55c \ub9b4\ub9ac\uc2a4\ub97c \uac00\ub2a5\ud558\uac8c \ud558\ub294\uc9c0 \uc785\uc99d\ud558\uc138\uc694. \uc774\ub294 \uc2e0\uc18d\ud55c \ud601\uc2e0\uc744 \ud1b5\ud574 \uacbd\uc7c1 \uc6b0\uc704\ub97c \ucd94\uad6c\ud558\ub294 \uc870\uc9c1\uc5d0 \ud2b9\ud788 \ub9e4\ub825\uc801\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ub354 \ub098\uc740 \ud14c\uc2a4\ud2b8 \uc778\uc0ac\uc774\ud2b8\uc640 \ud488\uc9c8 \uac00\uc2dc\uc131<\/em>\uc740 \ud504\ub85c\ub355\uc158 \uc7a5\uc560\uc640 \uace0\uac1d\uc5d0\uac8c \uc601\ud5a5\uc744 \ubbf8\uce58\ub294 \uacb0\ud568\uc744 \uc904\uc5ec\uc90d\ub2c8\ub2e4. TeamCity\uc758 \ubd88\uc548\uc815\ud55c \ud14c\uc2a4\ud2b8 \ud0d0\uc9c0 \ubc0f \uc2e4\ud328 \ubd84\uc11d \uae30\ub2a5\uc740 \ud300\uc774 \ud488\uc9c8 \ubb38\uc81c\ub97c \uace0\uac1d\uc5d0\uac8c \ub3c4\ub2ec\ud558\uae30 \uc804\uc5d0 \uc2dd\ubcc4\ud558\ub3c4\ub85d \ub3c4\uc640\uc8fc\uba70, \uc9c0\uc6d0 \ubd80\ub2f4\uc744 \uc904\uc774\uace0 \ube0c\ub79c\ub4dc \uba85\uc131\uc744 \ubcf4\ud638\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\uc704\ud5d8 \uc644\ud654\ub97c \uc704\ud55c \ucee4\ubba4\ub2c8\ucf00\uc774\uc158 \uc804\ub7b5<\/strong><\/h3>\n\n\n\n<p>\ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \uc704\ud5d8\uc5d0 \ub300\ud55c \uacbd\uc601\uc9c4\uc758 \uc6b0\ub824\ub97c \uc815\uba74\uc73c\ub85c \ub3cc\ud30c\ud558\uace0 \uad6c\uccb4\uc801\uc778 \ud574\uacb0\ucc45\uc744 \uc81c\uc2dc\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>TeamCity\ub294 \ubcd1\ub82c CI \ud658\uacbd \uad6c\ucd95\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/em> \ub355\ubd84\uc5d0 \uae30\uc874 \uc6b4\uc601 \uccb4\uc81c\ub97c \uc911\ub2e8\ud560 \ud544\uc694 \uc5c6\uc774 \uc0c8 \uc2dc\uc2a4\ud15c\uc758 \uc548\uc815\uc131\uc744 \uc644\ubcbd\ud558\uac8c \uac80\uc99d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, \ube44\uc988\ub2c8\uc2a4 \uc5f0\uc18d\uc131\uc744 \uc704\ud611\ud558\ub294 \uc704\ud5d8\ud55c &#8216;\ube45\ubc45&#8217;\uc2dd\uc758 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \uc544\ub2d9\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ud300\uc758 \uc900\ube44\uac00 \uc644\ub8cc\ub420 \ub54c\uae4c\uc9c0 \uc804\uba74 \uc804\ud658\uc744 \uac15\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/em> \uc0c1\ud669\uc5d0 \ub9de\ucdb0 \ud1b5\uc81c \uac00\ub2a5\ud55c \ubc94\uc704 \ub0b4\uc5d0\uc11c \uc810\uc9c4\uc801\uc73c\ub85c \ub3c4\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud300\uc740 \ubd88\ud544\uc694\ud55c \uc2a4\ud2b8\ub808\uc2a4\uc640 \uc704\ud5d8\uc744 \uc720\ubc1c\ud558\ub294 \uc784\uc758\uc758 \uc77c\uc815\uc5d0 \ucad3\uae30\uae30\ubcf4\ub2e4 \ucda9\ubd84\ud55c \uc5ed\ub7c9\uacfc \ud655\uc2e0\uc774 \uc0dd\uacbc\uc744 \ub54c \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc9c4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ub2e8\uacc4\uc801 \ubc30\ud3ec \ubc29\uc2dd<\/em>\uc744 \ucc44\ud0dd\ud558\uba74 \ubb38\uc81c \ubc1c\uc0dd \uc2dc \ucd08\uae30 \ub2e8\uacc4\ub85c \uc989\uc2dc \ubcf5\uad6c\ud560 \uc218 \uc788\uc73c\uba70, \uac80\uc99d\ub41c \uc131\uacf5 \uc0ac\ub840\ub97c \ubc14\ud0d5\uc73c\ub85c \ub2e4\uc74c \ub2e8\uacc4\ub97c \uc548\uc815\uc801\uc73c\ub85c \ud655\uc7a5\ud574 \ub098\uac08 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ub9ac\ub354\uc2ed\uc774 \uc774\ub860\uc801\uc778 \uc608\uce21\uc774 \uc544\ub2cc \uc2e4\uc81c \uacb0\uacfc\uc5d0 \ub530\ub77c \uc9c4\ud589 \uc0c1\ud669\uc744 \ud3c9\uac00\ud558\uace0 \uc804\ub7b5\uc744 \uc870\uc815\ud560 \uc218 \uc788\ub3c4\ub85d \uc758\uc0ac\uacb0\uc815 \uc9c0\uc810\uc744 \ub2e4\ub2e8\uacc4\ub85c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\ube44\uc988\ub2c8\uc2a4 \uc0ac\ub840 \ud15c\ud50c\ub9bf<\/strong><\/h3>\n\n\n\n<p>\uc870\uc9c1\uc758 \ud2b9\uc218\ud55c \uc0c1\ud669\uacfc \ub9ac\ub354\uc2ed\uc758 \uc18c\ud1b5 \ubc29\uc2dd\uc5d0 \ub9de\ucdb0 \uc790\uc720\ub86d\uac8c \ubcc0\ud615\ud558\uc5ec \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud15c\ud50c\ub9bf\uc744 \ud655\uc778\ud574 \ubcf4\uc138\uc694. \uc774 \ud15c\ud50c\ub9bf\uc758 \ud3b8\uc9d1 \uac00\ub2a5\ud55c \uc0ac\ubcf8\uc740 <a href=\"https:\/\/docs.google.com\/document\/d\/12wXbl4POLT2JaXF_YP-QViKdJ-elz-QAy-AtDnTyKQ4\/edit?usp=sharing\" target=\"_blank\" rel=\"noopener\">\uc9c0\uc6d0 \ud30c\uc77c<\/a>\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\uc81c\uc548: CI\/CD \uc720\uc9c0 \uad00\ub9ac \ubd80\ub2f4 \uc808\uac10 \ubc0f \uac1c\ubc1c \uc18d\ub3c4 \ud5a5\uc0c1\uc744 \uc704\ud55c TeamCity \ub9c8\uc774\uadf8\ub808\uc774\uc158<\/strong><\/p>\n\n\n\n<p><strong>\ud575\uc2ec \uc694\uc57d<\/strong><\/p>\n\n\n\n<p>\uc800\ud76c \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1 \ud300\uc740 CI\/CD \uc778\ud504\ub77c\ub97c Jenkins\uc5d0\uc11c TeamCity\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\uae30 \uc704\ud55c \uc2b9\uc778\uc744 \uc694\uccad\ud569\ub2c8\ub2e4. \uc774\ubc88 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc740 \ud604\uc7ac \uc120\uc784 \uc5d4\uc9c0\ub2c8\uc5b4\uc758 \uc791\uc5c5 \uc2dc\uac04 \uc911 [\ub9e4\uc8fc X\uc2dc\uac04]\uc744 \ucc28\uc9c0\ud558\ub294 \uc720\uc9c0 \uad00\ub9ac \uc624\ubc84\ud5e4\ub4dc\ub97c \uc904\uc774\uace0, \ube4c\ub4dc \uc131\ub2a5\uc744 \uc57d [Y\ud37c\uc13c\ud2b8] \uac1c\uc120\ud558\uba70, \ud504\ub85c\ub355\uc158\uc5d0 \ub3c4\ub2ec\ud558\uae30 \uc804 \ucf54\ub4dc \ud488\uc9c8 \ubb38\uc81c\uc5d0 \ub300\ud55c \uac00\uc2dc\uc131\uc744 \uac1c\uc120\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ud604\uc7ac \uacfc\uc81c<\/strong><\/p>\n\n\n\n<p>\uc800\ud76c [\ud300 \uc774\ub984] \ud300\uc740 \ud604\uc7ac Jenkins \uc778\ud504\ub77c\uc5d0\uc11c [\ud604\uc7ac \uacaa\uace0 \uc788\ub294 \uace0\ucda9 \uc0ac\ud56d]\uc744 \uacbd\ud5d8\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, [\ud30c\uc774\ud504\ub77c\uc778 \uc0ac\ub840]\uc5d0\ub294 [\uad6c\uccb4\uc801\uc778 \uc720\uc9c0 \uad00\ub9ac \ubd80\ub2f4 \ub610\ub294 \uc131\ub2a5 \ubb38\uc81c]\uac00 \ub530\ub985\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubb38\uc81c\ub85c \uc778\ud574 [\uc608\uc0c1 \uc2dc\uac04] \uac00\ub7c9\uc758 \uc5d4\uc9c0\ub2c8\uc5b4\ub9c1 \uc5ed\ub7c9\uc774 \uc18c\ubaa8\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc2dc\uac04\uc740 [\uc804\ub7b5\uc801 \uc774\ub2c8\uc154\ud2f0\ube0c]\uc5d0 \ub354 \ud6a8\uacfc\uc801\uc73c\ub85c \ud22c\uc785\ub420 \uc218 \uc788\ub294 \uc790\uc6d0\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\uc81c\uc548 \uc194\ub8e8\uc158<\/strong><\/p>\n\n\n\n<p>TeamCity\ub294 \ud604\uc7ac \ub2f9\uc0ac\uac00 \uacaa\uace0 \uc788\ub294 \ubb38\uc81c\uc810\uc744 \ud574\uacb0\ud560 \uc218 \uc788\ub294 \ub0b4\uc7a5\ud615 \uae30\ub2a5\uc744 \uac16\ucd98 \ud604\ub300\uc801\uc778 CI\/CD \ud50c\ub7ab\ud3fc\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ul>\n<li><strong>\uc720\uc9c0 \uad00\ub9ac \ubd80\ub2f4 \uc808\uac10:<\/strong> Kotlin DSL \uc124\uc815\uc744 \ud1b5\ud574 \ud50c\ub7ec\uadf8\uc778 \ud638\ud658\uc131 \ubb38\uc81c\ub97c \ud574\uacb0\ud558\uace0, \ud30c\uc774\ud504\ub77c\uc778 \uac1c\ubc1c\uc744 \uc704\ud55c IDE \uc9c0\uc6d0\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\uc131\ub2a5 \ud5a5\uc0c1:<\/strong> \ub0b4\uc7a5\ub41c \ud14c\uc2a4\ud2b8 \ubcd1\ub82c\ud654\uc640 \uc9c0\ub2a5\ud615 \uce90\uc2dc \ucc98\ub9ac \uae30\ub2a5\uc744 \ud1b5\ud574 \ube4c\ub4dc \uc2dc\uac04\uc744 [\uc608\uc0c1 \ud37c\uc13c\ud2b8]\ub9cc\ud07c \ub2e8\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ud488\uc9c8 \uc778\uc0ac\uc774\ud2b8 \uac15\ud654:<\/strong> \uc790\ub3d9\ud654\ub41c \ubd88\uc548\uc815\ud55c \ud14c\uc2a4\ud2b8 \ud0d0\uc9c0 \ubc0f \uc885\ud569\uc801\uc778 \uc2e4\ud328 \ubd84\uc11d\uc744 \ud1b5\ud574 \ud300\uc774 \ubb38\uc81c\ub97c \ub354 \ube60\ub974\uac8c \uc2dd\ubcc4\ud558\ub3c4\ub85d \ub3c4\uc6b8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p><strong>\uc704\ud5d8 \uc644\ud654<\/strong><\/p>\n\n\n\n<p>\uc774 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc740 \uc704\ud5d8\ub3c4\uac00 \ub0ae\uc740 \uac80\uc99d\ub41c \uc811\uadfc \ubc29\uc2dd\uc744 \ucc44\ud0dd\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ul>\n<li><strong>\ubcd1\ub82c \uc6b4\uc601:<\/strong> \uc804\ud658 \uae30\uac04 \ub3d9\uc548 TeamCity\ub294 Jenkins\uc640 \ud568\uaed8 \uac00\ub3d9\ub418\ubbc0\ub85c, \ubb38\uc81c \ubc1c\uc0dd \uc989\uc2dc \ub864\ubc31\uc774 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\uc810\uc9c4\uc801 \ub3c4\uc785:<\/strong> \ud55c \ubc88\uc5d0 \ud558\ub098\uc529 \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\uba70, \ube44\ud575\uc2ec \uc2dc\uc2a4\ud15c\ubd80\ud130 \uc2dc\uc791\ud574 \uc811\uadfc \ubc29\uc2dd\uc744 \uac80\uc99d\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ud30c\uc77c\ub7ff \uac80\uc99d:<\/strong> \ucd08\uae30 \uad6c\ud604\uc740 \uc804\uc0ac\uc801 \ub3c4\uc785\uc5d0 \uc55e\uc11c \uac00\uce58\ub97c \uc99d\uba85\ud558\uae30 \uc704\ud574 [\uc704\ud5d8\ub3c4 \ub0ae\uc740 \ud2b9\uc815 \ud504\ub85c\uc81d\ud2b8]\uc5d0 \uc9d1\uc911\ud560 \uac83\uc785\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p><strong>\uc131\uacf5 \uba54\ud2b8\ub9ad<\/strong><\/p>\n\n\n\n<p>\ub2e4\uc74c\uacfc \uac19\uc740 \uba54\ud2b8\ub9ad\uc744 \ud1b5\ud574 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \uc131\uacf5\uc744 \uce21\uc815\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ul>\n<li><strong>\uc5d4\uc9c0\ub2c8\uc5b4\ub9c1 \ud6a8\uc728\uc131:<\/strong> CI\/CD \uc720\uc9c0 \uad00\ub9ac \uc2dc\uac04\uc744 [\ud604\uc7ac \uc218\uc900]\uc5d0\uc11c [\ubaa9\ud45c \uc218\uc900]\uc73c\ub85c \ub2e8\ucd95\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ube4c\ub4dc \uc131\ub2a5:<\/strong> \ud3c9\uade0 \ube4c\ub4dc \uc2dc\uac04\uc744 [\uc608\uc0c1 \ud37c\uc13c\ud2b8] \uac1c\uc120\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li><strong>\ud488\uc9c8 \uc9c0\ud45c:<\/strong> \ud14c\uc2a4\ud2b8 \ubc0f \ubc30\ud3ec \ubb38\uc81c\uc758 \uc2dd\ubcc4 \uc18d\ub3c4\ub97c \ub192\uc785\ub2c8\ub2e4.<\/li>\n<\/ul>\n\n\n\n<p><strong>\ud0c0\uc784\ub77c\uc778 \ubc0f \ud22c\uc790<\/strong><\/p>\n\n\n\n<ul>\n<li><strong>1\ub2e8\uacc4(\uc9c4\ub2e8):<\/strong> [\uae30\uac04] \u2013 \ud604\uc7ac \uc2dc\uc2a4\ud15c \uac10\uc0ac \ubc0f TeamCity \ud658\uacbd \uc124\uc815.<\/li>\n\n\n\n<li><strong>2\ub2e8\uacc4(\ud30c\uc77c\ub7ff):<\/strong> [\uae30\uac04] \u2013 \ub2e8\uc77c \ud504\ub85c\uc81d\ud2b8 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \ubc0f \uac80\uc99d.<\/li>\n\n\n\n<li><strong>3\ub2e8\uacc4(\ubc30\ud3ec):<\/strong> [\uae30\uac04] \u2013 \ud30c\uc77c\ub7ff \uacb0\uacfc\uc5d0 \ub530\ub978 \uc810\uc9c4\uc801 \ub9c8\uc774\uadf8\ub808\uc774\uc158.<\/li>\n<\/ul>\n\n\n\n<p><strong>\uad8c\uc7a5 \uc0ac\ud56d<\/strong><\/p>\n\n\n\n<p>1\ub2e8\uacc4 \uc9c4\ub2e8\uacfc \ud30c\uc77c\ub7ff \uad6c\ud604\uc744 \uba3c\uc800 \uc9c4\ud589\ud560 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4. [\uc608\uc0c1 \ub9ac\uc18c\uc2a4] \uaddc\ubaa8\uc758 \uc774 \uc800\uc704\ud5d8 \ucd08\uae30 \ud22c\uc790\ub294 \ub2f9\uc0ac\uc758 \uad6c\uccb4\uc801\uc778 \uc0ac\uc6a9 \uc0ac\ub840\uc5d0\uc11c TeamCity\uc758 \uc774\uc810\uc744 \uc785\uc99d\ud560 \uc218 \uc788\ub294 \uad6c\uccb4\uc801\uc778 \ub370\uc774\ud130\ub97c \uc81c\uacf5\ud558\uace0, \ud5a5\ud6c4 \ub3c4\uc785 \ud655\uc7a5\uc5d0 \ub300\ud55c \uc758\uc0ac\uacb0\uc815\uc5d0 \uadfc\uac70\ub97c \ub9c8\ub828\ud574 \uc904 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><strong>\ub2e4\uc74c \ub2e8\uacc4<\/strong><\/p>\n\n\n\n<p>\uc2b9\uc778 \uc2dc \ub2e4\uc74c\uc744 \uc218\ud589\ud558\uac8c \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<ol>\n<li>\uc885\ud569\uc801\uc778 Jenkins \ud658\uacbd \uac10\uc0ac\ub97c \uc2e4\uc2dc\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>TeamCity \ud3c9\uac00 \ud658\uacbd\uc744 \uad6c\ucd95\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>[\ud2b9\uc815 \ud504\ub85c\uc81d\ud2b8]\ub97c \ub300\uc0c1\uc73c\ub85c \ud30c\uc77c\ub7ff \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/li>\n\n\n\n<li>\uacb0\uacfc \ubc0f 3\ub2e8\uacc4 \uc9c4\ud589\uc744 \uc704\ud55c \uad8c\uc7a5 \uc0ac\ud56d\uc744 \ubcf4\uace0\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n\n\n\n<p>\ubcf8 \uc81c\uc548\uc11c\uc5d0 \ub300\ud574 \uad81\uae08\ud55c \uc810\uc774 \uc788\uc73c\uc2dc\uac70\ub098 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacc4\ud68d\uc758 \uc138\ubd80 \uc0ac\ud56d\uc774 \ud544\uc694\ud558\uc2dc\uba74 \uc5b8\uc81c\ub4e0 \ub9d0\uc500\ud574 \uc8fc\uc138\uc694.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\uacb0\ub860: \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc804\ub7b5\uc801 \uc131\uacf5\uc73c\ub85c \ub9cc\ub4e4\uae30<\/strong><\/h2>\n\n\n\n<p>Jenkins\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ub098\uc05c \ub3c4\uad6c\uac00 \uc544\ub2d9\ub2c8\ub2e4. \uc774\ub294 \uc9c0\uc18d\uc801 \ud1b5\ud569(CI)\uc758 \ucd08\uae30 \ub2e8\uacc4\uc5d0\uc11c \uc5c5\uacc4\uc5d0 \ud070 \uae30\uc5ec\ub97c \ud588\uc73c\uba70, \uc218\ub9ce\uc740 \ud300\uc774 \uc790\ub3d9\ud654\ub41c \ube4c\ub4dc \ubc0f \ubc30\ud3ec \uad00\ud589\uc744 \ucc44\ud0dd\ud560 \uc218 \uc788\ub3c4\ub85d \uc9c0\uc6d0\ud588\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uadf8 \uc2dc\ub300\uc758 \ub9ce\uc740 \ub3c4\uad6c\uac00 \uadf8\ub807\ub4ef\uc774, Jenkins\ub294 \uc624\ub298\ub0a0 \ud604\ub300\uc801 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ud300\uc758 \ud604\uc2e4\uacfc\ub294 \ub2e4\ub978 \uc81c\uc57d \uc870\uac74\uacfc \uae30\ub300\uce58\ub97c \uc704\ud574 \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud300\uc774 \uc81c\ud488 \uac1c\ubc1c\ubcf4\ub2e4 CI\/CD \uc778\ud504\ub77c \uc720\uc9c0 \uad00\ub9ac\uc5d0 \ub354 \ub9ce\uc740 \uc2dc\uac04\uc744 \uc4f0\uace0 \uc788\uac70\ub098, \ud30c\uc774\ud504\ub77c\uc778 \uc2e0\ub8b0\uc131 \ubb38\uc81c\uac00 \ube48\ubc88\ud558\uac8c \ubc1c\uc0dd\ud558\uac70\ub098, \ube4c\ub4dc \ubc0f \ud14c\uc2a4\ud2b8 \uc131\ub2a5\uc5d0 \ub300\ud55c \uac00\uc2dc\uc131\uc774 \ubd80\uc871\ud558\ub2e4\uba74, TeamCity\uc640 \uac19\uc740 \ud604\ub300\uc801 \ud50c\ub7ab\ud3fc\uc73c\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\ub294 \uac83\uc774 \uac1c\ubc1c\uc790 \uc0dd\uc0b0\uc131\uacfc \uc2dc\uc2a4\ud15c \uc2e0\ub8b0\uc131\uc5d0 \uc804\ub7b5\uc801\uc73c\ub85c \ud22c\uc790\ud558\ub294 \uac83\uc774\ub77c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc131\uacf5\uc801 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc758 \ud575\uc2ec\uc740 \uae09\uc791\uc2a4\ub7ec\uc6b4 \uae30\uc220 \uad50\uccb4\uac00 \uc544\ub2cc, \uccb4\uacc4\uc801\uc774\uace0 \uc704\ud5d8\uc774 \uad00\ub9ac\ub418\ub294 \ud504\ub85c\uc138\uc2a4\ub85c \uc811\uadfc\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc62c\ubc14\ub978 \uacc4\ud68d \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ub530\ub974\uba74 \uac1c\ubc1c \uc6cc\ud06c\ud50c\ub85c\uc640 \ud300 \ud6a8\uc728\uc131\uc744 \uac1c\uc120\ud558\uba70 \uc548\uc804\ud558\uac8c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><em>\ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc900\ube44 \uc0c1\ud0dc \uccb4\ud06c\ub9ac\uc2a4\ud2b8\ub85c \uc2dc\uc791<\/em>\ud558\uc5ec \ud604\uc7ac \uc0c1\ud669\uacfc \uc870\uc9c1\uc758 \uc900\ube44 \uc0c1\ud0dc\ub97c \uc815\ud655\ud558\uac8c \ud3c9\uac00\ud574 \ubcf4\uc138\uc694. \uc774 \uc790\uac00 \uc9c4\ub2e8\uc744 \ud1b5\ud574 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \ud300\uc5d0 \uc2e4\uc81c\ub85c \ub3c4\uc6c0\uc774 \ub420\uc9c0 \ud310\ub2e8\ud558\uace0, \ud50c\ub7ab\ud3fc \uc120\ud0dd\uacfc \uad00\uacc4\uc5c6\uc774 \uac1c\uc120\uc774 \ud544\uc694\ud55c \ubd80\ubd84\uc744 \ud30c\uc545\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>TeamCity\uc758 \ubc29\uc2dd\uc774 Jenkins\uc640 \uc5b4\ub5bb\uac8c \ub2e4\ub978\uc9c0, \uadf8\ub9ac\uace0 \uc5ec\ub7ec\ubd84\uc758 \uad6c\uccb4\uc801\uc778 \uc0ac\uc6a9 \uc0ac\ub840\uc5d0 \uc5b4\ub5a4 \uc774\uc810\uc744 \uc81c\uacf5\ud558\ub294\uc9c0 \uc774\ud574\ud558\uae30 \uc704\ud574 <em>Kotlin DSL \uc0d8\ud50c\ub85c \uc2e4\ud5d8<\/em>\ud574 \ubcf4\uc138\uc694. \ud0c0\uc785 \uc548\uc804\uc131\uacfc IDE \uc9c0\uc6d0\ub9cc\uc73c\ub85c\ub3c4 \ub9ce\uc740 \ud300\uc774 \ud559\uc2b5\uc744 \uc704\ud55c \ud22c\uc790\uac00 \ucda9\ubd84\ud55c \uac00\uce58\uac00 \uc788\ub2e4\ub294 \uac83\uc744 \ud655\uc2e0\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc2e4\uc81c \uc6cc\ud06c\ub85c\ub4dc\uc640 \uac1c\ubc1c \ud328\ud134\uc774 \uc801\uc6a9\ub41c \ud658\uacbd\uc5d0\uc11c <em>\uc9d1\uc911 \ud30c\uc77c\ub7ff \ud504\ub85c\uc81d\ud2b8\ub97c \uc2e4\ud589<\/em>\ud558\uc5ec TeamCity\uc758 \ud6a8\uc728\uc131\uc744 \uac80\uc99d\ud574 \ubcf4\uc138\uc694. \uc774\ub7ec\ud55c \uac1c\ub150 \uc99d\uba85(PoC) \ubc29\uc2dd\uc740 \ud300\uc758 \uc2e0\ub8b0\ub3c4\uc640 \uc804\ubb38\uc131\uc744 \uc313\ub294 \ub3d9\uc2dc\uc5d0, \ub370\uc774\ud130\uc5d0 \uae30\ubc18\ud55c \uc804\uc0ac\uc801 \ub3c4\uc785 \uacb0\uc815\uc744 \ub0b4\ub9b4 \uc218 \uc788\uac8c \ub3d5\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>TeamCity\ub294 Kotlin DSL\uc744 \ud1b5\ud55c \uac15\ub825\ud55c \ud30c\uc774\ud504\ub77c\uc778 \uc791\uc131, \ub0b4\uc7a5\ud615 \ud14c\uc2a4\ud2b8 \uc778\ud154\ub9ac\uc804\uc2a4, \uc2dc\uac01\ud654\ub41c \ud30c\uc774\ud504\ub77c\uc778 \uccb4\uc778\uc744 \uc9c0\uc6d0\ud558\ub294 \ud604\ub300\uc801\uc774\uace0 \ud655\uc7a5 \uac00\ub2a5\ud55c CI\/CD \ud50c\ub7ab\ud3fc\uc785\ub2c8\ub2e4. \ud300\uc758 \uaddc\ubaa8\uc640 \uad00\uacc4\uc5c6\uc774, TeamCity\ub294 \ub354 \ub098\uc740 \ub3c4\uad6c\uc640 \ub354 \uba85\ud655\ud55c \uac00\uc2dc\uc131, \uc904\uc5b4\ub4e0 \uc720\uc9c0 \uad00\ub9ac \uc624\ubc84\ud5e4\ub4dc\ub97c \ud1b5\ud574 \ub354 \uc548\uc815\uc801\uc73c\ub85c \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \ucd9c\uc2dc\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ubcf8 \uac00\uc774\ub4dc\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \ud504\ub808\uc784\uc6cc\ud06c\uc640 \ud15c\ud50c\ub9bf\uc740 \uc131\uacf5\uc801\uc778 \uc804\ud658\uc744 \uc2e4\ud589\ud558\ub294 \ub370 \ud544\uc694\ud55c \uccb4\uacc4\uc801\uc778 \uad6c\uc870\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \ub2e8, \uc870\uc9c1\uc758 \ud658\uacbd\uc740 \uc800\ub9c8\ub2e4 \ub2e4\ub974\uae30\uc5d0 \uac01\uc790\uc758 \uace0\uc720\ud55c \uc81c\uc57d \uc0ac\ud56d\uacfc \uc694\uad6c \uc0ac\ud56d\uc5d0 \ub9de\ucdb0 \ubcf8 \uac00\uc774\ub4dc\uc758 \uc811\uadfc \ubc29\uc2dd\uc744 \uc720\uc5f0\ud558\uac8c \uc870\uc815\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n\n\n\n<p>TeamCity\ub85c \uac1c\ubc1c \uc6cc\ud06c\ud50c\ub85c\ub97c \uac1c\uc120\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcfc \uc900\ube44\uac00 \ub418\uc168\ub098\uc694? \ud50c\ub7ab\ud3fc \uae30\ub2a5\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \uc815\ubcf4\ub294 <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/teamcity\/\" target=\"_blank\" rel=\"noreferrer noopener\">TeamCity \uc6f9\uc0ac\uc774\ud2b8<\/a>\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uad6c\uccb4\uc801\uc778 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uc694\uad6c \uc0ac\ud56d\uc744 \ub17c\uc758\ud558\uace0 \uc804\ud658 \uacc4\ud68d\uc5d0 \ub300\ud55c \uc804\ubb38\uc801 \uc548\ub0b4\ub97c \ubc1b\uc73c\ub824\uba74 <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/teamcity\/get-in-touch\/\" target=\"_blank\" rel=\"noreferrer noopener\">\uc800\ud76c \ud300\uc5d0 \ubb38\uc758<\/a>\ud574 \uc8fc\uc138\uc694.<\/p>\n","protected":false},"author":1191,"featured_media":683840,"comment_status":"closed","ping_status":"closed","template":"","categories":[1582,6365],"tags":[8979,8873],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/teamcity\/683837"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/teamcity"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/teamcity"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/1191"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=683837"}],"version-history":[{"count":4,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/teamcity\/683837\/revisions"}],"predecessor-version":[{"id":683991,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/teamcity\/683837\/revisions\/683991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/683840"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=683837"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=683837"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=683837"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=683837"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}