невозможно загрузить артефакты, не связанные с изображениями, в облачной сборке - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть очень простой контейнер (фактически пример кода Cloud Build ), который генерирует файл.Я пытаюсь расширить этот контейнер для загрузки указанного файла в корзину через документацию по , в которой хранятся артефакты, не связанные с изображениями, в Cloud Build .

Мой Dockerfile создает простой контейнер и выполняет один скрипт:

FROM alpine
WORKDIR /app
COPY . /app # the only file present is quickstart.sh
CMD ["./quickstart.sh"]

Скрипт ( quickstart.sh ) генерирует простую временную меткуfile:

#!/bin/sh
echo "Creating file 'time.txt'"
echo "The time is $(date)" > time.txt

## for debugging:
# pwd
# ls 
# cat time.txt

My cloudbuild.yaml Файл в основном копируется из вышеупомянутых документов и настроен для загрузки файла:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
artifacts:
  objects:
    location: 'gs://my-bucket/'
    paths: ['*.txt']
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'

Однакофайл не загружается, и в результате происходит сбой сборки.Когда я запускаю команду построения

gcloud builds submit --config cloudbuild.yaml .

Все журналы успешны до конца:

Artifacts will be uploaded to gs://my-bucket using gsutil cp
*.txt: Uploading path....
CommandException: No URLs matched: *.txt
CommandException: 1 file/object could not be transferred.
ERROR
ERROR: could not upload *.txt to gs://my-bucket/; err = exit status 1

Где gsutil утверждает, что не найдено ни одного подходящего файла.Однако, если я создаю вручную и генерирую файл, я могу использовать gsutil cp *.txt gs://my-bucket/ для загрузки файла без проблем.Таким образом, создается впечатление, что файл стирается до того, как Cloud Build достигнет этапа «загрузки артефактов», но, похоже, это не имеет смысла.Я предполагаю, что это довольно распространенный вариант использования, но я не делаю никакого прогресса с одной только документацией.Есть идеи?Спасибо.

1 Ответ

2 голосов
/ 23 сентября 2019

Проблема здесь в том, что с текущими шагами вы просто создаете контейнер, а не запускаете его, поэтому файл time.txt не создается.Даже если вы запустите контейнер, файл будет создан внутри контейнера, поэтому вам нужно извлечь его из контейнера, чтобы gsutil мог «увидеть» файл.

Я добавил 2 шага в cloudbuild.yaml файл для этого:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'run', '--name', 'containername', 'gcr.io/$PROJECT_ID/quickstart-image']
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'cp', 'containername:/app/time.txt, './time.txt']
artifacts:
  objects:
    location: 'gs://mybucket/'
    paths: ['*.txt']
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'

Я надеюсь, что это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...