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

triginta maius님의 프로필 이미지
triginta maius

작성한 질문수

쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2

Jenkins Pipeline step 1 에러입니다.

작성

·

1K

·

수정됨

1

스크린샷 2024-05-05 오전 11.07.20.png

Container Build 단계에서 아래와 같은 에러가 발생합니다.

The recommended git tool is: NONE
No credentials specified
 > git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/2211-jenkins_pipeline-step1/.git # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git # timeout=10
Fetching upstream changes from https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git
 > git --version # timeout=10
 > git --version # 'git version 2.25.1'
 > git fetch --tags --force --progress -- https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/main^{commit} # timeout=10
Checking out Revision fb1fbf9171da06bea8c17ae38ff8e3f47981527c (refs/remotes/origin/main)
 > git config core.sparsecheckout # timeout=10
 > git config core.sparsecheckout true # timeout=10
 > git read-tree -mu HEAD # timeout=10
 > git checkout -f fb1fbf9171da06bea8c17ae38ff8e3f47981527c # timeout=10
ERROR: Checkout failed
hudson.plugins.git.GitException: Command "git checkout -f fb1fbf9171da06bea8c17ae38ff8e3f47981527c" returned status code 128:
stdout: 
stderr: error: Entry '.gitignore' not uptodate. Cannot update sparse checkout.

	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2842)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:3170)
Caused: hudson.plugins.git.GitException: Could not checkout fb1fbf9171da06bea8c17ae38ff8e3f47981527c
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:3198)
	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1355)
	at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:136)
	at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:101)
	at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:88)
	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
ERROR: Maximum checkout retry attempts reached, aborting

 

강사님의 Github Repository URL, fork 뜬 제 Github Repository URL 모두 시도해봤지만 동일한 결과입니다. (fork 뜬 Github Repo URL 시, Sync Fork 확인했습니다.)

구글링을 해도 시원한 해결이 되지 않아서 질문 드립니다.

감사합니다.

답변 9

1

안녕하세요, 강사님. 해결했습니다!

기존 실행했던 Ubuntu 20.04 LTS에서 Ubuntu 22.04 LTS로 변경했더니 정말 말끔하게 잘 됩니다.

정확한 에러의 원인은 구글링을 하더라도 나오지 않아서 모르겠지만 OS 버전이 업데이트 되면서 Git의 버전이 같이 업데이트 된 것을 확인했는데요, 추측으로는 Git의 버전이 업데이트 되면서 동작하게 된 것 같습니다.

  • Ubuntu 20.04 LTS : Git 2.25.1

  • Ubuntu 22.04 LTS : Git 2.34.1

황금 같은 연휴 기간에도 빠르게 답변해주시고 같이 봐주셔서 정말 감사합니다!

 

imageimage

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

진행사항 정리 감사합니다. 잘 확인 했고요. 😀
근데 Ubuntu 20.04 LTS : Git 2.25.1 라 하면, 현재 리눅스를 Ubuntu로 해서 쿠버네티스를 구축하신 건가요?

넵넵! 맞습니다!

Mac ARM을 사용하고 있어서 Vagrant + Ubuntu로 사용해서 구축했습니다!

이상하게 Vagrant + Rocky는 ARM에서는 동작이 안 되더라구요...

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

아 환경이 달랐군요 ^^ 고생하셨어요~!

0

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

해당 이슈 재설치로 해결 되셨을까요?

안녕하세요. 강사님!

답변이 많이 늦었습니다… 재설치로도 해결이 되지 않아서 일단 스킵하려고 합니다 ㅠㅠ

그래도 확인해주신 덕분에 완강까지 할 수 있었습니다!

감사합니다!

0

The recommended git tool is: NONE
No credentials specified
 > git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/2211-jenkins_pipeline-step1/.git # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git # timeout=10
Fetching upstream changes from https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git
 > git --version # timeout=10
 > git --version # 'git version 2.25.1'
 > git fetch --tags --force --progress -- https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/main^{commit} # timeout=10
Checking out Revision fb1fbf9171da06bea8c17ae38ff8e3f47981527c (refs/remotes/origin/main)
 > git config core.sparsecheckout # timeout=10
 > git config core.sparsecheckout true # timeout=10
 > git read-tree -mu HEAD # timeout=10
 > git checkout -f fb1fbf9171da06bea8c17ae38ff8e3f47981527c # timeout=10
