簡體   English   中英

使用 shell 腳本檢查 docker 注冊表中是否存在圖像標簽

[英]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

也許(未經測試)

  • 假設您的 shell 是
  • 使用來滿足您的 JSON 解析需求
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM