저는 docker registry(harbor) 에 접근하면서 보게된 에러입니다. 의미는 알겠지만 다양하게 에러가 발생할 수 있고 저의 경우는 gitlab ci/cd (gitlab runner) 과정에서 생긴 원인을 같이 공유합니다.
gitlab helm chart: gitlab-6.8.2
gitlab version: 15.8.2
로그에 정확하게 표현되어 있습니다. authentication required -> 인증정보가 필요하다고 합니다.
인증과정에서 정보가 정확하게 입력되지 않아 생긴 문제입니다.
위 에러를 해결하기 위한 정말 다양한 방법과 다양한 케이스들이 존재합니다. G선생에게 물어보면 많은 자료들이 있습니다.
저는 gitlab runner에서 kaniko를 통해서 docker image를 빌드하고 private registry에 docker image를 넣는 과정이였습니다. gitlab-ci.yml을 본다면 이렇습니다.
build-example-by-runner:
stage: build
only:
- main
image:
name: gcr.io/kaniko-project/executor:debug
script:
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$REGISTRY_AUTH\":{\"username\":\"$REGISTRY_USERNAME\",\"password\":\"$REGISTRY_PWD\"}}}" > /kaniko/.docker/config.json
- |
/kaniko/executor --context git://$BATCHFN_GIT_USERNAME:$BATCHFN_GIT_PWD@gitlab.MASKINGGG.kr/$BATCHFN_GIT_USERNAME/batch-function.git#refs/heads/main \
--dockerfile /kaniko/buildcontext/dockerfile \
--destination $REGISTRY_AUTH/batch/functions:$CI_COMMIT_SHORT_SHA
원래는 환경변수 중 REGISTRY_USERNAME이 아닌 GIT_USERNAME이였습니다. PWD 역시 앞이 GIT이였습니다. 이상하게도 GIT_USERNAME, GIT_PASSWORD 를 환경변수를 사용했을 때 pipeline 이 정상적으로 동작하지 않는 느낌을 받았습니다.
느낌이였습니다. 우연히 GIT_USERNAME 변경하고 같은 코드, 같은 환경, 같은 스크립트에서 동작을 했지만 안됐거든요.
위 내용은 심증만 있는거라 정확한 정보를 찾아봤습니다. 100% 정확하다고 말할 수 없습니다.
https://docs.gitlab.com/ee/ci/variables/index.html#cicd-variable-precedence
위 내용을 읽어보고 나면
"GitLab에서 이미 사용중인 GIT_USERNAME 변수와 충돌될 수 있나 ?"
"GitLab 자체에서 GIT_USERNAME 환경변수를 미리 정의되어 있나 ?"
이런 생각이 들었습니다.
그리고 분명히 오타
로 생각하시는 분들이 있으실 것 같습니다.
$ /kaniko/executor --context git://$GIT_USERNAME:$GIT_PWD@gitlab.MASKINGGG.kr/$GIT_USERNAME/batch-function.git#refs/heads/main \ # collapsed multi-line command
Error: error resolving source context: authentication required
pipeline log 를 확인했을 때 오타는 아닙니다.
위 내용이 문제가 아닐 수 있습니다.
제 스크립트에서만 충돌이 발생했을 수도 있습니다.
그러나 혹시라도
한 번 의심해보세요. 이 말을 하고 싶었습니다.
시간을 아낄 수 있었으면 좋겠습니다.
-끝-