일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- 포너블
- Batch
- pwnable.xyz
- webhacking.kr
- kotest
- nodejs
- docker
- 파이썬
- 시스템 해킹
- node.js
- sequelize
- gcp ci/cd
- gcp
- 사이버보안
- Python
- 회고
- 웹해킹
- 보안
- Baekjoon
- spring Batch
- cloud run
- gcp cloud build
- 프로그래머스
- 웹보안
- 리버싱
- 네트워크
- hackctf
- 스프링 배치
- programmers
uju's Tech
Cloud build시 [ERROR] 다음 빌드를 실행할 수 없습니다. generic::invalid_argument: invalid build: invalid image name ~ : could not parse reference:~ 에러 해결 본문
Cloud build시 [ERROR] 다음 빌드를 실행할 수 없습니다. generic::invalid_argument: invalid build: invalid image name ~ : could not parse reference:~ 에러 해결
ujusy 2021. 5. 27. 13:04<본 포스팅은 공부 목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>
cloud build 실행 시 ` 다음 빌드를 실행할 수 없습니다. generic::invalid_argument: invalid build: invalid image name ~ ' 가 발생하였다.
해당 에러는
cloud build에서 dev 브랜치로 푸시될 경우 발생하는 트리리거에서 발생하였다... 아래 사진과 같이 해당 브랜치로 푸시되면서 cloud build trigger가 작동하고 cloud run에서 배포되는 구조인데 build 가 이루어지지 않아 배포가 정상적으로 이루어지지 않았다.
위와 같은 에러가 발생했을 시 해당 빌드 트리거의 인라인을 살펴보면 아래와 같다. 발생하는 에러는 잘못된 인자로 인해 유효하지 않은 이미지로 빌드 에러가 난다는 것인데.. $_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA을 수정해주면 된다.
steps:
- name: gcr.io/cloud-builders/docker
args:
- build
- '--no-cache'
- '-t'
- '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
- .
- '-f'
- Dockerfile
id: Build
- name: gcr.io/cloud-builders/docker
args:
- push
- '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
id: Push
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
args:
- run
- services
- update
- $_SERVICE_NAME
- '--platform=managed'
- '--image=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
- >-
--labels=managed-by=gcp-cloud-build-deploy-cloud-run,commit-sha=$COMMIT_SHA,gcb-build-id=$BUILD_ID,gcb-trigger-id=$_TRIGGER_ID,$_LABELS
- '--region=$_DEPLOY_REGION'
- '--quiet'
id: Deploy
entrypoint: gcloud
images:
- '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA 에서 $REPO_NAME 을 지우고 $_SERVICE_NAME 을 하드 코딩으로 넣어주었다. 서비스 name이 a라면 $_GCR_HOSTNAME/$PROJECT_ID/a:$COMMIT_SHA
해당 부분들을 모두 수정 해주고 다시 빌드를 실행시켜보니 정상적으로 동작하였다.
음.. 사실 Node.js의 경우 gcp에서 cloud run을 생성할 때 cloud build를 인라인 모드로 생성을 자동을 해주는데 이러한 인라인에서 문제가 발생했다. cloud build 문서를 확인해보면 yaml 파일의 경우 아래와 같이 빌드 스크립트를 작성한다.
steps:
- name: 'gcr.io/cloud-builders/mvn'
args: ['install']
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/my-project-id/myimage', '.'] //이 부분을 확인하면 된다.
마지막 줄을 확인해보면 build시 $_GCR_HOSTNAME/$PROJECT_ID/$_SERVICE_NAME 으로 빌드하는데 자동으로 생성되는 인라인에서는 $_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME 중간에 REPO_NAME 으로 인해 발생하는 문제인 것 같다.
결론: REPO_NAME 을 지우자. 클라우드는 어려워,,~