使用 monorepo 时使用 cloud-运行 github 操作部署特定子文件夹
Deploy a specific subfolder with cloud-run github action when working with a monorepo
我正在使用单声道存储库,我想(仅)使用 Cloud 运行 服务(使用“官方”google cloud run action)部署我的后端。对于此操作,我需要在我的项目的根目录下有一个 Dockerfile 来构建我的图像。但是我的 Dockerfile 在 ./server
.
下
有没有办法在 run
步骤中使用类似 working-directory
的东西?我没有从文档中找到任何内容。
或者我是否必须在我的项目的根目录下有一个 Dockerfile 并且 Dockerfile 指向 ./server
?
我的项目树:
./
.github/
worflows/
deploy-back.yml
client/
...
server/
...
Dockerfile
# deploy-back.yml
name: Deploy to production
# ...
jobs:
deployment-job:
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v2
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v0
with:
# ...
- name: Deploy to Cloud Run
uses: google-github-actions/deploy-cloudrun@v0
with:
service: ${{ env.SERVICE_NAME }}
source: gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }}
project_id: ${{ env.PROJECT_ID }}
region: ${{ env.RUN_REGION }}
tag: ${{ env.PACKAGE_VERSION }}
由于您正在使用 monorepo 并希望 运行 仅当后端代码库发生更改时才部署此特定工作流程,因此我将首先通过与 [=13= 相关的更改来限制触发器]文件夹。
on:
push:
paths:
- 'server/**'
至于 Docker 文件位置,我会保留在 /server
下,因为它是一个 monorepo。现在,为了回答您的问题,您提供的 Cloud 运行 GitHub 操作需要一个指向您的 Docker 图像
的参数
source: gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }}
这意味着您的 Docker 映像必须在 运行“部署到云 运行”步骤之前已经构建。我会做的是,在部署之前添加两个 Docker 步骤,以便 github 操作可以构建图像:
- name: Docker auth
run: gcloud auth configure-docker
- name: Docker build backend
run: docker build -t gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }} . -f server/Dockerfile
- name: Docker push backend
run: docker push gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }}
注意 Docker 构建步骤中的 -f server/Dockerfile
将指向服务器文件夹和 运行 从那里构建或者如果你想要(使用 bash)您可以在构建期间更改目录:cd server/
然后 运行 docker build ...
我正在使用单声道存储库,我想(仅)使用 Cloud 运行 服务(使用“官方”google cloud run action)部署我的后端。对于此操作,我需要在我的项目的根目录下有一个 Dockerfile 来构建我的图像。但是我的 Dockerfile 在 ./server
.
有没有办法在 run
步骤中使用类似 working-directory
的东西?我没有从文档中找到任何内容。
或者我是否必须在我的项目的根目录下有一个 Dockerfile 并且 Dockerfile 指向 ./server
?
我的项目树:
./
.github/
worflows/
deploy-back.yml
client/
...
server/
...
Dockerfile
# deploy-back.yml
name: Deploy to production
# ...
jobs:
deployment-job:
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v2
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v0
with:
# ...
- name: Deploy to Cloud Run
uses: google-github-actions/deploy-cloudrun@v0
with:
service: ${{ env.SERVICE_NAME }}
source: gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }}
project_id: ${{ env.PROJECT_ID }}
region: ${{ env.RUN_REGION }}
tag: ${{ env.PACKAGE_VERSION }}
由于您正在使用 monorepo 并希望 运行 仅当后端代码库发生更改时才部署此特定工作流程,因此我将首先通过与 [=13= 相关的更改来限制触发器]文件夹。
on:
push:
paths:
- 'server/**'
至于 Docker 文件位置,我会保留在 /server
下,因为它是一个 monorepo。现在,为了回答您的问题,您提供的 Cloud 运行 GitHub 操作需要一个指向您的 Docker 图像
source: gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }}
这意味着您的 Docker 映像必须在 运行“部署到云 运行”步骤之前已经构建。我会做的是,在部署之前添加两个 Docker 步骤,以便 github 操作可以构建图像:
- name: Docker auth
run: gcloud auth configure-docker
- name: Docker build backend
run: docker build -t gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }} . -f server/Dockerfile
- name: Docker push backend
run: docker push gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }}
注意 Docker 构建步骤中的 -f server/Dockerfile
将指向服务器文件夹和 运行 从那里构建或者如果你想要(使用 bash)您可以在构建期间更改目录:cd server/
然后 运行 docker build ...