Trong bài này, chúng ta sẽ sử dụng Cloud Build để containerize và deploy to Cloud Run.
Trước tiên chúng ta tạo Git repository và add 3 file bên dưới vào:
Dockerfile:
FROM python:3.7-slim
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY . ./
RUN pip install Flask gunicorn
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 app:app
app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
cloudbuild.yaml
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/hello-cloud-run:$COMMIT_SHA', '.']
# Push the container image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/hello-cloud-run:$COMMIT_SHA']
# Deploy container image to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'deploy'
- 'hello-cloud-run'
- '--image'
- 'gcr.io/$PROJECT_ID/hello-cloud-run:$COMMIT_SHA'
- '--region'
- 'asia-east1'
- '--platform'
- 'managed'
- '--allow-unauthenticated'
hello-cloud-run
: Đây là service name của Cloud Run. Có thể thay đổi tuỳ ý.asia-east1
: Đây là region. Có thể thay đổi region sao cho phù hợp với vị trí bạn muốn.--allow-unauthenticated
: Nếu sử dụng param này, website của bạn sẽ public. Trường hợp không muốn public, muốn Auth thì không dùng param này.
Tiếp theo chúng ta sẽ tạo triggers cho Cloud Build, đe khi có commit nó sẽ pull source, build và deploy to Cloud Run.
Để làm đc việc đó, chúng ta cần connect git repository vào Cloud Build.
Vào đây để connect như hình dưới:
Tạo triggers:
Set permissions cho Cloud Build.
OK, Giờ là lúc kiểm tra kết quả.
Thử edit file app.py thành như dưới:
return "Hello Cloud Ace!"
Push thay đổi lên GitHub
Tại Cloud Build -> History sẽ có Job đang running
Tại Container Registry sẽ có image mà Cloud Build vừa tạo.
Tại Cloud Run sẽ có service mà Cloud Build vừa deploy.
Thử truy cập