ERROR: Checkout failed
hudson.plugins.git.GitException: Command "git checkout -f fb1fbf9171da06bea8c17ae38ff8e3f47981527c" returned status code 128:
stdout: 
stderr: error: Entry '.gitignore' not uptodate. Cannot update sparse checkout.

	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2842)
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:3170)
Caused: hudson.plugins.git.GitException: Could not checkout fb1fbf9171da06bea8c17ae38ff8e3f47981527c
	at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$9.execute(CliGitAPIImpl.java:3198)
	at hudson.plugins.git.GitSCM.checkout(GitSCM.java:1355)
	at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:136)
	at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:101)
	at org.jenkinsci.plugins.workflow.steps.scm.SCMStep$StepExecutionImpl.run(SCMStep.java:88)
	at org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
ERROR: Maximum checkout retry attempts reached, aborting


앗 넵, 제가 fork한 repo로 작성된 스크립트를 드렸네요!
강사님께서 전달 주신 스크립트로 구성했고 빌드 전에 /var/lib/jenkins/workspace/2211-jenkins_pipeline-step1 경로 삭제하고 빌드시킨 에러입니다.

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

음...해당 에러를 재현하기가 쉽지 않네요;

흔한 에러가 아닌 거 같은데 좀 더 확인 후에 다시 답변 드리겠습니다.

넵넵!

혹시나 해서 Jenkinsfile에 sh “rm -rf .gitignore” 이 구문을 집어넣어서 .gitignore 파일을 삭제했더니 그 다음에는 Dockerfile이 uptodate가 되지 않아 checkout을 할 수 없다는 식의 에러가 발생하더라구요...

저도 서버 자체를 삭제했다가 다시 설치해서 시도해보겠습니다.
연휴 기간에 빠른 답변해주셔서 감사합니다!

0

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

올려주신 스크립트는 일단 제 환경에서 잘 동작합니다.

근데 올려주신 로그와 스크립트에 차이가 좀 있어 보이는데요.

아래 스크립트로 돌려보시고, 해당 로그를 다시 올려주시겠어요?

pipeline {
    agent any

    tools {
        gradle 'gradle-7.6.1'
        jdk 'jdk-17'
    }

    environment {
        // 본인의 username으로 하실 분은 수정해주세요.
        DOCKERHUB_USERNAME = '1pro'
        GITHUB_URL = 'https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git'
        // deployment.yaml -> image: 1pro/api-tester:v1.0.0        

        // 실습 넘버링 - (수정x)
        CLASS_NUM = '2211'
    }

    stages {
        stage('Source Build') {
            steps {
                // 소스파일 체크아웃
                git branch: 'main', url: 'https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester.git'

                // 소스 빌드
                // 755권한 필요 (윈도우에서 Git으로 소스 업로드시 권한은 644)
                sh "chmod +x ./gradlew"
                sh "gradle clean build"
            }
        }

        stage('Container Build') {
            steps {	
                // 릴리즈파일 체크아웃
                checkout scmGit(branches: [[name: '*/main']], 
                    extensions: [[$class: 'SparseCheckoutPaths', 
                    sparseCheckoutPaths: [[path: "/${CLASS_NUM}"]]]], 
                    userRemoteConfigs: [[url: "${GITHUB_URL}"]])
            }
        }

    }
}

 

0

pipeline {
    agent any

    tools {
        gradle 'gradle-7.6.1'
        jdk 'jdk-17'
    }

    environment {
        // 본인의 username으로 하실 분은 수정해주세요.
        DOCKERHUB_USERNAME = 'may30'
        GITHUB_URL = 'https://github.com/may-30/kubernetes-anotherclass-sprint2.git'

        // 실습 넘버링 - (수정x)
        CLASS_NUM = '2211'
    }

    stages {
        stage('Source Build') {
            steps {
                // 소스파일 체크아웃
                git branch: 'main', url: 'https://github.com/k8s-1pro/kubernetes-anotherclass-api-tester.git'

                // 소스 빌드
                // 755권한 필요 (윈도우에서 Git으로 소스 업로드시 권한은 644)
                sh "chmod +x ./gradlew"
                sh "gradle clean build"
            }
        }

        stage('Container Build') {
            steps {	
                // 릴리즈파일 체크아웃
                checkout scmGit(branches: [[name: '*/main']], 
                    extensions: [[$class: 'SparseCheckoutPaths', 
                    sparseCheckoutPaths: [[path: "/${CLASS_NUM}"]]]], 
                    userRemoteConfigs: [[url: "${GITHUB_URL}"]])

                // jar 파일 복사
                sh "cp ./build/libs/app-0.0.1-SNAPSHOT.jar ./${CLASS_NUM}/build/docker/app-0.0.1-SNAPSHOT.jar"

                // 컨테이너 빌드 및 업로드
                sh "docker build -t ${DOCKERHUB_USERNAME}/api-tester:v1.0.0 ./${CLASS_NUM}/build/docker"
                script{
                    if (DOCKERHUB_USERNAME == "1pro") {
                        echo "docker push ${DOCKERHUB_USERNAME}/api-tester:v1.0.0"
                    } else {
                        sh "docker push ${DOCKERHUB_USERNAME}/api-tester:v1.0.0"
                    }
                }
            }
        }

        stage('K8S Deploy') {
            steps {
                // 쿠버네티스 배포 
                sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/namespace.yaml"
				sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/configmap.yaml"
				sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/secret.yaml"
				sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/service.yaml"
				sh "kubectl apply -f ./${CLASS_NUM}/deploy/k8s/deployment.yaml"
            }
        }
    }
}

