[英]Check if tag of an image exists in a docker registry using shell script
我在給定的images.json
文件中有一個圖像列表及其各自的標簽,如下所示:
{
"image1":"1.1",
"image2": "1.2",
"image3": "1.3"
}
我能夠使用 sed 命令從上面的圖像中讀取值images.json
並將每一列存儲在一個數組中,例如
image=${arraydata[0]}
tag=${arraydata[1]}
對於每個圖像,我想比較它的標簽是否存在於我從 curl 命令獲得的以下 output 中:
curl -X GET https://docker.jfrog.io/artifactory/api/docker/docker-local/v2/$image/tags/list?
上面的Output:
{
"name" : "image1",
"tags" : [ "1.1", "1.2" ]
}{
"name" : "image2",
"tags" : [ "1.1", "1.2", "1.3" ]
}{
"name" : "image3",
"tags" : [ "1.1", "1.2", "1.4" ]
}
我想要一個 if/else 語句來檢查圖像的標簽是否存在於上面的結果中:
docker push jfrog/$image:$tag
也許(未經測試)
declare -A versions
while IFS=$'\t' read -r img ver; do
versions[$img]=$ver
done < <(
jq -r '. as $obj | keys[] | [., $obj[.]] | @tsv' images.json
)
# versions=([image1]="1.1" [image2]="1.2" [image3]="1.3" )
for img in "${!versions[@]}"; do
ver=${versions[$img]}
url="https://docker.jfrog.io/artifactory/api/docker/docker-local/v2/$img/tags/list?"
artifacts=$(curl -X GET "$url")
result=$(jq --arg ver "$ver" '.tags | contains([$ver])' <<<"$artifacts")
if [[ $result == true ]]; then
echo "image $img has version $ver"
else
echo "image $img does not have version $ver"
fi
done
status=$(wget --spider --server-response http://any_url:5000/v2/repository/image-name-you-query/manifests/latests 2>&1 | grep "HTTP/" | awk '{print $2}')
如果圖像存在,則此剪輯將打印 200,如果有任何問題,則會打印其他內容。 特別是,如果它不存在,您將得到 404。
然后,您可以在 shell 腳本中利用它,如下所示:
if [ $status -eq 200 ]; then
# do something
else
# do something else
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.