双重标记泊坞窗图像(最新+设置版本)+最新部署至k8s +然后查找真实标签?

时间:2018-05-26 01:39:39

标签: docker kubernetes

我想在构建/泊坞窗推送时双重标记泊坞窗图像(最新版本+版本,例如1.3.0-78)。

然后我想用最新的标签将我的所有应用程序部署到kubernetes,如果测试通过,那么查看" real"标签(1.3.0-78)来自图像摘要我可以从与最新"相关联的kubernetes中获取,然后创建所有docker标签的清单作为候选版本。

不幸的是,我还没有找到一个很好的方法来找到真实的"标签只是基于摘要。

看起来您必须迭代整个存储库中的所有标记并查找匹配的摘要。鉴于特定图像可能有数百或数千个标签,这可能需要很长时间。

这是一个脚本,可以找到所有具有相同摘要的标记,但速度非常慢:

REPOSITORY=$1
TARGET_TAG=$2


# find all tags
ALL_TAGS=$(curl -s  $REPOSITORY/tags/list | jq -r .tags[])

# get image digest for target
TARGET_DIGEST=$(curl -s -D -  -H "Accept: application/vnd.docker.distribution.manifest.v2+json"   $REPOSITORY/manifests/$TARGET_TAG | grep Docker-Content-Digest | cut -d ' ' -f 2)

# for each tags
for tag in ${ALL_TAGS[@]}; do
  echo "checking tag ${tag}"
  # get image digest
  digest=$(curl -s -D -  -H "Accept: application/vnd.docker.distribution.manifest.v2+json" $REPOSITORY/manifests/$tag | grep Docker-Content-Digest | cut -d ' ' -f 2)

  # check digest
  if [[ $TARGET_DIGEST = $digest ]]; then
    echo "$tag $digest"
  fi
done

有没有人有另一种方法?

1 个答案:

答案 0 :(得分:0)

  

然后我想使用最新的标签

将我的所有应用程序部署到kubernetes

不,你肯定不会;你想用发布候选者图像创建GitLab调用an environment的内容,然后如果一切顺利的话将RC提升为真实的Deployment。在几乎所有情况下使用:latest都是一种灾难。

如果您坚持使用:latest,那么我建议将“真实”图片标记放在临时Deployment的注释,标签或环境变量中您将能够在以后获取该信息,不仅仅是为了您的理智,还可以将其提供给可能会拆除临时堆栈并将图像提升到生产堆栈的过程。