使用 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 ...