Run node.js database migrations on Google Cloud SQL during Google Cloud Build

后端 未结 5 1723
我寻月下人不归
我寻月下人不归 2020-12-16 01:45

I would like to run database migrations written in node.js during the Cloud Build process.

Currently, the database migration command is being executed but it seems

5条回答
  •  忘掉有多难
    2020-12-16 02:13

    Here's how to combine Cloud Build + Cloud SQL Proxy + Docker.

    If you're running your database migrations/operations within a Docker container in Cloud Build, it won't be able to directly access your proxy, because Docker containers are isolated from the host machine.

    Here's what I managed to get up and running:

      - id: build
        # Build your application
        waitFor: ['-']
    
      - id: install-proxy
        name: gcr.io/cloud-builders/wget
        entrypoint: bash
        args:
          - -c
          - wget -O /workspace/cloud_sql_proxy https://storage.googleapis.com/cloudsql-proxy/v1.15/cloud_sql_proxy.linux.386 && chmod +x /workspace/cloud_sql_proxy
        waitFor: ['-']
    
      - id: migrate
        name: gcr.io/cloud-builders/docker
        entrypoint: bash
        args:
          - -c
          - |
            /workspace/cloud_sql_proxy -dir=/workspace -instances=projectid:region:instanceid & sleep 2 && \
            docker run -v /workspace:/root \
            --env DATABASE_HOST=/root/projectid:region:instanceid \
            # Pass other necessary env variables like db username/password, etc.
            $_IMAGE_URL:$COMMIT_SHA
        timeout: '1200s'
        waitFor: [build, install-proxy]
    

    Because our db operations are taking place within the Docker container, I found the best way to provide the access to Cloud SQL by specifying the Unix socket -dir/workspace instead of exposing a TCP port 5432.

    Note: I recommend using the directory /workspace instead of /cloudsql for Cloud Build.

    Then we mounted the /workspace directory to Docker container's /root directory, which is the default directory where your application code resides. When I tried to mount it to other than /root, nothing seemed to happen (perhaps a permission issue with no error output).

    Also: I noticed the proxy version 1.15 works well. I had issues with newer versions. Your mileage may vary.

提交回复
热议问题