[Jenkins] Jenkins๋ž€?

DevelopHeoยท2025๋…„ 2์›” 23์ผ
post-thumbnail

๐Ÿ“™ Jenkins๋ž€?

Jenkins๋ž€?

Jenkins๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ CI/CD(Continuous Integration / Continuous Deployment) ์ž๋™ํ™” ๋„๊ตฌ

โœ๏ธ 1. Jenkins์˜ ์—ญํ• 

  • CI (Continuous Integration, ์ง€์†์  ํ†ตํ•ฉ)
    โ†’ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€
  • CD (Continuous Deployment/Delivery, ์ง€์†์  ๋ฐฐํฌ/์ „๋‹ฌ)
    โ†’ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•œ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜์—ฌ ์„œ๋น„์Šค์˜ ๋ฐฐํฌ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰

โœ๏ธ 2. Jenkins์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ž๋™ ๋นŒ๋“œ: GitHub, GitLab, Bitbucket ๋“ฑ์˜ ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฐ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ ๋นŒ๋“œ ์‹คํ–‰
  • ์ž๋™ ํ…Œ์ŠคํŠธ: ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ง€์ •๋œ ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์˜ค๋ฅ˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ
  • ๋ฐฐํฌ ์ž๋™ํ™”: ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋ฒ„์— ์ž๋™ ๋ฐฐํฌ (Docker, Kubernetes, AWS ๋“ฑ ์—ฐ๋™ ๊ฐ€๋Šฅ)
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์›: 1,800๊ฐœ ์ด์ƒ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ๊ณผ ํ†ตํ•ฉ ๊ฐ€๋Šฅ
  • ์›น UI ์ œ๊ณต: ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

โœ๏ธ 3. Jenkins ๋™์ž‘ ๊ณผ์ •

  1. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ํ‘ธ์‹œ (GitHub, GitLab ๋“ฑ)
  2. Jenkins๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜์—ฌ ๋นŒ๋“œ ์‹คํ–‰
  3. ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰
  4. ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์‹œ ๋ฐฐํฌ ์ž๋™ํ™” ์ˆ˜ํ–‰

์‚ฌ์šฉ์˜ˆ์‹œ1

ex) GitHub + Docker + AWS ๋ฐฐํฌ ์ž๋™ํ™”
1. GitHub์—์„œ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด Jenkins๊ฐ€ ๊ฐ์ง€
2. ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ
3. ๋นŒ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ Docker Hub์— ํ‘ธ์‹œ
4. AWS ์„œ๋ฒ„์—์„œ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌ

์‚ฌ์šฉ์˜ˆ์‹œ2

ex) ์  ํ‚จ์Šค์˜ CI/CD ๊ณผ์ •

1. ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•œํ›„ ๊ณต์œ  ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ปค๋ฐ‹ ๋ฐ ํ‘ธ์‹œ
2. ์  ํ‚จ์Šค๊ฐ€ ์ด๋ฅผ ์ธ์ง€ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์†Œ์Šค์ฝ”๋“œ์™€ ๊ธฐ์กด์ฝ”๋“œ์™€ ํ•จ๊ป˜ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ
3. ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ ๋นŒ๋“œํ•œ ํŒŒ์ผ์„ ๋ฐฐํฌ ์„œ๋ฒ„๋กœ ์ „์†ก
4. ๋งŒ์•ฝ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํŒจํ•  ๊ฒฝ์šฐ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ณ  ์ข…๋ฃŒ


โœ๏ธ 4. Jenkins์˜ ํŒŒ์ดํ”„๋ผ์ธ

Pipeline

  • ์—ฐ์†์ ์ธ ์ž‘์—…๋“ค์„ ์  ํ‚จ์Šค์—์„œ ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ(์ž‘์—…)์œผ๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ• ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‹ค.
  • ์  ํ‚จ์Šค์˜ Pipeline์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ Declarative, Scripted ๋ฐฉ์‹์ด ์žˆ๋‹ค. ์ด ๋‘๊ฐ€์ง€๋Š” ๋ฌธ๋ฒ•์ ์ธ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.
  • Declarative๋ฐฉ์‹์ด Scripted๋ฐฉ์‹๋ณด๋‹ค ๋” ํ’๋ถ€ํ•œ ๊ตฌ๋ฌธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ž‘์„ฑํ• ์ˆ˜ ์žˆ๋‹ค.

