Jenkins

ํšŒ์‚ฌ ๊ฒŒ์ž„ ์˜คํ”ˆ์— ๋Œ€๋น„ํ•ด์„œ ์„œ๋ฒ„ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ธฐ๋กœ ํ•จ.

  • ๊ธฐ์กด ์„œ๋ฒ„ 8๋Œ€(ํ”„๋ก ํŠธ, ๋ฐฑ์—”๋“œ) โ‡’ 20๋Œ€๋กœ ์ฆ์„ค

์  ํ‚จ์Šค๋กœ ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ๋นŒ๋“œ ํ•  ๋•Œ ๋™์‹œ์— ๋นŒ๋“œ๋ฅผ ํ•˜๋ฉด ์  ํ‚จ์Šค ์„œ๋ฒ„์˜ CPU ๊ฐ€ 98% ๊นŒ์ง€ ํŠ€์–ด์„œ ์  ํ‚จ์Šค๊ฐ€ ๋ฉˆ์ถ”๋Š” ์ƒํ™ฉ + ์†Œ์š”์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒŒ ํ™•์ธ์ด ๋˜์—ˆ์Œ.

PIPELINE ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ Script ์ž‘์„ฑ ํ›„ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋Œ€๋ฅผ ๋ฌถ์–ด์„œ ๋นŒ๋“œ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ์ „

ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ์ „ 1๋Œ€์˜ ์„œ๋ฒ„ ๋‹น 6 ~ 9๋ถ„ ์ •๋„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ

์ฒซ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” 1๋Œ€์˜ ์„œ๋ฒ„๋‹น ์‹œ๊ฐ„์ด 20๋ถ„ ์ •๋„๋กœ ๋Š˜์–ด๋‚จ.

ํŒŒ์ดํ”„ ๋ผ์ธ ๊ตฌ์ถ• ํ›„

ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ํ›„ 4๋Œ€์˜ ์„œ๋ฒ„ ๋ฐฐํฌ ์‹œ 11๋ถ„์˜ ์†Œ์š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ

์ฒซ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ 20๋ถ„ ์†Œ์š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ.

๋ฐฉ์‹์˜ ๋ฌธ์ œ

  • ๊ธฐ์กด

    • ๊ฐ ์„œ๋ฒ„๋งˆ๋‹ค ํ•˜๋‚˜ ์”ฉ ์  ํ‚จ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ๋Œ๋ฆผ

    • ํ•˜๋‚˜์”ฉ ์˜ฌ๋ผ๊ฐˆ ๋•Œ๋งˆ๋‹ค tail ๋ช…๋ น์–ด๋กœ ์ž˜ ์˜ฌ๋ผ๊ฐ”๋Š”์ง€ ํ™•์ธ

    • ์Šค์นด์šฐํ„ฐ๊ฐ€ ๋ถ™๋Š”์ง€ ํ™•์ธ ํ›„ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ์‹คํ–‰

  • ํŒŒ์ดํ”„๋ผ์ธ ์„ค์ • ํ›„

    • build ํ•œ๋ฒˆ ํด๋ฆญ ํ›„ 11๋ถ„ ์ •๋„ ๋Œ€๊ธฐ โ‡’ ๋

๊ธฐ์กด ๋ฐฉ์‹์€ ํ•˜๋‚˜ํ•˜๋‚˜ build ๋œ war ํŒŒ์ผ์„ ์„œ๋ฒ„๋กœ ์˜ฎ๊ฒจ์„œ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด์„œ ๋ฐฐํฌ ํ•  ๋•Œ ๋นŒ๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆผ.

ํŒŒ์ดํ”„๋ผ์ธ ๋ฐฉ์‹์€ ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋งŒ ๋นŒ๋“œ ํ›„ send build file ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ ์„œ๋ฒ„๋กœ war ํŒŒ์ผ์„ ์ „์†ก ํ›„ ์Šคํฌ๋ฆฝํŠธ๋งŒ ์‹คํ–‰. ์ดˆ๊ธฐ ๋นŒ๋“œ๋งŒ ์•„๋‹ˆ๋ฉด ๊ฐ ์„œ๋ฒ„๋‹น ํ†ฐ์บฃ ์˜ฌ๋ผ๊ฐ€๋Š” ์‹œ๊ฐ„ 3๋ถ„ ์†Œ์š”(sleep ์œผ๋กœ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„ ํฌํ•จ)


