빌드 중에 GCS에서 Cloud Run Docker 컨테이너로 파일 복사
Nov 23 2020
gsutil
빌드 단계에서 GCS에서 실행 컨테이너로 파일을 복사하는 데 사용하려고합니다 .
내가 시도한 단계 :
RUN pip install gsutil
RUN gsutil -m cp -r gs://BUCKET_NAME $APP_HOME/artefacts
오류:
ServiceException: 401 Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.
CommandException: 1 file/object could not be transferred.
The command '/bin/sh -c gsutil -m cp -r gs://BUCKET_NAME $APP_HOME/artefacts' returned a non-zero code: 1
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1
서비스 계정 (기본 컴퓨팅 및 cloudbuild)은 GCS에 액세스 할 수 gsutil config -a
있으며 다른 다양한 플래그 도 시도했지만 성공하지 못했습니다!
버킷에 성공적으로 액세스하려면 어떻게 인증해야하는지 정확히 모르겠습니다.
답변
3 guillaumeblaquiere Nov 24 2020 at 21:31
여기 내 github 작업 작업
jobs:
build:
name: Build image
runs-on: ubuntu-latest
env:
BRANCH: ${GITHUB_REF##*/} SERVICE_NAME: ${{ secrets.SERVICE_NAME }}
PROJECT_ID: ${{ secrets.PROJECT_ID }} steps: - name: Checkout uses: actions/checkout@v2 # Setup gcloud CLI - uses: google-github-actions/setup-gcloud@master with: service_account_key: ${{ secrets.SERVICE_ACCOUNT_KEY }}
project_id: ${{ secrets.PROJECT_ID }} export_default_credentials: true # Download the file locally - name: Get_file run: |- gsutil cp gs://BUCKET_NAME/path/to/file . # Build docker image - name: Image_build run: |- docker build -t gcr.io/$PROJECT_ID/$SERVICE_NAME . # Configure docker to use the gcloud command-line tool as a credential helper - run: | gcloud auth configure-docker -q # Push image to Google Container Registry - name: Image_push run: |- docker push gcr.io/$PROJECT_ID/$SERVICE_NAME
3 가지 비밀을 설정해야합니다.
- SERVICE_ACCOUNT_KEY : 서비스 계정 키 파일입니다.
- SERVICE_NAME : 컨테이너 이름
- PROJECT_ID : 이미지를 배포 할 프로젝트
파일을 로컬로 다운로드하기 때문에 파일이 Docker 빌드에 로컬로 존재합니다. 그런 다음 Docker 파일에 복사하고 원하는 작업을 수행하십시오.
최신 정보
도커에서 이것을하고 싶다면 이렇게 할 수 있습니다.
Dockerfile
FROM google/cloud-sdk:alpine as gcloud
WORKDIR /app
ARG KEY_FILE_CONTENT
RUN echo $KEY_FILE_CONTENT | gcloud auth activate-service-account --key-file=- \
&& gsutil cp gs://BUCKET_NAME/path/to/file .
....
FROM <FINAL LAYER>
COPY --from=gcloud /app/<myFile> .
....
Docker 빌드 명령
docker build --build-arg KEY_FILE_CONTENT="YOUR_KEY_FILE_CONTENT" \
-t gcr.io/$PROJECT_ID/$SERVICE_NAME .
YOUR_KEY_FILE_CONTENT 는 환경에 따라 다릅니다. 그것을 주입하는 몇 가지 해결책은 다음과 같습니다.
- Github 작업에서 :
${{ secrets.SERVICE_ACCOUNT_KEY }}
- 로컬 환경에서 :
$(cat my_key.json)
Pentium10 Nov 23 2020 at 21:26
Cloud Build에 태그를 지정하셨습니다.
다음과 같은 단계를 사용할 수 있습니다.
steps:
- name: gcr.io/cloud-builders/gsutil
args: ['cp', 'gs://mybucket/results.zip', 'previous_results.zip']
# operations that use previous_results.zip and produce new_results.zip
- name: gcr.io/cloud-builders/gsutil
args: ['cp', 'new_results.zip', 'gs://mybucket/results.zip']