uju's Tech

Cloud build시 [ERROR] 다음 빌드를 실행할 수 없습니다. generic::invalid_argument: invalid build: invalid image name ~ : could not parse reference:~ 에러 해결 본문

DevOps/GCP

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 을 지우자. 클라우드는 어려워,,~

Comments