GitHub akcje, czyli wgrywanie zmienionych plików z repozytorium do bucketa google cloud
Dodawanie uprawnień IAM.
Pierwszym krokiem jest stworzenie "service account" i w zakładce "permissions" przypisane roli "storage admin."
W następnym kroku należy dla stworzonego konta (w zakładce "keys") stworzyć nowy klucz i pobrać go w formacie JSON.
Tworzenie sekretów w GitHub akcjach.
W repozytorium na GitHubie w opcjach projektu, zawartość pobranego kluczu należy dodać do sekretu np. "GCP_SA_KEY", a mail konta serwisowego przypisać do sekretu "GCP_SA_EMAIL"
Wgranie pliku .yaml do repozytorium.
Plik .yaml spreparowany przykładowo tak jak poniżej, należy wgrać do folderu .github/workflows, a następnie merge'ować do brancha Master.
Plik yaml
name: Deploy to GCS
on:
push:
branches:
- master
pull_request:
branches:
- master
env:
BUCKET_NAME: bucket_name
PROJECT_ID: '${{ secrets.GCP_SA_KEY.project_id }}'
jobs:
deploy-to-gcs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Google Cloud Auth
uses: google-github-actions/auth@v2
with:
credentials_json: '${{ secrets.GCP_SA_KEY }}'
project_id: '${{ secrets.GCP_SA_KEY.project_id }}'
- name: Setup gcloud CLI
uses: google-github-actions/setup-gcloud@v2
with:
project_id: '${{ secrets.GCP_SA_KEY.project_id }}'
- name: Deploy files to GCS
run: |
echo "Syncing changed files to gs://$BUCKET_NAME/"
gsutil -m rsync -r . gs://$BUCKET_NAME/
Przykładowy plik konfiguracyjny w formacie YAML definiujący workflow, którego celem jest synchronizacja zmienionych plików z repozytorium kodu do zasobnika w Google Cloud Platform (GCP).
Możliwe błędy
Wiele razy może wystąpić komunikat.
AccessDeniedException: 403 The billing account for the owning project is disabled in state closed
Paradoksalnie nie oznacza to błędów związanych z kontem rozliczeniowym, ale może wymagać uruchomienie usługi "Billing API".
Podsumowanie
Po przeprowadzeniu wszystkich kroków, repozytorium GitHub przy zmianach na gałęzi Master, wykona sychronizację plików do bucketa w Google Cloud Storage co ułatwi workflow projektu i zdejmie z programisty wymóg manualnego przenoszenia zmian.