如何在Jenkins中使用内部版本号对Docker映像进行版本控制以作为Kubernetes部署进行部署?

雅各布

目前,我正在尝试为Docker镜像添加版本号或内部版本号以部署在Kubernetes集群上。以前,我只使用:latest标签。但是,当我使用latesttag时,我发现从Dockerhub映像注册表中提取问题。所以当我将构建号用于docker image时<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包含如下步骤,将图像版本号分配给image。但是在更改存储库后,我仍然没有得到更新的结果,

我在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

混乱之处

注意:当我检查dockerhub存储库时,每次显示最新推送状态时

所以我的困惑是:

  1. 在我的deploy.yaml文件中提取最新映像是否有问题?
  2. 在我从构建图像并推送图像的机器上标记图像时是否出现问题?
damitj07

标准的方法或至少对我们大多数人有用的方法是创建版本化或标记的图像。例如

samplekubernetes020/testimage:1
samplekubernetes020/testimage:2
samplekubernetes020/testimage:3
...
...

现在,我将尝试回答您的实际问题,即当映像标签升级时如何更新部署中的映像?

输入解决方案

  • 使用最新版本的代码编译和构建新映像,请使用增量式唯一版本对其进行标记这个标签可以是任何唯一的或内部版本号等。

  • 然后将此标记的图像推送到Docker注册表

  • 映像上传后,您可以使用kubectl或Kubernetes API使用最新的容器映像更新部署。

    kubectl set image deployment/my-deployment test-kube-deployment-container=samplekubernetes020/testimage:1 --record

  • 以上步骤通常在CI管道中进行,您可以在其中将映像版本或image:版本存储在环境变量本身中。


更新帖子评论

由于您正在使用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 条评论
登录 后参与评论

相关文章

如何在 Jenkins 上对 Docker 映像进行版本控制并将其传递给 Kubernetes YAML 文件

如何在管道中使用 jenkins 版本号插件

如何在Jenkinsfile中使用jenkins版本号插件?

使用Ktor进行部署:如何设置AppEngine版本?

Kubernetes如何进行部署以更新映像

如何在 Android 中获取 Jenkins 内部版本号?

使用Terraform和Kubernetes进行部署时如何在Docker容器中修改文件?

Jenkins使用相同的参数进行重建,但是新的内部版本号

如何备份/还原Docker映像以进行部署?

如何减小我的Docker映像大小以进行部署?

如何使用Maven获取Jenkins内部版本号

如何在Ansible中对复杂的版本号进行排序

在部署阶段,Bluemix检索内部版本号

如何为每个 jenkins 映像运行添加内部版本号?

如何在NPM版本中表示内部版本号?

如何使用 Docker 撰写文件在 AWS 中进行部署

在Visual Studio App Center中,如何在“问题”页面上按内部版本号进行筛选?

在这种情况下,请在我的项目中使用合适版本的程序集MSHTML进行部署

VSO构建vNext-Nuget程序包构建步骤-使用内部版本号对程序包进行版本控制

熊猫如何对具有列之一作为版本号的数据框进行排序?

如何使用密码进行部署(MeteorJS)

如何参考映像的来源以进行部署创建

使用内部版本号标记Docker文件

无法提取映像以进行部署创建

如何在Teamcity中设置内部版本号?

中央存储库如何对版本号进行排序?

如何在JavaScript中将版本号作为整数传递

由于存在许多映像,因此使用docker push进行部署很慢

Oracle SQL对版本号进行排序