@@ -6,7 +6,7 @@ add_docker_tag() {
66 local USERNAME=" $3 "
77 local PASSWORD=" $4 "
88
9- local REGISTRY_URL=" https:// $( echo $IMAGE_PATH | cut -d' /' -f1) "
9+ local REGISTRY_URL=$( echo $IMAGE_PATH | cut -d' /' -f1)
1010 local REPO_PATH=$( echo $IMAGE_PATH | cut -d' /' -f2- | cut -d' :' -f1)
1111 local CURRENT_TAG=$( echo $IMAGE_PATH | cut -d' :' -f2)
1212
@@ -23,32 +23,24 @@ add_docker_tag() {
2323
2424 echo " Start tagging: $REGISTRY_URL /$REPO_PATH , $CURRENT_TAG -> $NEW_TAG "
2525
26- # 인증 헤더 설정
27- local AUTH_HEADER=" "
26+ local SOURCE_IMAGE=" docker://$REGISTRY_URL /$REPO_PATH :$CURRENT_TAG "
27+ local DEST_IMAGE=" docker://$REGISTRY_URL /$REPO_PATH :$NEW_TAG "
28+
29+ local AUTH_OPTS=" "
2830 if [[ -n " $USERNAME " && -n " $PASSWORD " ]]; then
29- AUTH_HEADER=" Authorization: Basic $( echo -n " $USERNAME :$PASSWORD " | base64) "
31+ echo " Using provided credentials for authentication: user=$USERNAME password=$PASSWORD "
32+ AUTH_OPTS=" --src-creds $USERNAME :$PASSWORD --dest-creds $USERNAME :$PASSWORD "
3033 fi
3134
32- local MANIFEST=$( curl -s -H " Accept: application/vnd.docker.distribution.manifest.v2+json" -H " $AUTH_HEADER " " $REGISTRY_URL /v2/$REPO_PATH /manifests/$CURRENT_TAG " )
33-
34- if [[ $? -ne 0 ]]; then
35- echo " Error: Failed to fetch manifest for tag '$CURRENT_TAG '"
36- return 1
37- fi
38-
3935 echo " Adding new tag '$NEW_TAG '..."
40- local RESULT=$( curl -s -X PUT \
41- -H " Content-Type: application/vnd.docker.distribution.manifest.v2+json" \
42- -H " $AUTH_HEADER " \
43- -d " $MANIFEST " \
44- " $REGISTRY_URL /v2/$REPO_PATH /manifests/$NEW_TAG " )
45-
46- if [[ $? -ne 0 ]]; then
47- echo " Error: Failed to add tag '$NEW_TAG ': $RESULT "
36+
37+ if skopeo copy $AUTH_OPTS " $SOURCE_IMAGE " " $DEST_IMAGE " ; then
38+ echo " Successfully added tag '$NEW_TAG ' to $IMAGE_PATH "
39+ return 0
40+ else
41+ echo " Error: Failed to add tag '$NEW_TAG '"
4842 return 1
4943 fi
50-
51- echo " Successfully added tag '$NEW_TAG ' to $IMAGE_PATH "
5244}
5345
5446
6355
6456# if ECR
6557if [[ " $DOCKER_REGISTRY " == * " .dkr.ecr." * ]]; then
66- TOKEN=$( aws ecr get-login-password --region us-east-1)
58+ USERNAME=" AWS"
59+ PASSWORD=$( aws ecr get-login-password --region us-east-1)
60+ else
61+ USERNAME=$( echo " $TOKEN " | base64 -d | cut -d: -f1)
62+ PASSWORD=$( echo " $TOKEN " | base64 -d | cut -d: -f2)
6763fi
6864
69- if [[ -z " $TOKEN " && " $DOCKER_REGISTRY " == * " .dkr.ecr." * ]]; then
70- echo " Token is empty "
65+ if [[ -z " $PASSWORD " && " $DOCKER_REGISTRY " == * " .dkr.ecr." * ]]; then
66+ echo " Error: ECR token is required for ECR registry "
7167 exit 1
7268fi
7369
74- # stdin에서 이미지 목록을 배열로 읽기
75- IMAGES=()
76- while IFS= read -r line; do
77- IMAGES+=(" $line " )
78- done
70+ if [[ -z " $TOKEN " ]]; then
71+ echo " Error: Token is required for non-ECR registry"
72+ exit 1
73+ fi
7974
75+ # stdin에서 이미지 목록을 배열로 읽기
76+ mapfile -t IMAGES
8077if [ ${# IMAGES[@]} -eq 0 ]; then
8178 echo " Error: No images found"
8279 exit 1
@@ -88,14 +85,8 @@ for IMAGE in "${IMAGES[@]}"; do
8885 continue
8986 fi
9087
91- if [[ $IMAGE == * " .dkr.ecr." * ]]; then
92- USERNAME=" AWS"
93- else
94- USERNAME=$( echo " $IMAGE " | cut -d' /' -f1)
95- fi
96-
97- echo " add_docker_tag $IMAGE $TAG_TO_ADD $USERNAME ****"
98- add_docker_tag " $IMAGE " " $TAG_TO_ADD " " $USERNAME " " $TOKEN " &
88+ echo " add_docker_tag $IMAGE $TAG_TO_ADD $USERNAME "
89+ add_docker_tag " $IMAGE " " $TAG_TO_ADD " " $USERNAME " " $PASSWORD " &
9990done
10091wait
10192
0 commit comments