使用 monorepo 时,使用云运行的 github 操作部署特定的子文件夹

max*_*tSO 1 google-cloud-platform monorepo github-actions google-cloud-run

我正在使用 mono 存储库,并且我想(仅)使用 Cloud Run 服务(使用“官方” google cloud run 操作)部署我的后端。对于此操作,我需要在项目根目录中有一个 Dockerfile 来构建图像。但我的 Dockerfile 在./server.

有没有办法使用类似的working-directory步骤run?我没有从医生那里找到任何东西。

或者我是否必须在项目的根目录中有一个 Dockerfile 并且 Dockerfile 指向./server?

我的项目树:

./
 .github/
   worflows/
     deploy-back.yml
  client/
    ...
  server/
    ...
    Dockerfile
Run Code Online (Sandbox Code Playgroud)
./
 .github/
   worflows/
     deploy-back.yml
  client/
    ...
  server/
    ...
    Dockerfile
Run Code Online (Sandbox Code Playgroud)

Cai*_*ioT 5

由于您正在开发 monorepo,并且希望仅在后端代码库发生更改时才运行此特定工作流程进行部署,因此我首先将触发器限制为仅与文件夹相关的更改/server。

on:
  push:
    paths:
    - 'server/**'
Run Code Online (Sandbox Code Playgroud)

至于 Dockerfile 位置,我会保留下来/server,因为它是一个 monorepo。现在,为了回答您的问题,您提供的 Cloud Run GitHub 操作需要一个指向您的 Docker 映像的参数

source: gcr.io/${{ env.PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ env.PACKAGE_VERSION }}
Run Code Online (Sandbox Code Playgroud)

这意味着您的 Docker 映像必须在运行“部署到 Cloud Run”步骤之前构建完成。我会做的,在部署之前添加两个 Docker 步骤,以便 github actions 可以构建镜像:

- 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 }}
Run Code Online (Sandbox Code Playgroud)

请注意-f server/DockerfileDocker 构建步骤中的 ,它将指向服务器文件夹并从那里运行构建,或者如果您愿意(使用 bash),您可以在构建期间更改目录:cd server/然后运行docker build ...