현재 Kubernetes 클러스터에 배포 할 Docker 이미지의 버전 번호 또는 빌드 번호를 추가하려고합니다. 이전에는 :latest
태그 로만 작업했습니다 . 그러나 latest
tag를 사용할 때 Dockerhub 이미지 레지스트리에서 가져 오는 데 문제가 있습니다. 그래서 내 도커 이미지에 빌드 번호를 사용할 때 <image-name>:{build-number}
.
내 Kubernetes 배포에서 배포 및 서비스를 사용하고 있습니다. 다음과 같이 배포 파일에 내 이미지 저장소를 정의하고 있습니다.
containers:
- name: test-kube-deployment-container
image: samplekubernetes020/testimage:latest
ports:
- name: http
containerPort: 8085
protocol: TCP
여기에 최신 태그 대신 배포 YAML에 내 이미지와 함께 빌드 번호를 입력하고 싶습니다.
<image-name>:${buildnumber}
?이미지 버전 구현에 대한 업데이트
내 수정 된 Jenkinsfile에는 이미지에 이미지 버전 번호를 할당하는 다음과 같은 단계가 포함되어 있습니다. 그러나 여전히 저장소 변경 후 업데이트 된 결과를 얻지 못합니다.
Jenkinsfile에서 다음과 같은 단계를 만들었습니다.
stage ('imagebuild')
{
steps
{
sh 'docker build -f /var/lib/jenkins/workspace/jpipeline/pipeline/Dockerfile -t spacestudymilletech010/spacestudykubernetes /var/lib/jenkins/workspace/jpipeline/pipeline'
sh 'docker login --username=my-username --password=my-password'
sh "docker tag spacestudymilletech010/spacestudykubernetes:latest spacestudymilletech010/spacestudykubernetes:${VERSION}"
sh 'docker push spacestudymilletech010/spacestudykubernetes:latest'
}
}
내 배포 YAML 파일에는 다음과 같은 내용이 포함되어 있습니다.
containers:
- name: test-kube-deployment-container
image: spacestudymilletech010/spacestudykubernetes:latest
ports:
- name: http
containerPort: 8085
protocol: TCP
혼란
NB : dockerhub 저장소를 확인할 때마다 최신 푸시 상태를 표시 할 때마다
그래서 내 혼란은 다음과 같습니다.
표준 방식 또는 최소한 우리 대부분에게 효과가 있었던 방식은 버전이 지정되거나 태그가 지정된 이미지를 만드는 것입니다. 예를 들면
samplekubernetes020/testimage:1
samplekubernetes020/testimage:2
samplekubernetes020/testimage:3
...
...
이제 내 이미지 태그를 업그레이드 할 때 배포에있는 이미지를 어떻게 업데이트합니까?
솔루션 입력
최신 버전의 코드로 새 이미지를 컴파일하고 빌드 할 때 증분 고유 버전으로 태그를 지정합니다 . 이 태그는 고유하거나 빌드 번호 등이 될 수 있습니다.
그런 다음이 태그가 지정된 이미지를 도커 레지스트리에 푸시합니다.
이미지가 업로드되면 kubectl
또는 kubernetes API를 사용하여 최신 컨테이너 이미지로 배포를 업데이트 할 수 있습니다 .
kubectl set image deployment/my-deployment test-kube-deployment-container=samplekubernetes020/testimage:1 --record
위의 단계 집합은 일반적으로 CI 파이프 라인에서 발생하며 여기에서 이미지 버전 또는 image : version을 환경 변수 자체에 저장합니다.
게시물 댓글 업데이트
Jenkins를 사용 하고 있으므로 Jenkins가 빌드 런타임에 이러한 값을 삽입하므로 Jenkinsfile 자체에서 현재 빌드 번호 와 commit-id 및 기타 많은 변수를 가져올 수 있습니다. 나를 위해 이것은 작동합니다. 참조 일뿐입니다.
environment {
NAME = "myapp"
VERSION = "${env.BUILD_ID}-${env.GIT_COMMIT}"
IMAGE = "${NAME}:${VERSION}"
}
stages {
stage('Build') {
steps {
echo "Running ${VERSION} on ${env.JENKINS_URL}"
git branch: "${BRANCH}", .....
echo "for brnach ${env.BRANCH_NAME}"
sh "docker build -t ${NAME} ."
sh "docker tag ${NAME}:latest ${IMAGE_REPO}/${NAME}:${VERSION}"
}
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다