1

Jenkins 작업에서 kubernetes/google 컨테이너 엔진에 배포 할 연속 통합 작업을 설정하려고합니다. 젠킨스 서버는 비교적 엄격하게 제어되므로 플러그인을 설치할 수 없습니다.Jenkins의 gcloud SDK가없는 Google 컨테이너 엔진에서 Kubernetes에 인증

Google Cloud IAM의 서버 계정에 대한 JSON 키 파일이 있습니다.

sh 'export KUBECONFIG=$(pwd)/.kubeconfig' 
sh 'export GOOGLE_APPLICATION_CREDENTIALS=$JSON' 
sh 'google-cloud-sdk/bin/gcloud auth activate-service-account --key-file=$JSON' 
sh 'google-cloud-sdk/bin/gcloud config set core/project proj-1' 
sh 'google-cloud-sdk/bin/gcloud container clusters list' 
sh 'google-cloud-sdk/bin/gcloud container clusters get-credentials clust-1 --zone us-east1-c' 
sh 'kubectl get pods' 

나는 오류 메시지를 받고 있어요 : 나는 현재 거기에서 구글 클라우드 SDK 및 인증을 다운로드하기 위해 노력하고있어,하지만 운 (이 만약 Jenkinsfile에서) 가지고 있지 않다

오류 : Google : 기본 자격증 명을 찾을 수 없습니다. 자세한 내용은 https://developers.google.com/accounts/docs/application-default-credentials을 참조하십시오. gcloud 도커 푸시도 할 수 있어야하므로 gcloud를 사용하는 것이 좋습니다.

답변

1

는 비밀 GitHub의에이 문제를 해결 문제있다 : 그 문제에 따르면

https://github.com/kubernetes/kubernetes/issues/30617

, 내가 해왔 던 모든 일을해야합니다

Previously, gcloud would have configured kubectl to use the cluster's static client certificate to authenticate. Now, gcloud is configuring kubectl to use the service account's credentials.

Kubectl is just using the Application Default Credentials library, and it looks like this is part of the ADC flow for using a JSON-key service account. I'll see if there is a way that we could make this nicer.

If you don't want to add the export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json" to your flow, you can reenable the old way (use the client cert) by setting the cloudsdk container/use_client_certificate property to true. Either:

gcloud config set container/use_client_certificate True

or

export CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFICATE=True

나는 GOOGLE_APPLICATION_CREDENTIALS 변수를 사용했다, 하지만 아아, 작동하지 않았다. 위의 "gcloud config set"옵션을 시도했지만 작동하지 않았습니다. 마지막으로, env 변수 CLOUDSDK_CONTAINER_USE_CLIENT_CERTIFCIATE를 사용했는데 실제로 그렇게되었습니다.