PIPELINE ์•„์ดํ…œ ์ƒ์„ฑ ๋ฐฉ๋ฒ•

Jenkins ์—์„œ ์ƒˆ๋กœ์šด Item ํด๋ฆญ

PIPELINE ํด๋ฆญ

PIPELINE ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

pipeline{
    agent any
    options {
     timeout(time: 1, unit: 'HOURS') # tail ๊ฑธ๋ฉด time out์ด ๋‚˜๋ฏ€๋กœ pipeline์ด ์ „์ฒด ์‹œ๊ฐ„ ์–ผ๋งˆ์ •๋„ ๊ฑธ๋ฆฌ๋Š”์ง€ ํ™•์ธ ํ›„ ์„ค์ •
    }
    stages{
        stage('build_war_all'){ # ๋ฐฑ์—”๋“œ ์ „์ฒด ์„œ๋ฒ„์— war ํŒŒ์ผ ์ „์†กํ•˜๋Š” ํ”„๋กœ์ ํŠธ(item) ๋นŒ๋“œ ์‹คํ–‰
            steps{
                build 'project name'  # ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒ์„ฑ ๋˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๊ฐ€ ์‹คํ–‰
                
            }
        }
        stage('ssh_1') { # ssh ์„œ๋ฒ„์—์„œ command ์‹คํ–‰ ์‹œํ‚ค๋Š” stage ์„œ๋ฒ„ ip ๋ณ„๋กœ stage ๋ถ„๋ฆฌ , ์ด 20๊ฐœ
            steps([$class: 'BapSshPromotionPublisherPlugin']) {
                sshPublisher(
                    continueOnError: false, failOnError: true,
                    publishers: [
                        sshPublisherDesc(
                            configName: "project name 1",//Jenkins ์‹œ์Šคํ…œ ์ •๋ณด์— ์‚ฌ์ „ ์ž…๋ ฅํ•œ ์„œ๋ฒ„ ID
                            verbose: true,
                            transfers: [
                                sshTransfer(
                                    execCommand: "echo <server password> | sudo -S ~/release_shell.sh" # ์›๊ฒฉ์ง€์—์„œ ์‹คํ–‰ํ•  ์ปค๋งจ๋“œ
                                )             
                            ]
                        )
                    ]
                )
                sleep(time:180,unit:"SECONDS")  # stage ๊ฐ„ sleep ํ•˜๋Š” ์‹œ๊ฐ„ 
            }
        }
        ... # ๋นŒ๋“œ ๋Œ๋ฆฌ๊ณ  ์‹ถ์€ ํ”„๋กœ์ ํŠธ ๊ฐœ์ˆ˜๋งŒํผ stage ์ƒ์„ฑํ•˜๋ฉด ๋จ.
    }
}

PIPELINE ๋นŒ๋“œ๊ฐ€ ์ค‘๊ฐ„์— ์‹คํŒจํ•ด์„œ ์ •์ง€๋˜์—ˆ์„ ๊ฒฝ์šฐ

์Šคํ…Œ์ด์ง€ ์„ ํƒ ํ›„ run ํ•˜๋ฉด ์„ ํƒํ•œ stage ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆœ์ฐจ์ ์œผ๋กœ build ์‹คํ–‰ํ•จ.


JENKINS ์ตœ์‹  ๋ฒ„์ „์—์„œ์˜ PIPELINE

Publish Over SSH ๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅ...!

๋” ์ด์ƒ ์›๊ฒฉ ๋ฐฐํฌ๊ฐ€ ์•ˆ๋ ๋“ฏ ๋ณด์˜€์œผ๋‚˜ SSH2 Easy ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋นŒ๋“œ ์™„๋ฃŒ๋œ ํŒŒ์ผ์„ ๊ฐ ์„œ๋ฒ„๋กœ SFTP ์›๊ฒฉ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์–ด์„œ ๊ฐ€๋Šฅ

Last updated

Was this helpful?