인프런 커뮤니티 질문&답변
Argo CD Image Updater를 이용한 수업 이슈(2232) ImagePull
작성
·
104
·
수정됨
1
처음 강의부터 쭉 따라오신 분들에 한해서 제가 발견한 이슈사항 공유하고 싶어서 글을 남겼습니다.
저의 경우는 Repository를 전부 제 개인껄로 옮겨서 사용중인데요.
문제는 포크를 하지않고 제가 공부하는 Repo가 따로 있어 거기에 모아 놨다는게 문제입니다.
github pull할때 path가 미친듯이 짜증나더라구요.
pull하는 기준이 제가 git으로 관리하는 폴더들이 싸드리 싹싹 똑같이 생성되기 때문에 접근이 엄청 힘들었는데요.
그래서 이짓을 해야 했습니다.
pipeline {
agent any
tools {
gradle 'gradle-7.6.1'
jdk 'jdk-17'
}
parameters {
// 배포 환경 선택
choice(choices: ['dev', 'qa', 'prod'], name: 'PROFILE', description: '배포 환경 선택')
}
environment {
// 본인의 username으로 하실 분은 수정해주세요.
DOCKERHUB_USERNAME = '비밀'
GITHUB_URL = '입니다'
APP_VERSION = '1.1.1'
BUILD_DATE = sh(script: "echo `date +%y%m%d.%d%H%M`", returnStdout: true).trim()
// 위에 date 포맷 오류가 있어요. %y%m%d.%H%M%S가 맞습니다)
TAG = "${APP_VERSION}-" + "${BUILD_DATE}"
// 소스코드 위치
SOURCE_DIR = "kubernetes/일프로/project/kubernetes-anotherclass-api-tester-main"
// 배포 및 도커관련 위치
KUBE_DIR = "kubernetes/일프로/kubernetes-anotherclass-sprint2-main"
// 실습 넘버링
CLASS_NUM = '2232'
}
stages {
stage('소스파일 체크아웃') {
steps {
checkout scmGit(branches: [[name: '*/main']],
extensions: [[$class: 'SparseCheckoutPaths',
sparseCheckoutPaths: [[path: "${SOURCE_DIR}"]]]],
userRemoteConfigs: [[url: "${GITHUB_URL}"]])
sh "pwd"
sh "ls -al"
}
}
stage('소스 빌드') {
steps {
// 755권한 필요 (윈도우에서 Git으로 소스 업로드시 권한은 644)
sh "pwd"
sh "ls -al"
sh "cd ./${SOURCE_DIR} && chmod +x ./gradlew"
sh "cd ./${SOURCE_DIR} && gradle clean build"
}
}
stage('릴리즈파일 체크아웃') {
steps {
checkout scmGit(branches: [[name: '*/main']],
extensions: [[$class: 'SparseCheckoutPaths',
sparseCheckoutPaths: [[path: "${KUBE_DIR}/${CLASS_NUM}"]]]],
userRemoteConfigs: [[url: "${GITHUB_URL}"]])
}
}
stage('컨테이너 빌드 및 업로드') {
steps {
// jar 파일 복사
sh "cp ./${SOURCE_DIR}/build/libs/app-0.0.1-SNAPSHOT.jar ./${KUBE_DIR}/${CLASS_NUM}/build/docker/app-0.0.1-SNAPSHOT.jar"
script{
// 도커 로그인
withCredentials([usernamePassword(credentialsId: 'docker_password', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {
sh "echo " + '${PASSWORD}' + " | docker login -u " + '${USERNAME}' + " --password-stdin"
}
// 도커 빌드 및 업로드
if (DOCKERHUB_USERNAME == "1pro") {
TAG = "1.0.1-231220.175735" // 1pro useranme 수강생을 위한 고정 태그명
sh "docker build ./${CLASS_NUM}/build/docker -t ${DOCKERHUB_USERNAME}/api-tester:${TAG}"
} else {
// 도커 빌드
sh "docker build -t ${DOCKERHUB_USERNAME}/api-tester:${TAG} ./${KUBE_DIR}/${CLASS_NUM}/build/docker"
// [2] 잦은 배포 - versioning 무의미, 계획된 배포 - versioning 필수
sh "docker push ${DOCKERHUB_USERNAME}/api-tester:${TAG}"
}
// 도커 이미지 삭제
sh "docker rmi ${DOCKERHUB_USERNAME}/api-tester:${TAG}"
}
}
post {
always {
// 도커 로그아웃
sh "docker logout"
}
}
}
}
}
삽질을 몇번하니 이젠 뭐 대충 어디서 문제가 발생하는지 보이더군요... 뭐 서두는 여기까지...
급하신분은 여기부터 보시면 됩니다.
싱크가 제대로 안될 경우 해결방법
detail에서 annotations 작성시 image path를 잘 적었는지 확인(1pro/api-tester -> ${docker username}/api-tester
repo URL 본인 것인지 확인
PATH 경로 잘 작성했는지 확인(저처럼 fork를 하지않고 특정 레포에 넣으신분들...)
image pull이 안되는 경우 해결방법
Jenkinsfile을 뒤져서 DOCKERHUB_USERNAME 및 GITHUB_URL변경했는지 확인
2232
/deploy
/helm
/api-tester 폴더에 들어가 values.yaml과 values-xx.yaml파일들의 images가 1pro-/api-tester가 아닌 ${docker username}/api-tester인지 확인
Docker Hub에 접속해 v1.0.0으로 태그가 달려있으면 삭제 후 212 List View의 container-build했던 부분의 Jenkinsfile에서 image생성시 사용한 태그가 v1.0.0인지 확인해보고 GitHub에 들어가 v를 삭제한 1.0.0으로 커밋한 후에 컨테이너 빌드를 다시 시작(이 때 CI/CD서버에 docker에 로그인이 되어 있어야합니다.)
저는 이정도로 해결이 되었습니다.
아름다운 결과...

답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
배성환님이 경험하신 Argo CD Image Updater와 관련된 이슈 및 해결 방법을 공유해주셔서 감사드립니다. 여러분들이 프로젝트를 진행하면서 겪을 수 있는 문제들을 잘 정리해주셨습니다. 특히 개인적인 환경 설정이나 관리 방법이 다를 경우 발생할 수 있는 문제들이라는 점에서 도움이 될 수 있을 것 같습니다.
문제와 해결 방법 요약:
Image Pull 이슈
- Jenkinsfile에서 DOCKERHUB_USERNAME 및 GITHUB_URL 설정이 정확한지 확인해야 합니다.
- values.yaml 파일의 이미지 경로가 본인의 Docker username에 맞춰 설정되어 있는지 확인합니다.
- Jenkinsfile에서 DOCKERHUB_USERNAME 및 GITHUB_URL 설정이 정확한지 확인해야 합니다.
파일 구조 및 경로 문제
- Git clone 경로 문제로 인해 발생할 수 있는 문제 예방을 위해 경로 설정을 점검합니다.
- 경로 싱크가 제대로 되지 않을 경우 PATH 설정을 다시 한번 확인합니다.
- Git clone 경로 문제로 인해 발생할 수 있는 문제 예방을 위해 경로 설정을 점검합니다.
배성환님이 제공해주신 정보는 위 문제들을 해결하는 데 큰 도움이 될 것입니다. 쉐어해주신 이미지도 문제 해결에 아주 유용한 시각적 참고자료가 될 것 같습니다.
추가적으로, 이러한 문제와 유사한 사례들에 대한 도움이 될 만한 기존 답변을 소개해 드립니다:
위 질문에서는 Jenkins와 관련된 설정 이슈들을 다루고 있으며, Git 저장소 및 Jenkins 설정의 중요성에 대해서도 언급하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