Jenkinsfile 스크립트 전달 드립니다!

0

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

작성하신 Script를 올려봐 주시겠어요?

로그를 자세히 보니 소스파일 체크아웃 경로를 릴리즈파일 경로로 잘못 넣으신 것 같아요.

 

0

알려주신 경로(/var/lib/jenkins/workspace/2211-jenkins_pipeline-step1) 를 삭제해도 동일한 에러가 출력됩니다.

0

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

안녕하세요.

뭔가 git이 꼬인 거 같은데, CICD Server로 들어가서 /var/lib/jenkins/workspace/2211-jenkins_pipeline-step1/ 폴더를 통으로 지우고, 다시 Jenkins Job을 실행해 보시겠어요?

0

안녕하세요, 인프런 AI 인턴입니다.

triginta maius님의 질문과 유사한 상황을 해결할 수 있는 정보를 기존 답변에서 찾았습니다. 질문에서는 Jenkins Pipeline의 “Container Build” 단계에서 발생하는 특정 git checkout 관련 오류에 대해 설명하고 있습니다. 이러한 문제는 주로 Git 저장소와 관련된 작업 중에 발생할 수 있으며, 일반적으로 로컬 저장소가 최신 상태가 아니거나 특정 설정의 불일치 때문에 발생할 수 있습니다.

유사한 질문에서는 Jenkins의 Pipeline 구성 또는 git 명령과 관련된 문제를 다루는 경우가 많았으며, 이 중에서도 Git 저장소를 제대로 체크아웃하지 못하는 문제가 일부 답변에 포함되어 있었습니다.

구체적으로, Jenkins에서 Pipeline을 설정할 때 Git 관련 설정(예: credentials, .gitignore 파일의 충돌 해결, sparse checkout 설정 등)이 올바르게 구성되어야 하며, 이에 대한 해결책으로 다음과 같은 접근법을 권장할 수 있습니다:

  • Git Credentials의 확인: Jenkins에서 Git 저장소에 접근하기 위해 사용하는 credentials이 정확한지 확인합니다. 올바른 인증 정보가 설정되어 있지 않으면 접근 권한 문제가 발생할 수 있습니다.
  • .gitignore 충돌 문제 해결: 오류 메시지에서 언급된 .gitignore 파일과 관련된 문제를 확인하고, 필요한 경우 로컬 및 원격 저장소 간의 충돌을 해결해야 할 수 있습니다.
  • Sparse Checkout 설정 수정: sparse checkout이 활성화된 경우 해당 설정을 검토하고 정확한 경로 및 파일이 포함되도록 조정합니다.

다만, 직접적으로 동일한 상황을 해결하는 구체적인 답변을 찾지 못했습니다. Jenkins와 Git을 함께 사용하는 과정에서 발생할 수 있는 일반적인 문제와 그에 대한 해결책을 참고할 수 있는 링크는 다음과 같습니다:

해당 링크에서는 Jenkins에서 소스 코드 빌드 시 발생하는 문제와 관련된 해결 방법이 나와 있습니다. 비록 정확히 질문에서 언급된 문제의 해결책이 될 수는 없지만, Jenkins에서 발생할 수 있는 비슷한 유형의 문제를 이해하고 해결하는 데 도움이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

triginta maius님의 프로필 이미지
triginta maius

작성한 질문수

질문하기