Á¨Å²½º ÆÄÀÌÇÁ¶óÀÎ »ç¿ëÇÏ¿© ÀÚµ¿ ¹èÆ÷ȯ°æ ¸¸µé¾îº¸±â!
Áö³ ±Û(Á¨Å²½º »ç¿ëÇÏ¿© ÀÚµ¿ ¹èÆ÷ȯ°æ ¸¸µé¾îº¸±â) ¿¡¼ Jenkins Build Pipeline À¸·Î ÀÚµ¿ ¹èÆ÷ ½Ã½ºÅÛÀ» ±¸ÃàÇÏ´Â °Í¿¡ ´ëÇØ °øÀ¯¸¦ Çß¾ú½À´Ï´Ù.
´ñ±ÛÀ» ÅëÇØ Jenkins Pipeline
À̶ó´Â°Ô ÀÖ´Ù´Â °ÍÀ» óÀ½ ¾Ë°í µÇ°í..!!
±× ¶§¼¾ß, Á¨Å²½º 2.0 ÀÇ °¡Àå Å« º¯È°¡ Jenkins Pipeline
À̶ó´Â °ÍÀ» ¾Ë°Ô µÇ¾ú½À´Ï´Ù. ÀÌ ¶§ºÎÅÍ ¸¶À½ÀÇ ¼÷Á¦·Î °¡Áö°í ÀÖ¾úÁö¸¸, ÃÖ±Ù ºí·Î±× Åë°è·Î Á¨Å²½º ºí·Î±ë ±ÛÀÇ ¹æ¹®ÀÌ ³ô´Ù´Â °ÍÀ» ¾Ë°í ±ÞÇÏ°Ô(groovy¸¦ Á¦´ë·Î ¼÷ÁöÇÏÁö ¸øÇÑ Ã¤..¤Ì¤Ì) ±ÛÀ» ÀÛ¼ºÇÏ°Ô µÇ¾ú½À´Ï´Ù.
(ÃÖ±Ù ÀÌ Â©À» ±²ÀåÈ÷ ¸¹ÀÌ ¾²°Ô µË´Ï´Ù..)
Jenkins Pipeline
À̶õ ½ºÅ©¸³Æ®¸¦ ÅëÇØ ÆÄÀÌÇÁ¶óÀÎÀÇ È帧À» Á¤ÀÇÇÏ´Â ±â´ÉÀÔ´Ï´Ù. ÀÌ ½ºÅ©¸³Æ®´Â groovy
·Î ÀÛ¼ºµÇ¸ç, Pipeline DSLÀ» ÅëÇØ Àü´Þ ÆÄÀÌÇÁ¶óÀÎÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
Jenkins Pipeline¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº »ý·«!
±×¸®ÇÏ¿©, Àú ¶ÇÇÑ Áö³ Build Pipeline
À¸·Î ÀÛ¼ºÇß´ø ½Ã½ºÅÛÀ», Pipeline Script
±â¹ÝÀ¸·Î ¸ðµÎ ÀüȯÇÏ¿´½À´Ï´Ù.
±¸ÃàÇÑ ³»¿ë°ú °á°ú¸¦ °øÀ¯ÇÕ´Ï´Ù.
±¸ÃàÇÏ°íÀÚ Çϴ ȯ°æ
±¸ÃàÇÏ°íÀÚ Çϴ ȯ°æÀº Áö³ Build Pipeline À¸·Î ±¸ÃàÇßÀ» ´ç½ÃÀÇ Á¶°ÇÀ» ±×´ë·Î ±¸ÃàÇÏ´Â °Í ÀÔ´Ï´Ù.
Git ¿¬µ¿À̳ª, Gradle, Maven ºôµå µî ±âº»ÀûÀÎ Á¶°ÇÀ» Á¦¿ÜÇÏ°í °¡Àå ¿øÇß´ø Á¶°ÇÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
- °øÅë ³»¿ëÀ» ¸ðµâÈÇÏ¿© °ø¿ëÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ±¸Á¶.
- °¢ ´Ü°è¿¡ ´ëÇÑ ¼öµ¿ ½ÇÇàÀÌ °¡´ÉÇÑ ±¸Á¶.
±¸Ãà
Jenkins File
Á¨Å²½º´Â Pipeline Script
¸¦ Admin Web¿¡¼ Á÷Á¢ ÀÛ¼ºÇÏ¿© ÀúÀåÇÏ´Â ¹æ¹ý°ú, GitÀ» ÅëÇØ JenkinsFile À» Àд ¹æ¹ýÀ» Á¦°øÇÕ´Ï´Ù.
¸¸µé°íÀÚ ÇÏ´Â ½ºÅ©¸³Æ®´Â, ¹èÆ÷ Flow°¡ Áö³ªÄ¡°Ô ´Ù¸£Áö ¾ÊÀº ÇÁ·ÎÁ§Æ®¿¡ ÇÑÇÏ¿©, ¸ðµÎ µ¿ÀÏÇÑ ½ºÅ©¸³Æ®¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºÇÏ¿© ÆĶó¹ÌÅÍ ±â¹ÝÀ¸·Î ½ÇÇàµÉ ¼ö ÀÖ´Â ½ºÅ©¸³Æ® ÀÔ´Ï´Ù.
±×·¸±â ¶§¹®¿¡ ÀúÀå¼Ò¿¡ ´ëÇÑ ¼öÁ¤¸¸À¸·Î ¸ðµç ÇÁ·ÎÁ§Æ®¿¡ Àû¿ëÇÒ ¼ö ÀÖ´Â GitÀ» ÅëÇØ JenkinsFile À» Àд ¹æ¹ýÀ» »ç¿ëÇÕ´Ï´Ù.
groovy »ç¿ëÀÌ ¹Ì¼÷ÇÏ¿©, Äڵ尡 ´õ·¯¿î Á¡Àº ¾çÇØ ºÎŹµå¸³´Ï´Ù. groovy »ç¿ë¼ºÀ» ¼÷ÁöÇÏ¿© ÃßÈÄ ¸®ÆåÅ丵ÇÒ ¿¹Á¤ÀÔ´Ï´Ù.
Stage
Á¨Å²½º Pipeline Script
´Â ½ÇÇà¿¡ ´ëÇÑ ´ÜÀ§ÀÎ node
¿Í ÆÄÀÌÇÁ¶óÀÎÀ» ±¸¼ºÇÏ´Â stage
°¡ ÀÖ½À´Ï´Ù. node
¿Í stage
°£¿¡´Â ¸ÕÀú ¼±¾ðµÇ¾ß ÇÏ´Â °ÍÀº ¾øÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
node('', {
stage('example1', {
echo ""
})
})
stage('example2', {
node('', {
echo ""
})
})
Pipeline Script
´Â º´·Ä ½ÇÇàÀ» Áö¿øÇϱ⠶§¹®¿¡ ½ÇÇà ´ÜÀ§¸¦ ºÐ¸®ÇؾßÇÒ °æ¿ì node
¸¦ »ç¿ëÇÏ¿© ½ÇÇà ´ÜÀ§¸¦ ºÐ¸®ÇÒ ¼ö ÀÖ°í, Pipeline
ÀÇ ´Ü°è¸¦ stage
·Î ±¸¼ºÇÏ°Ô µË´Ï´Ù.
ÀÚµ¿ ¹èÆ÷¸¦ À§ÇØ ¸¸µå·Á°í ÇÏ´Â Stage´Â ¾Æ·¡¿Í °°½À´Ï´Ù.
Flow Check
-Parameter Check
-Git CheckOut
-Test
-Build
-Deploy
-Switch
ÆĶó¹ÌÅÍ Á¤ÀÇ
Flow
°¢ Àâ ½ÇÇà Pipeline¿¡¼ ÁøÇàÇÒ Stage
¸¦ Á¤ÀÇÇÏ´Â ÆĶó¹ÌÅ͵éÀÔ´Ï´Ù.
USE_TEST
: Test ´Ü°è »ç¿ë À¯¹«
USE_BUILD
: Build ´Ü°è »ç¿ë À¯¹«
USE_DEPLOY
: Deploy ´Ü°è »ç¿ë À¯¹«
USE_SWITCH
: Switch ´Ü°è »ç¿ë À¯¹«
Module
°¢ ÇÁ·ÎÁ§Æ® Pipeline Job¿¡¼ ³Ñ°ÜÁÖ¾î¾ß ÇÒ ¸ðµâ Á¤º¸ÀÔ´Ï´Ù.
GRADLE_VERSION
: Gradle Version
JAVA_VERSION
: Java Version
NODE_VERSION
: Node Version (Optional)
SLACK_TOKEN
: Slack Token (Optional)
Git
¼Ò½º Check Out À» À§ÇÑ Á¤º¸ÀÔ´Ï´Ù.
GIT_URL
: Git Repository Url
BRANCH_SELECTOR
: ´ë»ó Branch
Deploy
±×¸®°í °¢ ¹èÆ÷ ȯ°æ¿¡ µû¶ó Á¤ÀǵǾî¾ß ÇÏ´Â ÆĶó¹ÌÅ͵éÀÌ ÀÖ½À´Ï´Ù. ¾Æ·¡ ÆĶó¹ÌÅÍ´Â Á¦°¡ ¹èÆ÷ÇؾßÇÒ È¯°æ¿¡ ÇÊ¿äÇÑ ÆĶó¹ÌÅÍ·Î °¢ ¹èÆ÷ ȯ°æ¿¡ ¸Â°Ô ±¸¼ºÇÏ½Ã¸é µË´Ï´Ù.
CONFIG_NAME
, REMOTE_PATH
, TARGET_USER
, TARGET_SERVER
º¯¼ö Á¤ÀÇ
Flow
def useTest = true
def useBuild = true
def useDeploy = true
def useSwitch = true
°¢ ´Ü°è¿¡ ´ëÇÑ ¼öµ¿ ½ÇÇàÀÌ °¡´ÉÇÑ ±¸Á¶
¸¦ À§ÇØ »ç¿ëµÇ´Â º¯¼öµéÀÔ´Ï´Ù. ÀÌ º¯¼öµéÀº Stage
³»ºÎ¿¡¼ È®À뵃 °Í ÀÔ´Ï´Ù.(Stage¸¦ ºÐ±âó¸®Çϸé Àüü Flow°¡ ¸Á±âÁö±â ¶§¹®¿¡) ±âº» °ªÀº ¸ðµÎ ½ÇÇàµÇ´Â °ÍÀ̸ç, ÀÌÈÄ ¾Æ·¡¿¡¼ ¼³¸íÇÒ Pipeline JobÀ» ¸¸µå´Â °úÁ¤¿¡¼ ÀÌ °ªµéÀÌ ¾î¶»°Ô ¾²ÀÏÁö ´Ù½Ã Çѹø ¼³¸íÇϵµ·Ï ÇÏ°Ú½À´Ï´Ù.
Module
def useNode = true
def useSlack = true
ÇØ´ç ¸ðµâÀ» »ç¿ëÇÒÁö °áÁ¤ÇÏ´Â º¯¼öÀÔ´Ï´Ù. ¸ðµç ÇÁ·ÎÁ§Æ®°¡ Gradle Build¶ó´Â °¡Á¤ÇÏ¿¡ Àû¼ºÇÏ¿©, useGradle
, useMaven
´Â ÀÛ¼ºÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ÇÊ¿äÇÏ´Ù¸é ÀÛ¼ºÇϼż »ç¿ëÇϸé ÁÁÀ» °Í °°½À´Ï´Ù.
1. Flow Check
ÀÌ °úÁ¤Àº ÇØ´ç ºôµå°¡ ¾î¶² ½ºÅ×ÀÌÁö¸¦ ½ÇÇàÇÏ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖµµ·Ï ÀÛ¼ºÇÑ Stage
ÀÔ´Ï´Ù.
stage("Flow Check", {
try {
println " TEST FLOW = $USE_TEST"
useTest = "$USE_TEST" == "true"
}
catch (MissingPropertyException e) {
println " TEST FLOW = true"
}
try {
println " BUILD FLOW = $USE_BUILD"
useBuild = "$USE_BUILD" == "true"
}
catch (MissingPropertyException e) {
println " BUILD FLOW = true"
}
try {
println " DEPLOY FLOW = $USE_DEPLOY"
useBuild = "$USE_DEPLOY" == "true"
}
catch (MissingPropertyException e) {
println " BUILD DEPLOY = true"
}
try {
println " SWITCH FLOW = $USE_SWITCH"
useBuild = "$USE_SWITCH" == "true"
}
catch (MissingPropertyException e) {
println " SWITCH FLOW = true"
}
})
$
·Î ½ÃÀÛÇÏ´Â À̸§µéÀº ÆĶó¹ÌÅÍ·Î ³Ñ°Ü¹ÞÀ» ȯ°æ º¯¼öµéÀÔ´Ï´Ù. ÇØ´ç ȯ°æº¯¼ö°¡ ¼³Á¤µÇÁö ¾Ê¾ÒÀ» ¶§ MissingPropertyException
ÀÌ ¹ß»ýÇÏÁö¸¸, ÀÌ °ªµéÀº ¾øÀ¸¸é Default °ªÀ¸·Î µ¿ÀÛÇϵµ·Ï ¿¹¿Ü󸮸¦ ÇÏ¿´½À´Ï´Ù.
2. ParameterCheck
stage("Parameter Check", {
println " BUILD_USER = " + BUILD_USER
println " CONFIG_NAME = $CONFIG_NAME"
println " REMOTE_PATH = $REMOTE_PATH"
println " TARGET_USER = $TARGET_USER"
println " TARGET_SERVER = $TARGET_SERVER"
println " GIT_URL = $GIT_URL"
println " BRANCH_SELECTOR = $BRANCH_SELECTOR"
println " GRADLE_VERSION = $GRADLE_VERSION"
println " JAVA_VERSION = $JAVA_VERSION"
env.JAVA_HOME="${tool name : JAVA_VERSION}"
env.PATH="${env.JAVA_HOME}/bin:${env.PATH}"
try {
println " SLACK_TOKEN = $SLACK_TOKEN"
}
catch (MissingPropertyException e) {
useSlack = false
}
try {
println " NODE_VERSION = $NODE_VERSION"
}
catch (MissingPropertyException e) {
useNode = false
}
})
ÆĶó¹ÌÅ͸¦ °ËÁõÇÏ´Â Stage
ÀÔ´Ï´Ù. ȯ°æº¯¼ö°¡ ¾øÀ» ¶§´Â ¿¹¿Ü¸¦ ¹ß»ý½ÃÅ°¹Ç·Î, Çʼö »ç¿ë ÆĶó¹ÌÅÍ¿¡ ´ëÇؼ´Â ¿¹¿Ü󸮸¦ ÇÏÁö ¾Ê½À´Ï´Ù.
3. Git CheckOut
stage("Git CheckOut", {
if (useTest || useBuild) {
println "Git CheckOut Started"
checkout(
[
$class : 'GitSCM',
branches : [[name: '${BRANCH_SELECTOR}']],
doGenerateSubmoduleConfigurations: false,
extensions : [],
submoduleCfg : [],
userRemoteConfigs : [[url: '${GIT_URL']]
]
)
println "Git CheckOut End"
} else {
println "Git CheckOut Skip"
}
})
³Ñ°Ü¹ÞÀº GitUrl
°ú Branch
¸¦ »ç¿ëÇÏ¿© Git Check Out À» ½ÇÇàÇÏ´Â Stage
ÀÔ´Ï´Ù. Test
³ª Build
Áß Çϳª¶óµµ Flow¿¡ Æ÷ÇԵǾî ÀÖ´Ù¸é ÀÌ ´Ü°è°¡ ½ÇÇàµË´Ï´Ù.
4. Test
stage('Test') {
if (useTest) {
println "Test Started"
try {
sh "${tool name: GRADLE_VERSION, type: 'hudson.plugins.gradle.GradleInstallation'}/bin/gradle test -Dorg.gradle.daemon=true"
} finally {
junit allowEmptyResults: true, keepLongStdio: true, testResults: 'build/test-results/*.xml'
}
println "Test End"
} else {
println "Test Skip"
}
}
³Ñ°Ü¹ÞÀº Gradle VersionÀ» »ç¿ëÇÏ¿©, test Task ¸¦ ½ÇÇà½Ãŵ´Ï´Ù. Å×½ºÆ®°¡ ¿Ï·áµÈ ÈÄ¿¡´Â Å×½ºÆ® °á°ú¸¦ ¼öÁýÇÕ´Ï´Ù. testResults´Â °¢ ÇÁ·ÎÁ§Æ® ȯ°æ¿¡ ¸Â´Â Path
¸¦ ÀÛ¼ºÇÕ´Ï´Ù.
5. Deploy, Switch(Manual Flow)
µÎ Stage
´Â µ¶¸³µÈ Stage
ÀÌÁö¸¸ ÀÚ¼¼ÇÑ ³»¿ëÀ» °ø°³ÇÒ ¼ö ¾øÀ¸¹Ç·Î, °£´ÜÈ÷ ÀÛ¼ºÇÕ´Ï´Ù.
stage("Deploy", {
if(useDeploy) {
println "Deploy Started"
sh "****"
println "Deploy End"
} else {
println "Deploy Skip"
}
})
stage("Switch", {
if(useSwitch) {
try {
input("½ºÀ§Äª ÇϽðڽÀ´Ï±î?")
println "Switch Started"
sh "****"
println "Switch End"
} catch (Exception e) {
println "Switch Skip"
}
} else {
println "Switch Skip"
}
})
Manual Flow
¸¦ À§ÇØ inputÀ» »ç¿ëÇÕ´Ï´Ù. flow´Â inputÀ» ¸¸³ª°ÔµÇ¸é, »ç¿ëÀÚ°¡ proceed
ȤÀº abort
¸¦ ¼±ÅÃÇϱâ Àü±îÁö´Â ´ë±â »óÅ·Πµé¾î°©´Ï´Ù.
abort
¸¦ ¼±ÅÃÇÏ¸é ¿¹¿Ü°¡ ¹ß»ýÇÏÁö¸¸, ±×·¸´Ù°í ÇØ´ç Stage
°¡ ½ÇÆÐÇÑ °ÍÀº ¾Æ´Ï¶ó°í »ý°¢ÇÏ¿© ¿¹¿Ü󸮸¦ ÀÛ¼ºÇÏ¿´½À´Ï´Ù.
±âŸ. Node »ç¿ëÇϱâ
gradle ºôµå °úÁ¤¿¡ node ¸¦ »ç¿ëÇØ¾ß ÇÒ task°¡ ±¸¼ºµÇ¾î ÀÖÀ» ¶§ Nvm Wrapper PluginÀ» »ç¿ëÇÕ´Ï´Ù.
if (useNode) {
nvm('version' : "${NODE_VERSION}") {
stage('Test') {
if (useTest) {
println "Test Started"
~~
println "Test End"
} else {
println "Test Skip"
}
}
stage("Build", {
if(useBuild) {
println "Build Started"
~~
println "Build End"
} else {
println "Build Skip"
}
})
}
} else {
stage('Test') {
if (useTest) {
println "Test Started"
~~
println "Test End"
} else {
println "Test Skip"
}
}
stage("Build", {
if(useBuild) {
println "Build Started"
~~
println "Build End"
} else {
println "Build Skip"
}
})
}
nvmÀÌ {}
scope ¾È¿¡¼¸¸ »ç¿ë °¡´ÉÇÏ¿© À§¿Í °°ÀÌ else¹®¿¡ ¶È°°Àº Áߺ¹ Äڵ尡 ¹ß»ýÇÏ´Â ·ÎÁ÷À» ÀÏ´Ü »ç¿ëÇÏ¿´½À´Ï´Ù¡¦
groovy ÇнÀ ÈÄ ¸®ÆåÅ丵À»..¤Ì¤Ì
Pipeline Template Job ¸¸µé±â
À§ÀÇ ½ºÅ©¸³Æ®´Â ¸¹Àº ÆĶó¹ÌÅ͸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù. ÇÁ·ÎÁ§Æ®¸¦ Ãß°¡ÇؾßÇÒ ¶§¸¶´Ù ¸Å¹ø ÆĶó¹ÌÅ͸¦ Ãß°¡ÇÏ´Â ³ë°¡´Ù¸¦ ÇÇÇϱâ À§ÇÏ¿©, Template·Î »ç¿ëÇÒ ¼ö ÀÖ´Â Pipeline Template Job
À» ¸¸µå·Á°í ÇÕ´Ï´Ù.
»ý¼º
new Job¿¡¼ PipelineÀ» ¼±ÅÃÇÕ´Ï´Ù.
Jenkins File Git SCM ¿¬µ¿
Pipeline script from SCM ¸¦ »ç¿ëÇÏ¿©, ÇÊ¿äÇÑ Á¤º¸¸¦ ä¿öÁÝ´Ï´Ù.
Script Path
¿¡ ÀÛ¼ºÇÑ Jenkins File °æ·Î¸¦!
Parameter ¼³Á¤
Flow
ĸÃĺ»°ú À§¿¡¼ ¼³¸íÇÑ ½ºÅ©¸³Æ®°¡ Á¶±Ý ´Ù¸¨´Ï´Ù. SCP, DRONE, QUEENÀÌ DEPLOY, SWITCH ÀÔ´Ï´Ù. ÇØ´ç ÆĶó¹ÌÅ͸¦ Boolean Parameter
·Î ¼³Á¤ÇÕ´Ï´Ù.
Module
ÀÌ ´Ü°è¿¡¼´Â Extensible Choice Parameter plugin¸¦ Àá½Ã ¼Ò°³ÇÏ°Ú½À´Ï´Ù.
Extensible Choice Parameter plugin
Àº Global ·Î µî·ÏÇسõÀº Choice Parameter ¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ½À´Ï´Ù. Áï Choice Parameter ÀÌÁö¸¸, Áß¾Ó °ü¸®°¡ °¡´ÉÇϵµ·Ï Á¦°øÇÏ´Â Plugin ÀÔ´Ï´Ù.
ÀÌ PluginÀ» ÅëÇØ Jenkins Global Tool InstallationÀ» ¿¬µ¿ÇÑ µíÇÑ(?) È¿°ú¸¦ ÁÖ±â À§ÇÔÀÔ´Ï´Ù. System Config
¿¡¼ Jenkins Global Tool Installation
¿¡ Á¤ÀÇÇÑ À̸§À¸·Î ¸ÅĪÇÏ¿© Extensible Choice Parameter
¸¦ À§¿Í °°ÀÌ ±¸¼ºÇß½À´Ï´Ù.
±×¸®°í Extensible Choice
·Î ¼³Á¤ÇÑ Choice Parameter ¸¦ Á¤ÀÇÇÏ¿´½À´Ï´Ù.
Jenkins Global Tool Installation
°ü·Ãpipeline script
¿¡¼ »ç¿ë °¡´ÉÇÑ Choice Parameter PluginÀÌ ÀÖ´Ù¸é °øÀ¯ ºÎŹµå¸³´Ï´Ù..¤Ì¤Ì(JDK Parameter PluginÀ» ½ÃµµÇßÀ¸³ª ±â´ë¿Í ´Ù¸£°Ô µ¿ÀÛÇÏ¿© Àû¿ëÇÏÁö ¸øÇß½À´Ï´Ù.)
Git
String Parameter
·Î ¾Æ·¡ Á¤º¸¸¦ ±¸¼ºÇÕ´Ï´Ù.
${BRANCH_TO_BUILD}
ȯ°æ º¯¼ö´Â HookÀ¸·Î ÀÎÇØ ¹ß»ýÇÑ Branch¸¦ Àд ȯ°æ º¯¼öÀÔ´Ï´Ù. Template¿¡ À¯ÀÏÇÏ°Ô ÀÌ ºÎºÐ¸¸ µðÆúÆ® Value¸¦ ÁöÁ¤ÇØÁÝ´Ï´Ù. (ĸó º»¿¡¼ Default Value°¡ ä¿öÁø °÷ÀÌ ¸î ±ºµ¥ ÀÖÁö¸¸, ½ÇÁ¦ °è¼Ó Àç»ç¿ëµÇ´Â °ÍÀº, Branch »ÓÀÔ´Ï´Ù.)
Template »ç¿ëÇϱâ
Git °èÁ¤ ¿¬µ¿ ¹× Hook ¼³Á¤Àº »ý·«ÇÕ´Ï´Ù
Job »ý¼º
new Job¿¡¼ Á¦ÀÏ ¾Æ·¡ Copy fromÀ» ÅëÇØ Template JobÀ» º¹»çÇÕ´Ï´Ù.
±âº» °ª ä¿ö³Ö±â
´ëºÎºÐÀÇ ¼³Á¤Àº ±âº» ¼³Á¤À» À¯ÁöÇÏ°í, ÆĶó¹ÌÅÍÀÇ Default Value
¸¸ °¢ ÇÁ·ÎÁ§Æ®¿¡ ¸Â°Ô ¼³Á¤ÇÏ¿©ÁÝ´Ï´Ù.
¼öµ¿ ½ÇÇà
¼öµ¿À¸·Î JobÀ» ºôµåÇÏ·Á¸é Build with Parameter
¸¦ »ç¿ëÇÕ´Ï´Ù.
±×·¯¸é ¾Æ·¡¿Í °°ÀÌ ±âº» °ªµéÀÌ Ã¤¿öÁø »óÅ·Π³ª¿À¸ç ½ÇÇàÀ» ÇÏ¸é ³¡!
´Ù½Ã ½ÇÇà
ÀÌ¹Ì ÁøÇàµÈ Job¿¡ ´ëÇؼ ´Ù½Ã ½ÇÇàÇÏ·Á¸é Rebuild Plugin À» »ç¿ëÇÕ´Ï´Ù.
ÀÌ Ç÷¯±×ÀÎÀº ÀÌ¹Ì Á¾·áµÈ ½ÇÇà ÀâÀ» ´Ù½Ã ºôµåÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â Ç÷¯±×ÀÎÀÔ´Ï´Ù. Parameterized
¸¦ Áö¿øÇÏ¿©, ÇØ´ç ½ÇÇà ÀâÀÌ °¡Áö°í ÀÖ´ø ÆĶó¹ÌÅ͸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ¼öÁ¤µµ °¡´ÉÇÕ´Ï´Ù.
»ç¿ë ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù. Ç÷¯±×ÀÎÀ» ¼³Ä¡Çϸé, ¾Æ·¡¿Í °°ÀÌ ÆÄÀÌÇÁ ¶óÀÎ ºäÀÇ ½ÇÇà Àâ¿¡ Rebuild ÅÇÀÌ º¸ÀÌ°Ô µË´Ï´Ù.
Ŭ¸¯ÇÏ°Ô µÇ¸é ÇØ´ç Àâ ½ÇÇà±â·ÏÀÌ °¡Áö°í ÀÖ´ø ÆĶóÀÌÅÍ°¡ ±×´ë·Î ±âº» ¼³Á¤ÀÌ µÇ¾î µ¿ÀÏÇÑ Á¶°ÇÀ¸·Î ÀâÀÇ ½ÇÇàÀÌ °¡´ÉÇÕ´Ï´Ù.
Script ±â´É È®ÀÎ!
Pipeline Job
ÀÌ ±¸¼ºµÈ ÈÄ JobÀÌ ½ÇÇàµÇ¸é Stage View
¿¡ ¾Æ·¡¿Í °°Àº ȸéÀ» º¸¿©ÁÝ´Ï´Ù! ±âÁ¸ Build Pipeline
¿¡¼´Â View
¸¦ µû·Î ¸¸µé¾î¾ßÇؼ ºÒÆíÇß¾ú½À´Ï´Ù.
Flow
¼öµ¿ ½ÇÇà ½Ã ´Ü°è¸¦ Test ´Ü°è¸¦ ½ºÅµÇϸé, ¼³Á¤ÇÑ ½ºÅ©¸³Æ®´ë·Î ¾Æ·¡¿Í °°ÀÌ!
¼öµ¿ ÆÄÀÌÇÁ¶óÀÎ
À§¿Í °°ÀÌ ¼öµ¿ ´Ü°è¿¡¼ ´ë±âÇϸç, ¹öÆ°ÀÌ Á¦°øµË´Ï´Ù!
TIP
IntelliJ¿¡¼ GDSL »ç¿ëÇϱâ
https://gist.github.com/arehmandev/736daba40a3e1ef1fbe939c6674d7da8
gdsl ´Ù¿î
Snippet Generator
Pipeline gdsl ·Î Äڵ带 ÀÛ¼ºÇϱ⠾î·Æ´Ù¸é, Á¦°øÇØÁÖ´Â Snippet Generator¸¦ »ç¿ëÇÕ´Ï´Ù.
Build Pipeline
»ç¿ë¼ºÀ¸·Î groovy script ¸¦ »ý¼ºÇØÁÖ¸ç, ´Ù¾çÇÑ snippet ÀÌ ÀÖ½À´Ï´Ù! Àú °°Àº °æ¿ì´Â Docs
¿Í Stack Overflow
À» ã¾Æº¸¸é¼ ÇßÀ» ¶§ »ý±â´ø ¿À·ùµéÀÌ, Á¤¸» ½±°Ô ÇØ°á..!
¸¶¹«¸®
Jenkins Pipeline
Àº °·ÂÇß½À´Ï´Ù. Build Pipeline
À¸·Î ¸¸µé¾ú´ø ¸ðµç ±â´ÉÀ» ±×´ë·Î ¿Å±æ ¼ö ÀÖÀ» »Ó´õ¶ó, Á¦¾àÀ¸·Î ¸·ÇôÀÖ´ø ±â´ÉÀ» ½ºÅ©¸³Æ® ±â¹ÝÀ̱⿡ ÇØ°áÇÒ ¼ö ÀÖ¾ú½À´Ï´Ù. °í·Î Jenkins Pipeline
Àº ¹¹µçÁö °¡´ÉÇÏ´Ù!
±×·¯³ª ´ÜÁ¡µµ Á¸ÀçÇÏ´Â °Í °°½À´Ï´Ù.
ÀÏ´Ü groovy¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù´Â Á¡! snippet »ý¼º±â°¡ ¾î´À Á¤µµ ÀÌ ºÎºÐÀ» ÇؼÒÇØÁÖÁö¸¸, groovy¿¡ ´ëÇÑ °ÅºÎ°¨, ȤÀº ¾ð¾î¸¦ ¹è¿ì°í ½ÍÁö ¾Ê´Ù¸é Build Pipeline
À¸·Î ±¸¼ºÇÏ´Â °ÍÀÌ ½±½À´Ï´Ù. ½ºÅ©¸³Æ® ÀÛ¼º¾øÀÌ Å¬¸¯¸¸(?)À¸·Î ¸¸µé ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
¶Ç ÇÑ°¡Áö ´ÜÁ¡Àº ¾ÆÁ÷µµ Áö¿øÇÏÁö ¾Ê´Â Plugin
ÀÌ ¸¹´Ù´Â Á¡ ÀÔ´Ï´Ù. ÀαâÀÖ´Â Ç÷¯±×ÀÎ Áß¿¡¼µµ Jenkins Pipeline
À» Áö¿øÇÏÁö ¾Ê°Å³ª, ¾ÈÁ¤ÀûÀÌÁö ¾ÊÀº Ç÷¯±×ÀεéÀ» ²Ï º¸¾Ò½À´Ï´Ù. ÀÌ ºÎºÐÀº ºÐ¸íÈ÷ ½Ã°£ÀÌ ÇØ°áÇØÁÖ¸®¶ó! ¹Ï½À´Ï´Ù.
Àú´Â °³ÀÎÀûÀ¸·Î Jenkins Pipeline
ÀÌ ±²ÀåÈ÷ ¸¶À½¿¡ µì´Ï´Ù. maven
º¸´Ù gradle
À» ¼±È£Çϵí, °³¹ßÀÚ Ä£ÈÀû
+ CoC
°¡ Àú´Â ÁÁ½À´Ï´Ù.
Ãâó: http://kingbbode.tistory.com/42?category=782132 [°³¹ß³ëÆ® - kingbbode]