인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

triginta maius님의 프로필 이미지

작성한 질문수

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

Jenkins Pipeline step 1 에러입니다.

작성

·

1.4K

·

수정됨

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

2

triginta maius님의 프로필 이미지

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

기존 실행했던 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로 해서 쿠버네티스를 구축하신 건가요?

triginta maius님의 프로필 이미지

넵넵! 맞습니다!

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

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

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

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

0

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

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

triginta maius님의 프로필 이미지

안녕하세요. 강사님!

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

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

감사합니다!

0

triginta maius님의 프로필 이미지

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 경로 삭제하고 빌드시킨 에러입니다.

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

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

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

triginta maius님의 프로필 이미지

넵넵!

혹시나 해서 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

triginta maius님의 프로필 이미지

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

triginta maius님의 프로필 이미지

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

0

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

안녕하세요.

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

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 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에서 발생할 수 있는 비슷한 유형의 문제를 이해하고 해결하는 데 도움이 될 수 있습니다.

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

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

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