Inflearn brand logo image

인프런 커뮤니티 질문&답변

alchdli.odd님의 프로필 이미지
alchdli.odd

작성한 질문수

쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)

📝 배포 파이프라인 구축 후 마주하게 되는 고민들 (💻 실습)

Jenkins 파일 - 파라미터 사용법 차이

작성

·

52

1

안녕하세요

섹션 18 - 82번 강의 : 배포 파이프라인 구축 후 마주하게 되는 고민들(실습)

수강 중 Jenkins 파일에 대한 질문이 있어 문의 드립니다.

 

Jenkins 파일을 작성할 때, parameter로 PROFILE(배포환경선택)과 DOCKERHUB_USERNAME(도커허브유저명)을 설정하셨는데

 

하기 코드를 보시면

    parameters {
        // 배포 환경 선택
        choice(choices: ['dev', 'qa', 'prod'], name: 'PROFILE', description: '배포 환경 선택')
        // DockerHub 사용자명 입력
        string(name: 'DOCKERHUB_USERNAME',  defaultValue: '', description: 'DockerHub 사용자명을 입력하세요.')
        // GitHub  사용자명 입력
        string(name: 'GITHUB_USERNAME',  defaultValue: '', description: 'GitHub  사용자명을 입력하세요.')
    }

 

        stage('헬름 배포') {
            steps {
                // helm 명령 사용 - [1] 중요 데이터 암호화 관리
                withCredentials([file(credentialsId: 'k8s_master_config', variable: 'KUBECONFIG')]) {
                    sh "helm upgrade api-tester-${CLASS_NUM} ./${CLASS_NUM}/deploy/helm/api-tester -f ./${CLASS_NUM}/deploy/helm/api-tester/values-${params.PROFILE}.yaml" +
                            " -n anotherclass-222-${params.PROFILE} --install --kubeconfig " + '${KUBECONFIG}' +

                            // [5] Helm 부가기능
                            " --wait --timeout=10m" +   // 최대 10분으로 설정

                            // [2] 잦은 배포 - versioning 무의미, 계획된 배포 - versioning 필수
                            " --set image.tag=${TAG}" +
                            " --set image.repository=${DOCKERHUB_USERNAME}/api-tester"
                }
            }
        }

 

PROFILE은 앞에 "params"가 붙어있고 (${params.PROFILE}),

DOCKERHUB_USERNAME은 환경변수처럼 그냥 ${DOCKERHUB_USERNAME}로 사용하신 것을 볼 수 있습니다.

 

혹시 choice문을 사용하여 사용자가 선택하는 prarmeter의 경우 params를 붙인다던가 하는 규칙이 있는 걸까요?

 

위 두 개 사용 방법이 다른 것에 원인이 있는지 궁금합니다.

답변 1

1

일프로님의 프로필 이미지
일프로
지식공유자

제 스크립트에 변수 규칙이 살짝 바르지 않은 점이 있네요. 좋은 질문 감사합니다.

젠킨스 스크립트가 관대한 면이 있기 때문에, paramas를 붙이건 안붙이건 문제는 없을 거고요.

하지만 일관된 방식으로 쓰려면 아래와 같이 쓰시면 됩니다.

Groovy 코드 블록에서 parameters로 정의한 변수는 다른 블록에서 ${params.PROFILE}이렇게 쓰고요.

Groovy 문법 안에 shell(sh)에서 해당 변수를 사용하려면 environment로 다시 정의를 하고 ${PROFILE} 이렇게 쓰면 됩니다.

 

pipeline {
    agent any
    parameters {
        choice(name: 'PROFILE', choices: ['dev', 'qa', 'prod'], description: '배포 환경 선택')
        string(name: 'DOCKERHUB_USERNAME', defaultValue: '', description: '도커허브 사용자명')
    }
    environment {
        PROFILE = "${params.PROFILE}"
        DOCKERHUB_USERNAME = "${params.DOCKERHUB_USERNAME}"
    }
    stages {
        stage('Print Environment') {
            steps {
                echo "Groovy에서 PROFILE: ${params.PROFILE}"
                sh '''
                    echo "Shell에서 PROFILE: ${PROFILE}"
                    echo "Shell에서 DOCKERHUB_USERNAME: ${DOCKERHUB_USERNAME}"
                '''
            }
        }
    }
}
alchdli.odd님의 프로필 이미지
alchdli.odd
질문자

빠른 답변 감사합니다! 좋은 강의 항상 감사히 잘 듣고 있습니다 :)

alchdli.odd님의 프로필 이미지
alchdli.odd

작성한 질문수

질문하기