-
[Github Action] GCS(Google Cloud Storage)에 코드 배포하기저장소/git 2022. 2. 1. 21:31
GCS는 AWS의 S3와 동일한 개념으로 보면 됩니다. 여기서는 github action을 사용하여 특정 브랜치에 코드가 푸시됐을 때, GCS에 자동으로 배포하는 프로세스를 설명합니다.
배포를 위해선 gcloud / gutil CLI를 사용해야 합니다. github action에서는 우리가 직접 설치할 필요 없이 마켓 플레이스에 있는 버전을 사용하면 됩니다.
Set up gcloud Cloud SDK environment - GitHub Marketplace
현재
bq
나gutil
에서는 워크로드 아이덴티티 제휴를 사용하지 못하고 기존 방식인 json key file을 매핑해야 합니다.gutil CLI에서 rsync 라는 명령어을 사용해 변경된 파일을 github → gcs로 옮길 수 있습니다.
gutil rsync
rsync는 두 버킷 또는 디렉토리의 내용을 싱크하는 명령어입니다.
gsutil rsync [OPTION]... src_url dst_url
자세하게 누락되거나 변경된 데이터를 복사하고 추가/삭제된 파일이나 객체를 목적지인 GCS에 그대로 반영하여 출발지인 github과 동일하게 만들 수 있습니다. src_url에는 디렉토리, 버킷 또는 버킷 하위 디렉토리를 지정해야 합니다.
workflow yml
name: git to gcs on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: ref: main - name: Setup gcloud uses: google-github-actions/setup-gcloud@v0 with: service_account_key: ${{ secrets.GCS_SERVICE_ACCOUNT_KEY }} project_id: ${{ secrets.GCS_PROJECT_ID }} export_default_credentials: true - name: Deploy run: |- gsutil -m rsync -x "GCS에싱크하지 않을 목록" -R /home/runner/work/{repository이름}/{repository이름} gs://{GCS_BUCKET_경로}
-m
옵션은 옮겨야 하는 파일이 많을 때 병렬로 수행하여 속도를 올리는 옵션입니다.-x
옵션은 제외할 파일이나 폴더를 명시하여 gcs에 반영을 하지 않을 수 있습니다. 문법은 파이썬 정규표현식 문법으로 https://docs.python.org/3/howto/regex.html 에서 확인할 수 있습니다.-R
이나-r
옵션은 디렉터리, 버킷 및 하위 디렉터리도 동기화 되도록 처리하는 옵션입니다. 만약 해당 옵션을 사용하지 않으면 소스 URL과 도착 URL의 최상위 디렉토리만 싱크하고 하위 디렉토리는 건너뜁니다.위 방식은 vm에 main 브랜치를 체크아웃한 다음, 해당 폴더 경로를 그대로 gcs에 옮기는 방식입니다. 변경된 파일 또는 폴더만 변경하는 방식이 아니여서 repository의 사이즈가 크다면 오래걸릴 수도 있습니다.