Jenkins Pipeline์˜ ์ฃผ์š”ํ•ญ๋ชฉ

  • Pipeline

    • ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜๋Š” ์ „์ฒด ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
    • ์„ ์–ธํ˜• ํŒŒ์ดํ”„๋ผ์ธ(Declarative Pipeline) ๊ตฌ๋ฌธ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„
    • Jenkinsfile์˜ ์‹œ์ž‘ ์ง€์ ์— ์„ ์–ธ
  • Node

    • ์Šคํฌ๋ฆฝํŠธํ˜• ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ๋ฌธ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„
    • Jenkinsfile์˜ ์‹œ์ž‘ ์ง€์ ์— ์„ ์–ธ
  • Stage

    • ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.
      ex) jenkins ํŒŒ์ดํ”„๋ผ์ธ์„ ๋นŒ๋“œ->ํ…Œ์ŠคํŠธ->๋ฐฐํฌ๋ผ ํ•œ๋‹ค๋ฉด ๋นŒ๋“œ,ํ…Œ์ŠคํŠธ,๋ฐฐํฌ๊ฐ€ ๊ฐ Stage๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • Step

    • ํ•˜๋‚˜์˜ stage์•ˆ์— ์ž‘์—…์„ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„

์„ ์–ธํ˜• ํŒŒ์ดํ”„๋ผ์ธ(Declarative Pipeline) ๋ฌธ๋ฒ•

Jenkinsfile์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ๋ฒ•์ด๋‹ค. Groovy๋ฌธ๋ฒ•๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.
์„ ์–ธํ˜• ํŒŒ์ดํ”„๋ผ์ธ ๋ฌธ๋ฒ•์€ ์ธํ„ฐ๋„ท์— ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ์ž˜ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ํฐํ‹€์˜ ๊ฐœ๋…์„ ์ •๋ฆฌํ•  ๊ฒƒ์ด๋‹ค.

//Jenkinsfile
pipeline {
    agent any //Agent Sections
    stages { //Stages Sections
        stage('Prepare') { //Steps
            agent any
            steps {
                ...
            }
            post {  //Post Section
                failure{
                    error "Fail Cloned Repository"
                }
            }
        }
        
        stage('Build') {
            agent any
            steps{
              ...
            }
            post{
                failure{
                    error 'Fail Build'
                }
            }
        }
    }
}
  • Pipeline์˜ Sections์˜ ๊ตฌ์„ฑ - Sections์— ์•„๋ž˜์˜ ํ•ญ๋ชฉ๋“ค์ด ํฌํ•จ๋œ๋‹ค.
    • Agent Section: ์—ฌ๋Ÿฌ slave๋ฅผ ๋‘๊ณ  ์ž‘์—…์„ ํ• ๋•Œ ์–ด๋–ค ์  ํ‚จ์Šค๊ฐ€ ์ผ์„ ํ• ์ง€ ์ •์˜
    • Post Section: ๊ฐ ์Šคํ…Œ์ด์ง€๊ฐ€ ๋๋‚œํ›„ ํ›„์† ์กฐ์น˜๊ธฐ๋Šฅ์„ ์ •์˜ (ex.Success, Failure, always, cleanup)
    • Stages Section: ์–ด๋–ค ์ผ์„ ์ฒ˜๋ฆฌํ• ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ Stage ์ •์˜(ex. git clone, build, test, devlop)
    • Steps: ์Šคํ…Œ์ด์ง€์•ˆ์—์„œ ์‹คํ–‰ํ•  ์ž‘์—…์„ ์ •์˜
    • Declaratives
      : Environ ment (ํŒŒ์ดํ”„๋ผ์ธ ๋ฐ stage scope์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •)
      : Parameter (ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰์‹œ์— ๋ฐ›์„ ํŒŒ๋ผ๋ฏธํ„ฐ)
      : Triggers (์–ด๋–ค ํ˜•ํƒœ๋กœ ํŠธ๋ฆฌ๊ฑฐ ๋˜๋Š”์ง€ ์ •์˜)
      : When (์–ธ์ œ ์‹คํ–‰๋˜๋Š”์ง€ ์ •์˜)

โœ๏ธ 5. Jenkins์˜ ์žฅ์ 

  • ์˜คํ”ˆ์†Œ์Šค: ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ž๋™ํ™”: ๋ฐ˜๋ณต์ ์ธ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™ํ™”
  • ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ: ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์›
  • ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์ง€์›: Linux, Windows, macOS, Docker, Kubernetes ๋“ฑ

์š”์•ฝ

  • Jenkins๋Š” CI/CD ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด๋ฉฐ, ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ DevOps ํ™˜๊ฒฝ ๊ตฌ์ถ•์— ํ•„์ˆ˜์ ์ธ ์—ญํ• ์„ ํ•œ๋‹ค.

โœ๏ธ 6. ๊ทธ๋ž˜์„œ ์–ธ์ œ ์‚ฌ์šฉํ•ด?

  • CI/CD ํ™˜๊ฒฝ์„ ์ง์ ‘ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ๋•Œ

์ฐธ๊ณ ์ž๋ฃŒ
https://velog.io/@rnqhstlr2297/Jenkins-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%82%AC%EC%9A%A9
https://narup.tistory.com/179
https://narup.tistory.com/202?category=1023381
https://wlsdn3004.tistory.com/63

0๊ฐœ์˜ ๋Œ“๊ธ€