Google Cloud Build с Dockerfile и копией файлов - PullRequest
0 голосов
/ 06 августа 2020

У меня возникла проблема при настройке развертывания с использованием cloudbuild и dockerfile.

My Dockerfile:

FROM python:3.8

ARG ENV
ARG NUM_WORKERS
ENV PORT=8080
ENV NUM_WORKERS=$NUM_WORKERS


RUN pip install poetry
COPY pyproject.toml poetry.lock ./

RUN poetry config virtualenvs.create false && \
    poetry install --no-dev

COPY ./.env.$ENV /workspace/.env
COPY ./app-$ENV.yaml /workspace/app.yaml
COPY . /workspace

ENTRYPOINT ["./entrypoint.sh"]

My cloudbuild.yaml:

steps:
  - name: 'gcr.io/cloud-builders/docker'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        docker pull gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME || exit 0
  - name: 'gcr.io/cloud-builders/docker'
    args: [
      'build',
      '-t',
      'gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME',
      '--cache-from',
      'gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME',
      '--build-arg', 'ENV=develop',
      '--build-arg', 'NUM_WORKERS=2',
      '.'
    ]

  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME']

  - name: 'gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME'
    id: RUN-LINTERS
    entrypoint: sh
    args: ['scripts/linters.sh']

  - name: gcr.io/cloud-builders/docker
    id: START-REDIS
    args: ['run', '-d', '--network=cloudbuild', '--name=redisdb', 'redis']

  - name: 'gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME'
    id: RUN-TESTS
    entrypoint: sh
    args: ['scripts/run_tests.sh']
    env:
      - 'REDIS_HOST=redis://redisdb'
      - 'DATASTORE_EMULATOR_HOST=datastore:8081'
    waitFor:
      - START-REDIS
      - START-DATASTORE-EMULATOR

  - name: gcr.io/cloud-builders/docker
    id: SHUTDOWN-REDIS
    args: ['rm', '--force', 'redisdb']

  - name: gcr.io/cloud-builders/docker
    id: SHUTDOWN-DATASTORE_EMULATOR
    args: ['rm', '--force', 'datastore']

  - name: 'gcr.io/cloud-builders/gcloud'
    id: DEPLOY
    args:
      - "app"
      - "deploy"
      - "--image-url"
      - 'gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME'
      - "--verbosity=debug"
images: ['gcr.io/$PROJECT_ID/my-repo:$BRANCH_NAME']
timeout: "1000s"

Проблема в том, что скопированные файлы .env и app.yaml не представлены в workspace. Я не знаю, почему cloudbuild игнорирует эти файлы из образа, потому что я напечатал ls -a и убедился, что файлы копируются правильно. во время сборки, но они исчезают на этапе выполнения тестов, а также я не могу развернуть без app.yaml Любая помощь, пожалуйста

1 Ответ

1 голос
/ 06 августа 2020

Вам нужно установить WORKDIR /workspace в Dockerfile.

...