λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
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λ₯Ό 효과적으둜 ν™œμš©ν•˜μ—¬ μ†Œν”„νŠΈμ›¨μ–΄ 개발 ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜λŠ”λ° ν•œ 걸음 더 λ‚˜μ•„κ°ˆ 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

λŒ“κΈ€