如何将 ECR Docker 图像标记为产品和非产品
How to tag ECR Docker Images as prod and non-prod
我有一个 CI/CD 管道,只有一个 JenkinsBuild.jk 设置,只要拉取请求合并到主分支,就会自动触发。
我在 JenkinsBuild 中有一堆像 'docker build' 和 'docker push' 这样的命令,它创建了 docker-images 的版本,比如:
x.36, x.37, x.38, x.39, x.40, x.41 , x.42, x.43, x.44, x.45(添加前缀“x. " 删除未标记的图像)。
现在问题出现了,当我不得不部署这些 dockerImages 中的一些而不是全部时。示例 - x.36、x.40 和 x.45 是部署到 prod 和 rest 的映像,所有映像都用于非 prod 环境以测试代码。
当我应用下面的 ECR 生命周期策略时,它会保留前 5 个图像,因此所有未部署到生产的版本也将被存储,而最近部署的将被删除。示例:前 5 个图像,即 x.41、x.42、x.43、x.44、x.45 存储在 ECR 中,最近生产 docker 个图像,即 x.36、x.40 由于以下原因被删除低于政策(x.45 未被删除,因为它是前 5 个图像之一)。
{
"rulePriority": 1,
"description": "Keep last 5 images",
"selection": {
"tagStatus": "tagged",
"tagPrefixList": ["x."],
"countType": "imageCountMoreThan",
"countNumber": 5
},
"action": {
"type": "expire"
}
}
谁能帮我看看 ECR 策略如何只能删除非产品 docker 图片?
或
如何使用 JenkinsDeploy.jk 在产品部署期间将 docker 图像覆盖为 p.36、p.40、p.45?
可以的话请多多指教。感谢您阅读我的 post.
由于没有生产 ECR 图像的模式,因此它们是经过精心挑选的。您需要将一些标识符添加到您的生产映像并从您的 ecr 生命周期策略中保存它们。
一种方法是:
- 重命名要提升为产品的每个 ECR 映像的标签,即 运行 在提升之前手动此 bash 脚本:
./rename_tag.sh <repo_name> "x.36" "p.36"
REPO_NAME=
IMG_TAG=
NEW_TAGE=
MANIFEST=$(aws ecr batch-get-image --repository-name "$REPO_NAME" --image-ids imageTag="$IMG_TAG" --query 'images[].imageManifest' --output text)
aws ecr put-image --repository-name "$REPO_NAME" --image-tag "$NEW_TAG" --image-manifest "$MANIFEST"
aws ecr batch-delete-image --repository-name "$REPO_NAME" --image-ids imageTag="$IMG_TAG"
重命名后,您将使用 p.36 作为生产图像。
不要忘记将您的 ECR 生命周期政策更新为:
{
"rules": [
{
"rulePriority": 1,
"description": "Keep 10 production images",
"selection": {
"tagStatus": "tagged",
"tagPrefixList": ["p"],
"countType": "imageCountMoreThan",
"countNumber": 10
},
"action": {
"type": "expire"
}
},
{
"rulePriority": 2,
"description": "Keep 5 nonprod images",
"selection": {
"tagStatus": "tagged",
"countType": "imageCountMoreThan",
"countNumber": 5
},
"action": {
"type": "expire"
}
}
]
}
如果需要,您可以增加产品的数量,并且您可以 运行 在 JenkinsDeploy.jk 中使用此脚本(基于构建成功可能是),但是由于您说产品促销是手动的,所以它会带来更多感觉手动调用它。
我有一个 CI/CD 管道,只有一个 JenkinsBuild.jk 设置,只要拉取请求合并到主分支,就会自动触发。
我在 JenkinsBuild 中有一堆像 'docker build' 和 'docker push' 这样的命令,它创建了 docker-images 的版本,比如:
x.36, x.37, x.38, x.39, x.40, x.41 , x.42, x.43, x.44, x.45(添加前缀“x. " 删除未标记的图像)。
现在问题出现了,当我不得不部署这些 dockerImages 中的一些而不是全部时。示例 - x.36、x.40 和 x.45 是部署到 prod 和 rest 的映像,所有映像都用于非 prod 环境以测试代码。
当我应用下面的 ECR 生命周期策略时,它会保留前 5 个图像,因此所有未部署到生产的版本也将被存储,而最近部署的将被删除。示例:前 5 个图像,即 x.41、x.42、x.43、x.44、x.45 存储在 ECR 中,最近生产 docker 个图像,即 x.36、x.40 由于以下原因被删除低于政策(x.45 未被删除,因为它是前 5 个图像之一)。
{
"rulePriority": 1,
"description": "Keep last 5 images",
"selection": {
"tagStatus": "tagged",
"tagPrefixList": ["x."],
"countType": "imageCountMoreThan",
"countNumber": 5
},
"action": {
"type": "expire"
}
}
谁能帮我看看 ECR 策略如何只能删除非产品 docker 图片?
或
如何使用 JenkinsDeploy.jk 在产品部署期间将 docker 图像覆盖为 p.36、p.40、p.45?
可以的话请多多指教。感谢您阅读我的 post.
由于没有生产 ECR 图像的模式,因此它们是经过精心挑选的。您需要将一些标识符添加到您的生产映像并从您的 ecr 生命周期策略中保存它们。
一种方法是:
- 重命名要提升为产品的每个 ECR 映像的标签,即 运行 在提升之前手动此 bash 脚本:
./rename_tag.sh <repo_name> "x.36" "p.36"
REPO_NAME=
IMG_TAG=
NEW_TAGE=
MANIFEST=$(aws ecr batch-get-image --repository-name "$REPO_NAME" --image-ids imageTag="$IMG_TAG" --query 'images[].imageManifest' --output text)
aws ecr put-image --repository-name "$REPO_NAME" --image-tag "$NEW_TAG" --image-manifest "$MANIFEST"
aws ecr batch-delete-image --repository-name "$REPO_NAME" --image-ids imageTag="$IMG_TAG"
重命名后,您将使用 p.36 作为生产图像。
不要忘记将您的 ECR 生命周期政策更新为:
{
"rules": [
{
"rulePriority": 1,
"description": "Keep 10 production images",
"selection": {
"tagStatus": "tagged",
"tagPrefixList": ["p"],
"countType": "imageCountMoreThan",
"countNumber": 10
},
"action": {
"type": "expire"
}
},
{
"rulePriority": 2,
"description": "Keep 5 nonprod images",
"selection": {
"tagStatus": "tagged",
"countType": "imageCountMoreThan",
"countNumber": 5
},
"action": {
"type": "expire"
}
}
]
}
如果需要,您可以增加产品的数量,并且您可以 运行 在 JenkinsDeploy.jk 中使用此脚本(基于构建成功可能是),但是由于您说产品促销是手动的,所以它会带来更多感觉手动调用它。