目前,我正在尝试为Docker镜像添加版本号或内部版本号以部署在Kubernetes集群上。以前,我只使用:latest
标签。但是,当我使用latest
tag时,我发现从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中。
<image-name>:${buildnumber}
吗?映像版本实施的更新
我修改过的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存储库时,每次显示最新推送状态时
所以我的困惑是:
标准的方法或至少对我们大多数人有用的方法是创建版本化或标记的图像。例如
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] 删除。
我来说两句