July
5th,
2018
문제의 시작
현재 Jenkins 를 통해 node.js 소스가 배포되고 있고, 아래의 순서를 통해 배포가 진행된다.
- Github 에서 최신 소스 pull
- 소스 babelify
- Docker image build
- Docker image push (to GCP)
- Kubernetes (GKE) 에서 사용할 이미지 교체
- Kubernetes 에서 자체적으로 rolling update 수행
헌데 Docker Image push 단계에서 아래와 같은 에러메시지로 실패하였다.
$ gcloud docker -- push us.gcr.io/PROJECT_NAME/IMAGE_NAME:TAG
ERROR: Docker CLI operation failed:
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
error getting credentials - err: exit status 1, out: `User interaction is not allowed.`
ERROR: (gcloud.docker) Docker login failed.
문제의 해결
gcloud sdk 를 업데이트 한 뒤 다시 수행해보았다.
$ gcloud components update
$ gcloud docker --authorize-only
WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.
As an alternative, use `gcloud auth configure-docker` to configure `docker` to
use `gcloud` as a credential helper, then use `docker` as you would for non-GCR
registries, e.g. `docker pull gcr.io/project-id/my-image`. Add
`--verbosity=error` to silence this warning: `gcloud docker
--verbosity=error -- pull gcr.io/project-id/my-image`.
See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-docker
ERROR: Docker CLI operation failed:
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
error getting credentials - err: exit status 1, out: `User interaction is not allowed.`
ERROR: (gcloud.docker) Docker login failed.
보이지 않던 WARNING 이 보인다.
확인해보니 Docker client version 이 18.03 이 넘으면 gcloud docker 를 사용할 수 없다는 것이다.
Jenkins 머신의 docker version 은 아래와 같다. (iOS 빌드를 위해 iMac 에서 Jenkins 를 돌리고 있다.)
$ docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:13:02 2018
OS/Arch: darwin/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:22:38 2018
OS/Arch: linux/amd64
Experimental: true
WARNING 의 메시지를 참고하여 gcloud
를 docker 의 credential helper
로 셋팅한다.
$ gcloud auth configure-docker
The following settings will be added to your Docker config file
located at [/Users/USERNAME/.docker/config.json]:
{
"credHelpers": {
"gcr.io": "gcloud",
"us.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"asia.gcr.io": "gcloud",
"staging-k8s.gcr.io": "gcloud"
}
}
Do you want to continue (Y/n)?
Docker configuration file updated.
또한 WARNING 에 있는 링크를 참고하여 Docker push 시 사용하는 명령어를 바꾸었다.
- 기존 :
$ gcloud docker -- push us.gcr.io/PROJECT_NAME/IMAGE_NAME:TAG
- 변경 :
$ docker push us.gcr.io/PROJECT_NAME/IMAGE_NAME:TAG
요약
$ gcloud auth configure-docker
를 통해 docker 의 credential helper 로 gcloud 를 등록- 기존의
$ gcloud docker -- push BLARBLAR
명령을$ docker push BLARBLAR
로 변경