Kubernetes 배포로 배포하기 위해 Jenkins에서 빌드 번호로 Docker 이미지의 버전을 지정하는 방법은 무엇입니까?

Jacob

현재 Kubernetes 클러스터에 배포 할 Docker 이미지의 버전 번호 또는 빌드 번호를 추가하려고합니다. 이전에는 :latest태그 로만 작업했습니다 . 그러나 latesttag를 사용할 때 Dockerhub 이미지 레지스트리에서 가져 오는 데 문제가 있습니다. 그래서 내 도커 이미지에 빌드 번호를 사용할 때 <image-name>:{build-number}.

신청 구조

내 Kubernetes 배포에서 배포 및 서비스를 사용하고 있습니다. 다음과 같이 배포 파일에 내 이미지 저장소를 정의하고 있습니다.

   containers:
   - name: test-kube-deployment-container
     image: samplekubernetes020/testimage:latest
     ports:
        - name: http
          containerPort: 8085
          protocol: TCP

여기에 최신 태그 대신 배포 YAML에 내 이미지와 함께 빌드 번호를 입력하고 싶습니다.

  1. 액세스를 위해 임의의 빌드 번호를 보유하기 위해 환경 변수를 사용할 수 있습니까 <image-name>:${buildnumber}?
  2. 난수를 제공하는 환경 변수를 사용하려면 어떻게 난수를 환경 변수에 생성 할 수 있습니까?

이미지 버전 구현에 대한 업데이트

내 수정 된 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 저장소를 확인할 때마다 최신 푸시 상태를 표시 할 때마다

그래서 내 혼란은 다음과 같습니다.

  1. 내 deployment.yaml 파일에서 최신 이미지를 가져 오는 데 문제가 있습니까?
  2. 이미지를 빌드하고 푸시하는 컴퓨터에서 이미지에 태그를 지정할 때 문제가 있습니까?
damitj07

표준 방식 또는 최소한 우리 대부분에게 효과가 있었던 방식은 버전이 지정되거나 태그가 지정된 이미지를 만드는 것입니다. 예를 들면

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관