मेरे पास एक बहुत ही सरल कंटेनर है (प्रभावी रूप से क्लाउड बिल्ड क्विकस्टार्ट नमूना कोड ) जो एक फाइल बनाता है। मैं गैर-छवि कलाकृतियों को क्लाउड बिल्ड के साथ संग्रहीत करना

मेरा Dockerfile एक छोटा कंटेनर बनाता है और एक स्क्रिप्ट निष्पादित करता है:

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

स्क्रिप्ट (quickstart.sh) एक साधारण टाइमस्टैम्प फ़ाइल जेनरेट करती है:

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

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

मेरी 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/ का उपयोग कर सकता हूं। तो यह लगभग ऐसा है जैसे क्लाउड बिल्ड "अपलोड कलाकृतियों" चरण तक पहुंचने से पहले फ़ाइल मिटा दी गई है, लेकिन ऐसा लगता नहीं है कि यह समझ में आता है। मुझे लगता है कि यह एक बहुत ही सामान्य उपयोग का मामला है, लेकिन मैं अकेले प्रलेखन के साथ कोई प्रगति नहीं कर रहा हूं। कोई विचार? धन्यवाद।

0
David Scales 21 सितंबर 2019, 01:47

1 उत्तर

सबसे बढ़िया उत्तर

यहां मुद्दा यह है कि वर्तमान चरणों के साथ, आप केवल कंटेनर बना रहे हैं और इसे नहीं चला रहे हैं ताकि time.txt फ़ाइल न बने। यदि आप कंटेनर चलाते हैं, तो भी फ़ाइल कंटेनर के अंदर बन जाती है, इसलिए आपको इसे कंटेनर के अंदर से लाना होगा ताकि gsutil फ़ाइल को "देख" सके।

ऐसा करने के लिए मैंने cloudbuild.yaml फ़ाइल में 2 चरण जोड़े हैं:

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'

मुझे उम्मीद है कि यह आपके लिए काम करेगा।

2
siamsot 23 सितंबर 2019, 18:29