๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ชฉ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

[Shell Script] ์‰˜์Šคํฌ๋ฆฝํŠธ ์กฐ๊ฑด๋ฌธ ์ •๋ฆฌ

๐Ÿ—ฃ Language/shell
    ๋ฐ˜์‘ํ˜•

    ์‰˜์Šคํฌ๋ฆฝํŠธ๋Š” ๋Œ€ํ•™๊ต ํ•™๋ถ€์ƒ์œผ๋กœ ๊ฐ•์˜ ์‹œ๊ฐ„์— ๋งŒ์ ธ๋ณธ ํ›„๋กœ๋Š” ์ „ํ˜€ ์†์„ ๋Œ€์ง€ ์•Š์•˜๋˜ ์˜์—ญ์ธ๋ฐ์š” ์ด๋ฒˆ์— ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    ์š”์ฆ˜์—๋Š” ๋ฐฐํฌํˆด๋“ค์ด ์›Œ๋‚™ ์ž˜ ๋‚˜์˜ค๊ณ  ์ž˜ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜๋˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ์ฐธ ํŽธํ•œ๋ฐ์š” jenkins๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ์— item์„ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น item์— ์‰˜์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์ €๋Š” ๋ฐฐํฌ ์‹œ ์œ ์—ฐํ•˜๊ฒŒ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ ์‰˜์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ•์„ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ  ์ด ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

    (์ด๋ฏธ ์‰˜์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ์•„์‹œ๊ฑฐ๋‚˜ ์ž˜ ๋‹ค๋ฃจ์‹œ๋Š” ๋ถ„๋“ค์€ ์˜๋ฏธ ์—†๋Š” ํฌ์ŠคํŒ…์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

     


     

    ์‰˜์Šคํฌ๋ฆฝํŠธ(Shell script)

    ์‰˜์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฆฌ๋ˆ…์Šค๊ธฐ๋ฐ˜ ์šด์˜์ฒด์ œ์—์„œ ๋™์ž‘ํ•˜๋Š” ์‰ฝ๊ฒŒ๋งํ•ด ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์œˆ๋„์šฐ์—์„œ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ํ™•์žฅ์ž๊ฐ€ .exeํŒŒ์ผ์ธ๊ฒƒ์— ๋น„๊ตํ•ด์„œ ์‰˜์Šคํฌ๋ฆฝํŠธ๋Š” shell์—์„œ ์•ž๊ธ€์ž 2๊ฐœ๋ฅผ ๋”ฐ์˜จ .shํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

     

    ๋ฆฌ๋ˆ…์Šค์™€ ๊ฐ™์ด ๊ฝค ์˜ค๋ž˜์ „์— ๋งŒ๋“ค์–ด์ง„ ๋ฌธ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜„๋Œ€์˜ ์–ธ์–ด๋“ค๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค๊ณ  ๋Š๋‚„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์กฐ๊ฑด๋ฌธ ์‚ฌ์šฉ๋ฒ•

    ์‰˜์Šคํฌ๋ฆฝํŠธ์—์„œ ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ if๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™์œผ๋‚˜ ๋ณดํ†ต์˜ ์–ธ์–ด๋กœ๋Š” ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์„œ ์กฐ๊ฑด์„ ๋ฌถ์–ด์ฃผ์—ˆ๋‹ค๋ฉด ์‰˜์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š”๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์ค๋‹ˆ๋‹ค.

     

    if ๋ฌธ๋ฒ•
    if [ ์กฐ๊ฑด ]; then
    	something do...
    fi

    ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ if ๋ฌธ ๋’ค์— ๋‚˜์˜ค๋Š” ๋Œ€๊ด„ํ˜ธ ๋’ค์—๋Š” ์ŠคํŽ˜์ด์Šค๋ฐ”๋ฅผ ํ•œ์นธ ๋„์–ด์ค˜์•ผํ•˜๋Š” ๊ฒƒ๊ณผ ์กฐ๊ฑด์ด ๋๋‚œ ๋’ค์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  SQL ์กฐ๊ฑด์‹์ฒ˜๋Ÿผ then ๋กœ ๋งˆ๋ฌด๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์—๋Š” if์˜ ๋ฐ˜๋Œ€์ธ fi๋กœ ์กฐ๊ฑด๋ฌธ์„ ๋๋‚ด์ฃผ๊ณ  ๊ทธ ์•ˆ์— ์›ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

     

    ๊ทธ ๋’ค๋กœ AND ๋˜๋Š” OR ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

     

     

    if ๋ฌธ๋ฒ• AND
    if [ ์กฐ๊ฑด ] && [ ์กฐ๊ฑด ]; then
    	something do...
    fi
    
    ๋˜๋Š”
    
    if [ ์กฐ๊ฑด -a ์กฐ๊ฑด ]; then
    	something do...
    fi

     

    if ๋ฌธ๋ฒ• OR
    if [ ์กฐ๊ฑด ] || [ ์กฐ๊ฑด ]; then
    	something do...
    fi
    
    ๋˜๋Š”
    
    if [ ์กฐ๊ฑด -o ์กฐ๊ฑด ]; then
    	something do...
    fi

     

     

    ์กฐ๊ฑด๋ฌธ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์‹

    ์กฐ๊ฑด์‹์ด๋ผ๊ณ  ํ•˜๋ฉด๋˜๋Š”๊ฑด์ง€ ์–ด์ƒ‰ํ•œ๋ฐ์š” ์›นํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋น—๋Œ€๋ฉด equals ๋ฉ”์„œ๋“œ๊ฐ™์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

    ์ข…๋ฅ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

     

    -eq : EQual
    -ne : NEgative
    -gt : Greater Than
    -ge : Greater than Equal
    -lt : Less Than
    -le : Less than Equal
    -d : Directory
    -e : Exist
    -L : symbolic Link
    -r : Readable
    -w : Writeable
    -x : eXecute
    -nt : Newer Than
    -ot : Older Than
    -ef : Equal File

     

    ์กฐ๊ฑด๋ฌธ ์•ˆ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์‹
    โ€ป ๋น„๊ต์‹
    [ -z ${A} ] : A ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ฉด TRUE (Zero)
    [ -n ${A} ] : A ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด TRUE (Non zero)
    [ ${A} -eq ${B} ] : A์™€ B๊ฐ’์ด ๊ฐ™์œผ๋ฉด TRUE (EQual)
    [ ${A} -ne ${B} ] : A์™€ B๊ฐ’์ด ๋‹ค๋ฅด๋ฉด TRUE (Not Equal)
    [ ${A} -gt ${B} ] : A๊ฐ€ B๋ณด๋‹ค ํฌ๋ฉด TRUE (GreaTer)
    [ ${A} -ge ${B} ] : A๊ฐ€ B๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด TRUE (Greater or Equal)
    [ ${A} -lt ${B} ] : A๊ฐ€ B๋ณด๋‹ค ์ž‘์œผ๋ฉด TRUE (LiTtle)
    [ ${A} -le ${B} ] : A๊ฐ€ B๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด TRUE (Little or Equal)
    
    [ ์กฐ๊ฑด์‹A -a ์กฐ๊ฑด์‹B ] : ์กฐ๊ฑด์‹ A์™€ B๊ฐ€ ๋ชจ๋‘ TRUE์ด๋ฉด TRUE (&& ์™€ ๋™์ผ) (And)
    [ ์กฐ๊ฑด์‹A -o ์กฐ๊ฑด์‹B ] : ์กฐ๊ฑด์‹ A๊ฐ€ TRUE๊ฑฐ๋‚˜ ์กฐ๊ฑด์‹B๊ฐ€ TRUE๋ฉด TRUE (|| ์™€ ๋™์ผ) (Or)
    
    โ€ป ํŒŒ์ผ๊ด€๋ จ
    [ -d ${A} ] : A ํŒŒ์ผ์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฉด TRUE (Directory)
    [ -e ${A} ] : A ํŒŒ์ผ์ด(๋…ธ๋“œ, ๋””๋ ‰ํ† ๋ฆฌ, ์†Œ์ผ“ ๋“ฑ๋“ฑ ๋ชจ๋‘) ์กด์žฌํ•˜๋ฉด TRUE (Exist)
    [ -L ${A} ] : A ํŒŒ์ผ์ด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฉด TRUE (Link)
    [ -r ${A} ] : A ํŒŒ์ผ์ด ์ฝ๊ธฐ ๊ฐ€๋Šฅํ•˜๋ฉด TRUE (Readable)
    [ -s ${A} ] : A ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ 0 ๋ณด๋‹ค ํฌ๋ฉด TRUE (Size)
    [ -w ${A} ] : A ํŒŒ์ผ์ด ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•˜๋ฉด TRUE (Write)
    [ -x ${A} ] : A ํŒŒ์ผ์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋ฉด TRUE (eXecutable)
    [ -c ${A} ] : A ํŒŒ์ผ์ด Special character file ์ด๋ฉด TRUE (Character file)
    [ -f ${A} ] : A ํŒŒ์ผ์ด ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ regular ํŒŒ์ผ์ด๋ฉด TRUE (File)
    [ -S ${A} ] : A ํŒŒ์ผ์ด ์†Œ์ผ“์ด๋ฉด TRUE (Socket)
    [ ${A} -nt ${B} ] : A ํŒŒ์ผ B ํŒŒ์ผ๋ณด๋‹ค ์ตœ์‹ ํŒŒ์ผ์ด๋ฉด ์ฐธ (New Time)
    [ ${A} -ot ${B} ]  : A ํŒŒ์ผ์ด B ํŒŒ์ผ๋ณด๋‹ค ์ด์ „ํŒŒ์ผ์ด๋ฉด ์ฐธ (Old Time)
    [ ${A} -ef ${B} ] : A ํŒŒ์ผ๊ณผ B ํŒŒ์ผ์ด ๊ฐ™์€ ํŒŒ์ผ์ด๋ฉด ์ฐธ (Equal File)

     

     

    ์ €๋Š” ์„œ๋ฒ„์— ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•  ๋•Œ warํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐฐํฌ๋˜๋„๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ตœ์ƒ๋‹จ์— ๋‹ค์Œ๊ณผ๊ฐ™์ด ์กฐ๊ฑด๋ฌธ์„ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

     

    ## ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ๋กœ์ง ์ค‘๋‹จ
    if [ ! -e ํŒŒ์ผ๊ฒฝ๋กœ/public_source.war ] || [ ! -e ํŒŒ์ผ๊ฒฝ๋กœ/admin_source.war ]; then
    	exit
    fi

     

    ์ฐธ๊ณ 

    ๋ธ”๋กœ๊ทธ

     

     

    ๋ฐ˜์‘ํ˜•