ÃֽŠ°Ô½Ã±Û(JAVA)
2018.06.15 / 19:58

Á¨Å²½º ÆÄÀÌÇÁ¶óÀÎ »ç¿ëÇÏ¿© ÀÚµ¿ ¹èÆ÷ȯ°æ ¸¸µé¾îº¸±â!

¸®¾ó¸®
Ãßõ ¼ö 274

Áö³­ ±Û(Á¨Å²½º »ç¿ëÇÏ¿© ÀÚµ¿ ¹èÆ÷ȯ°æ ¸¸µé¾îº¸±â) ¿¡¼­ Jenkins Build Pipeline À¸·Î ÀÚµ¿ ¹èÆ÷ ½Ã½ºÅÛÀ» ±¸ÃàÇÏ´Â °Í¿¡ ´ëÇØ °øÀ¯¸¦ Çß¾ú½À´Ï´Ù.

huk

´ñ±ÛÀ» ÅëÇØ Jenkins Pipeline À̶ó´Â°Ô ÀÖ´Ù´Â °ÍÀ» óÀ½ ¾Ë°í µÇ°í..!!

±× ¶§¼­¾ß, Á¨Å²½º 2.0 ÀÇ °¡Àå Å« º¯È­°¡ Jenkins Pipeline À̶ó´Â °ÍÀ» ¾Ë°Ô µÇ¾ú½À´Ï´Ù. ÀÌ ¶§ºÎÅÍ ¸¶À½ÀÇ ¼÷Á¦·Î °¡Áö°í ÀÖ¾úÁö¸¸, ÃÖ±Ù ºí·Î±× Åë°è·Î Á¨Å²½º ºí·Î±ë ±ÛÀÇ ¹æ¹®ÀÌ ³ô´Ù´Â °ÍÀ» ¾Ë°í ±ÞÇÏ°Ô(groovy¸¦ Á¦´ë·Î ¼÷ÁöÇÏÁö ¸øÇÑ Ã¤..¤Ì¤Ì) ±ÛÀ» ÀÛ¼ºÇÏ°Ô µÇ¾ú½À´Ï´Ù.

late(ÃÖ±Ù ÀÌ Â©À» ±²ÀåÈ÷ ¸¹ÀÌ ¾²°Ô µË´Ï´Ù..)

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_NAMEREMOTE_PATHTARGET_USERTARGET_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¶ó´Â °¡Á¤ÇÏ¿¡ Àû¼ºÇÏ¿©, useGradleuseMaven ´Â ÀÛ¼ºÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ÇÊ¿äÇÏ´Ù¸é ÀÛ¼ºÇϼż­ »ç¿ëÇϸé ÁÁÀ» °Í °°½À´Ï´Ù.

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 À» ¸¸µå·Á°í ÇÕ´Ï´Ù.

»ý¼º

newjob

new Job¿¡¼­ PipelineÀ» ¼±ÅÃÇÕ´Ï´Ù.

Jenkins File Git SCM ¿¬µ¿

scm

Pipeline script from SCM ¸¦ »ç¿ëÇÏ¿©, ÇÊ¿äÇÑ Á¤º¸¸¦ ä¿öÁÝ´Ï´Ù.

jenkinsfile

Script Path¿¡ ÀÛ¼ºÇÑ Jenkins File °æ·Î¸¦!

Parameter ¼³Á¤

Flow

flow

ĸÃĺ»°ú À§¿¡¼­ ¼³¸íÇÑ ½ºÅ©¸³Æ®°¡ Á¶±Ý ´Ù¸¨´Ï´Ù. SCP, DRONE, QUEENÀÌ DEPLOY, SWITCH ÀÔ´Ï´Ù. ÇØ´ç ÆĶó¹ÌÅ͸¦ Boolean Parameter·Î ¼³Á¤ÇÕ´Ï´Ù.

Module

ÀÌ ´Ü°è¿¡¼­´Â Extensible Choice Parameter plugin¸¦ Àá½Ã ¼Ò°³ÇÏ°Ú½À´Ï´Ù.

Extensible Choice Parameter pluginÀº Global ·Î µî·ÏÇسõÀº Choice Parameter ¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ½À´Ï´Ù. Áï Choice Parameter ÀÌÁö¸¸, Áß¾Ó °ü¸®°¡ °¡´ÉÇϵµ·Ï Á¦°øÇÏ´Â Plugin ÀÔ´Ï´Ù.

extensible

ÀÌ PluginÀ» ÅëÇØ Jenkins Global Tool InstallationÀ» ¿¬µ¿ÇÑ µíÇÑ(?) È¿°ú¸¦ ÁÖ±â À§ÇÔÀÔ´Ï´Ù. System Config ¿¡¼­ Jenkins Global Tool Installation¿¡ Á¤ÀÇÇÑ À̸§À¸·Î ¸ÅĪÇÏ¿© Extensible Choice Parameter¸¦ À§¿Í °°ÀÌ ±¸¼ºÇß½À´Ï´Ù.

extensible

±×¸®°í Extensible Choice·Î ¼³Á¤ÇÑ Choice Parameter ¸¦ Á¤ÀÇÇÏ¿´½À´Ï´Ù.

Jenkins Global Tool Installation °ü·Ã pipeline script ¿¡¼­ »ç¿ë °¡´ÉÇÑ Choice Parameter PluginÀÌ ÀÖ´Ù¸é °øÀ¯ ºÎŹµå¸³´Ï´Ù..¤Ì¤Ì(JDK Parameter PluginÀ» ½ÃµµÇßÀ¸³ª ±â´ë¿Í ´Ù¸£°Ô µ¿ÀÛÇÏ¿© Àû¿ëÇÏÁö ¸øÇß½À´Ï´Ù.)

Git

