And Brain said,

CI/CD Argonautica - Jenkins, 선장 본문

IT/CICD Argonautica

CI/CD Argonautica - Jenkins, 선장

The Man 2023. 9. 19. 09:39
반응형

CI/CD Argonautica

Docker, 선박
Kubernetes, 조타수 Harbor, 항구
Helm, 타륜
Istio, 돛
Jenkins, 선장
ArgoCD, 출항

1장/ Loki, Trickster

Troubleshooting

 

열심히 출항 준비를 했더니, 저 멀리 느긋하게 선장이 오는 것이 보입니다. 그래도 그는 베테랑 선장답게 도착하자마자, 배의 상태를 여유있으면서도 빠지는 부분없이 점검하기 시작합니다.

 

먼저, 배가 다시 선착장에 올 때 통행증이 필요하겠지요. Harbor의 접속 정보가 담긴  Jenkins Credential을 만들어줍니다.

젠킨스 관리 -> Credentials -> Add credentials -> Username with password

 

Credential을 만들어 준 뒤 New Item -> Pipeline을 만들어줍니다.

 

 

 

다음은 배에 수하물들을 싣고 점검해야겠지요. 소스들을 클론 후 빌드하고 컨테이너에 넣어줍시다. 이것이 다음 스크립트에 관한 설명입니다.

pipeline {
    agent any
    
    environment{
        registry = "localhost:80" 
        repository = "$registry/msa/${SERVICE_NAME}" 
        registryCredential = 'harbor_credentials' 
    }
    stages{
        stage("Service"){
            stages {
                stage('CLONE') {
                    steps {
                        dir("${SERVICE_NAME}") {
                            echo 'Clone'
                            git branch: 'master', credentialsId: 'your-credentials', url: "https://github.com/your-repo"
                        }
                    }
                }
                stage('CLEAN & BUILD') {
                    steps {
                        script {
                            dir("${SERVICE_NAME}") {
                            sh "chmod +x /var/jenkins_home/workspace/MSA-Pipeline/${SERVICE_NAME}/gradlew"
                            sh "./gradlew clean"
                            sh "./gradlew bootjar"
                            }
                        }
                    }
                }
                stage('DOCKER-REGISTRY PUSH') {
                    steps {
                        script {
                            docker.withRegistry("https://$registry", "$registryCredential") {
                                dir("${SERVICE_NAME}") {
                                    def previousImageExists = sh(script: "docker pull $repository:latest", returnStatus: true) == 0
                                    if (previousImageExists) {
                                        sh "docker tag $repository:latest $repository:previous"
                                        docker.image("$repository:previous").push()
                                    } else {
                                        echo 'No previous image found. Skipping tagging and pushing.'
                                    }
                                    sh "docker build --no-cache -t $repository:latest -f Dockerfile.${SERVICE_NAME} ."
                                    docker.image("$repository:latest").push()
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

 

이 스크립트는 Spring boot를 위한 프로젝트입니다. 항상 최신 이미지 상태를 유지하기 위해 Docker는 캐시없이 빌드합니다. 참고하셔서 여러분들의 작업으로 만들어보세요!

 

* SERVICE_NAME은 Choice Parameter로 넘길 수 있습니다.

 

 

이제 선장이 모든 준비를 마치고 출항을 명령합니다.

 

 

자, 여기까지 오시느라 정말 수고많으셨습니다. 다음 시간은 'ArgoCD, 출항' 편입니다.

 

 

Thanks for watching, Have a nice day.

반응형

'IT > CICD Argonautica' 카테고리의 다른 글

CI/CD Argonautica - 1장/ Loki, Trickster  (0) 2023.10.04
CI/CD Argonautica - ArgoCD, 출항  (0) 2023.09.26
CI/CD Argonautica - Troubleshooting  (0) 2023.09.14
CI/CD Argonautica - Istio, 돛  (0) 2023.09.14
CI/CD Argonautica - Helm, 타륜  (0) 2023.09.12
Comments