GAE/Go (+ dep)를 gcloud 명령없이 CI에 배포
gcloud app deploy
명령 사용dep를 사용하면 gcloud deploy 할 수 없습니까?
그러나 GAE/Go 조합에서 dep을 사용하면 다음과 같은 오류로 배포하지 못했습니다.
Updating service [default]...failed.
ERROR: (gcloud.app.deploy) Error Response: [9] Deployment contains files that cannot be compiled: Compile failed:
2018/01/28 01:49:22 go-app-builder: Failed parsing input: package "path/to/project/vendor/google.golang.org/appengine/urlfetch" cannot import internal package "google.golang.org/appengine/internal/urlfetch"
이미 이 오류는 다음 기사에서 다루었습니다.
불행히도 아직 수정되지 않은 것 같습니다.
그래서, 이 문제의 이슈 에 올라 있던 「오래된
goapp
를 사용하는 방법」을 시험해 보겠습니다.goapp deploy 명령 사용
다음 페이지에서
goapp
명령이 포함된 이전 sdk를 설치할 수 있습니다.설치가 완료되면 보통
goapp deploy
명령을 치면됩니다.$ goapp deploy -application <PROJECT_ID> -version <VERSION> path/to/app.yaml
이제 배포에 성공! 해결! …라고 생각했지만 CI에서 자동 배포하려고 할 때 문제가 발생했습니다.
goapp
명령은 gcloud 명령의 인증 토큰을 읽지 않으므로 인증을 통과하지 못하고 CI에서 자동 배포 할 수 없다는 것이 었습니다.CI의 출력을 보면, "브라우저를 열고 인증해라"라는 메시지로 완전히 정지되어 버렸습니다.
$ gcloud auth activate-service-account --key-file path/to/secret.json
$ goapp deploy -application *** -version master
Activated service account credentials for: [***@***.iam.gserviceaccount.com]
Updated property [core/project].
08:47 AM Host: appengine.google.com
08:47 AM Application: *** (was: None); version: master (was: None)
08:47 AM Starting update of app: ***, version: master
08:47 AM Getting current resource limits.
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth......
If your browser is on a different machine then exit and re-run this
application with the command-line parameter
--noauth_local_webserver
Too long with no output (exceeded 10m0s)
appcfg.py update 명령 사용
goapp
명령에는 인증 토큰을 명령으로 설정하는 옵션이 없으므로 goapp
가 내부적으로 호출하는 appcfg.py
명령을 사용합니다.이 명령은 인증 토큰을 직접 지정할 수 있는 옵션
--oauth2_access_token
가 있으므로 거기에 gcloud auth print-access-token
를 사용하여 gcloud
명령 측에서 인증한 토큰을 가져오는 방법입니다.$ appcfg.py update --application=<PROJECT_ID> --version=<VERSION> --oauth2_access_token=$(gcloud auth print-access-token 2> /dev/null) path/to/app.yaml
이것으로 무사히 CI로부터의 배포에 성공했습니다! (⌒▽⌒)
$ appcfg.py update --application=*** --version=master --oauth2_access_token=$(gcloud auth print-access-token 2> /dev/null) path/to/app.yaml
Activated service account credentials for: [***@***.iam.gserviceaccount.com]
Updated property [core/project].
09:35 AM Host: appengine.google.com
09:35 AM Application: *** (was: None); version: master (was: None)
09:35 AM Starting update of app: ***, version: master
...
09:35 AM Starting deployment.
09:35 AM Checking if deployment succeeded.
09:35 AM Deployment successful.
09:35 AM Checking if updated app version is serving.
09:36 AM Completed update of app: ***, version: master
Reference
이 문제에 관하여(GAE/Go (+ dep)를 gcloud 명령없이 CI에 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/castaneai/items/d8453d4297282f172e96텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)