String Parameter·Î ¾Æ·¡ Á¤º¸¸¦ ±¸¼ºÇÕ´Ï´Ù.

giturl

branch

${BRANCH_TO_BUILD} È¯°æ º¯¼ö´Â HookÀ¸·Î ÀÎÇØ ¹ß»ýÇÑ Branch¸¦ Àд ȯ°æ º¯¼öÀÔ´Ï´Ù. Template¿¡ À¯ÀÏÇÏ°Ô ÀÌ ºÎºÐ¸¸ µðÆúÆ® Value¸¦ ÁöÁ¤ÇØÁÝ´Ï´Ù. (ĸó º»¿¡¼­ Default Value°¡ ä¿öÁø °÷ÀÌ ¸î ±ºµ¥ ÀÖÁö¸¸, ½ÇÁ¦ °è¼Ó Àç»ç¿ëµÇ´Â °ÍÀº, Branch »ÓÀÔ´Ï´Ù.)

Template »ç¿ëÇϱâ

Git °èÁ¤ ¿¬µ¿ ¹× Hook ¼³Á¤Àº »ý·«ÇÕ´Ï´Ù

Job »ý¼º

newjob

new Job¿¡¼­ Á¦ÀÏ ¾Æ·¡ Copy fromÀ» ÅëÇØ Template JobÀ» º¹»çÇÕ´Ï´Ù.

±âº» °ª ä¿ö³Ö±â

´ëºÎºÐÀÇ ¼³Á¤Àº ±âº» ¼³Á¤À» À¯ÁöÇÏ°í, ÆĶó¹ÌÅÍÀÇ Default Value ¸¸ °¢ ÇÁ·ÎÁ§Æ®¿¡ ¸Â°Ô ¼³Á¤ÇÏ¿©ÁÝ´Ï´Ù.

flow

extensible

giturl

branch

¼öµ¿ ½ÇÇà

¼öµ¿À¸·Î JobÀ» ºôµåÇÏ·Á¸é Build with Parameter¸¦ »ç¿ëÇÕ´Ï´Ù.

bwp

±×·¯¸é ¾Æ·¡¿Í °°ÀÌ ±âº» °ªµéÀÌ Ã¤¿öÁø »óÅ·Π³ª¿À¸ç ½ÇÇàÀ» ÇÏ¸é ³¡!

parameter

´Ù½Ã ½ÇÇà

ÀÌ¹Ì ÁøÇàµÈ Job¿¡ ´ëÇؼ­ ´Ù½Ã ½ÇÇàÇÏ·Á¸é Rebuild Plugin À» »ç¿ëÇÕ´Ï´Ù.

ÀÌ Ç÷¯±×ÀÎÀº ÀÌ¹Ì Á¾·áµÈ ½ÇÇà ÀâÀ» ´Ù½Ã ºôµåÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â Ç÷¯±×ÀÎÀÔ´Ï´Ù. Parameterized ¸¦ Áö¿øÇÏ¿©, ÇØ´ç ½ÇÇà ÀâÀÌ °¡Áö°í ÀÖ´ø ÆĶó¹ÌÅ͸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ¼öÁ¤µµ °¡´ÉÇÕ´Ï´Ù.

»ç¿ë ¹æ¹ýÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù. Ç÷¯±×ÀÎÀ» ¼³Ä¡Çϸé, ¾Æ·¡¿Í °°ÀÌ ÆÄÀÌÇÁ ¶óÀÎ ºäÀÇ ½ÇÇà Àâ¿¡ Rebuild ÅÇÀÌ º¸ÀÌ°Ô µË´Ï´Ù.

rebuild1

Ŭ¸¯ÇÏ°Ô µÇ¸é ÇØ´ç Àâ ½ÇÇà±â·ÏÀÌ °¡Áö°í ÀÖ´ø ÆĶóÀÌÅÍ°¡ ±×´ë·Î ±âº» ¼³Á¤ÀÌ µÇ¾î µ¿ÀÏÇÑ Á¶°ÇÀ¸·Î ÀâÀÇ ½ÇÇàÀÌ °¡´ÉÇÕ´Ï´Ù.

Script ±â´É È®ÀÎ!

Pipeline JobÀÌ ±¸¼ºµÈ ÈÄ JobÀÌ ½ÇÇàµÇ¸é Stage View¿¡ ¾Æ·¡¿Í °°Àº È­¸éÀ» º¸¿©ÁÝ´Ï´Ù! ±âÁ¸ Build Pipeline¿¡¼­´Â View ¸¦ µû·Î ¸¸µé¾î¾ßÇؼ­ ºÒÆíÇß¾ú½À´Ï´Ù.

flow

Flow

¼öµ¿ ½ÇÇà ½Ã ´Ü°è¸¦ Test ´Ü°è¸¦ ½ºÅµÇϸé, ¼³Á¤ÇÑ ½ºÅ©¸³Æ®´ë·Î ¾Æ·¡¿Í °°ÀÌ!

testskip1

flow

testskip2

¼öµ¿ ÆÄÀÌÇÁ¶óÀÎ

input

À§¿Í °°ÀÌ ¼öµ¿ ´Ü°è¿¡¼­ ´ë±âÇϸç, ¹öÆ°ÀÌ Á¦°øµË´Ï´Ù!

TIP

IntelliJ¿¡¼­ GDSL »ç¿ëÇϱâ

https://gist.github.com/arehmandev/736daba40a3e1ef1fbe939c6674d7da8

gdsl ´Ù¿î

stx

gdsl

Snippet Generator

Pipeline gdsl ·Î Äڵ带 ÀÛ¼ºÇϱ⠾î·Æ´Ù¸é, Á¦°øÇØÁÖ´Â Snippet Generator¸¦ »ç¿ëÇÕ´Ï´Ù.

stx

snippet

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]