Auto deploy Google App Engine sử dụng GitLab CI

Auto deploy Google App Engine sử dụng GitLab CI

Table of Content

Trong bài viết này mình sẽ chia sẻ cách Auto deploy Google App Engine sử dụng GitLab CI một cách đơn giản nhất. Mình không giải thích thêm về thế nào là CICD, các bạn có thể research thêm nếu chưa nắm được.

Yêu cầu

Về cơ bản bạn phải có một số quyền hạn nhất định để setup, để đảm bảo một cách tốt nhất thì nên có full permissions.

  • GitLab repository (Maintainer permission)
  • Google Cloud Platform project (Full permissions)

Các bạn có thể tham khảo source code mình push lên https://github.com/huychau/gitlab-ci-app-engine

Tạo Service Account

Truy cập iam-admin  tạo Service Account. Thêm những roles dưới đây:

  1. App Engine Admin
  2. Storage Object Admin
  3. Cloud Build Editor
  4. Service Account User

Sau đó download Service Account dưới dạng JSON.

Config GitLab CI

Tại đây mình sẽ config những biến cần thiết cho GitLab CI.

Settings -> CICD -> Variables, thêm 3 biến như bên dưới:

  1. PROJECT_ID: The ID of the project
  2. PROJECT_REGION: Default project region
  3. SERVICE_ACCOUT: Paste the content of the Service Account you have downloaded
Auto deploy Google App Engine sử dụng GitLab CI

Config .gitlab-ci.yml

Các bạn có thể config như bên dưới hoặc xem tại đây

image: google/cloud-sdk:alpine

deploy_production:
  stage: deploy
  environment: Production
  only:
  - master
  script:
  - echo $SERVICE_ACCOUNT > /tmp/$CI_PIPELINE_ID.json
  - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
  - gcloud --quiet --project $PROJECT_ID app deploy app-production.yaml

deploy_staging:
  stage: deploy
  environment: Staging
  only:
  - staging
  script:
  - echo $SERVICE_ACCOUNT > /tmp/$CI_PIPELINE_ID.json
  - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
  - gcloud --quiet --project $PROJECT_ID app deploy app-staging.yaml

deploy_development:
  stage: deploy
  environment: Development
  only:
  - develop
  script:
  - echo $SERVICE_ACCOUNT > /tmp/$CI_PIPELINE_ID.json
  - gcloud auth activate-service-account --key-file /tmp/$CI_PIPELINE_ID.json
  - gcloud --quiet --project $PROJECT_ID app deploy app-development.yaml

after_script:
- rm /tmp/$CI_PIPELINE_ID.json

Ở config trên, mình hỗ trợ deploy lên 3 môi trường là Development, Staging và Production. Tương ứng với những môi trường đó, mỗi khi có thay đổi ở branch develop, staging, master thì sẽ trigger GitLab CI và run những script bên dưới đề Auto deploy lên Google App Engine. Sau đó GitLab sẽ gửi mail đến bạn về kết quả là tạch hay thành công.

Các bạn có thể add thêm step để approve trên Production nếu muốn.

Để verify kết quả, các bạn có thể xem tại CICD -> Jobs.

Hy vọng giúp các bạn lần đầu tiếp cận với CICD có cái nhìn tổng quan và dễ dàng thực hiện ^^

Bình luận bằng Facebook