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

Jenkins: ์ง€์†์  ํ†ตํ•ฉ๊ณผ ๋ฐฐํฌ์˜ ํ•ต์‹ฌ

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 2. 14.
728x90

Jenkins: ์ง€์†์  ํ†ตํ•ฉ๊ณผ ๋ฐฐํฌ์˜ ํ•ต์‹ฌ

1. Jenkins ์†Œ๊ฐœ

1.1 Jenkins๋ž€?

Jenkins๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ง€์†์  ํ†ตํ•ฉ ๋ฐ ์ง€์†์  ๋ฐฐํฌ(CI/CD) ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. Jenkins๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์Šค ์ฝ”๋“œ์˜ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋“ฑ์„ ์ž๋™ํ™”ํ•˜์—ฌ ํ’ˆ์งˆ ํ–ฅ์ƒ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Jenkins ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•๋“ค

2.1 ์ž๋™ ๋นŒ๋“œ

Jenkins๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ ๊ฐ์ง€ ์‹œ ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Jenkins์—์„œ Freestyle ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

Freestyle Project ์˜ˆ์ œ

  1. Jenkins ๋Œ€์‹œ๋ณด๋“œ์—์„œ "์ƒˆ๋กœ์šด Item"์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ , "Freestyle Project"๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. "๋นŒ๋“œ" ์„น์…˜์—์„œ "์ƒˆ๋กœ ์ถ”๊ฐ€"๋ฅผ ์„ ํƒํ•˜๊ณ  ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
#!/bin/bash
echo "Hello, Jenkins! This is a build job."

2.2 ์ง€์†์  ํ†ตํ•ฉ

Jenkins๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž์˜ ์ž‘์—…์„ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŒ€ ๊ฐ„ ํ˜‘์—…๊ณผ ํ’ˆ์งˆ ์œ ์ง€๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.

Pipeline ์˜ˆ์ œ

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building the application'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing the application'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying the application'
            }
        }
    }
}

2.3 ์ž๋™ ๋ฐฐํฌ

๋นŒ๋“œ๋œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ ๋ฐ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.

3. Jenkins ์‚ฌ์šฉ ์‚ฌ๋ก€

3.1 CI/CD ํŒŒ์ดํ”„๋ผ์ธ

Jenkins๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ„๋‹จํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์˜ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                // ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
            }
        }
        stage('Test') {
            steps {
                // ํ…Œ์ŠคํŠธ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
            }
        }
        stage('Deploy') {
            steps {
                // ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
            }
        }
    }
}

3.2 ์Šค์ผ€์ค„๋ง ๋ฐ ์˜ˆ์•ฝ ๋นŒ๋“œ

Jenkins๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‹œ๊ฐ„์— ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์˜ˆ์•ฝํ•˜๊ฑฐ๋‚˜ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์Šค์ผ€์ค„๋ง ์ž‘์—…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. Jenkins์˜ ๊ณ ๊ธ‰ ํ™œ์šฉ

Jenkins๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง€์›ํ•˜์—ฌ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ, ๋นŒ๋“œ ๋„๊ตฌ, ๋ฐฐํฌ ๋„๊ตฌ ๋“ฑ์„ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ๋ถ€๋ก

5.1 Jenkins ํ”Œ๋Ÿฌ๊ทธ์ธ

Jenkins๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง€์›ํ•˜์—ฌ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub, Docker, Slack ๋“ฑ๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.2 ๋‹ค์–‘ํ•œ ๋นŒ๋“œ ํ™˜๊ฒฝ

Jenkins๋Š” ๋‹ค์–‘ํ•œ ์–ธ์–ด ๋ฐ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Maven, Gradle, Ant ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5.3 ๋ถ„์‚ฐ ๋นŒ๋“œ ํ™˜๊ฒฝ

์—ฌ๋Ÿฌ ๋Œ€์˜ ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์–ด ๋Œ€์šฉ๋Ÿ‰ ํ”„๋กœ์ ํŠธ์˜ ํšจ์œจ์ ์ธ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

5.4 ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋ฐ ๊ถŒํ•œ ์„ค์ •

Jenkins๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ๋ฐ ๊ถŒํ•œ ์„ค์ •์„ ์ง€์›ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ณด์•ˆ ์ •์ฑ…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jenkins๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์€ Jenkins๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๋Š”๋ฐ ํ•œ ๊ฑธ์Œ ๋” ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€