미해결
쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
Argo CD Image Updater를 이용한 수업 이슈(2232) ImagePull
처음 강의부터 쭉 따라오신 분들에 한해서 제가 발견한 이슈사항 공유하고 싶어서 글을 남겼습니다. 저의 경우는 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-testerrepo 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에 로그인이 되어 있어야합니다.) 저는 이정도로 해결이 되었습니다. 아름다운 결과...