AWS CodeBuild स्थानीय कैश वास्तव में कैश करने में विफल?


12

मैं काम करने के लिए AWS CodeBuild का स्थानीय कैश प्राप्त करने की कोशिश कर रहा हूं और मेरे जीवन के लिए मुझे काम करने के लिए सबसे बुनियादी कैश भी नहीं मिल सकता है। मेरा अंतिम लक्ष्य ग्रेड कलाकृतियों को कैश करना है, जैसा कि यहां चर्चा की गई है

लेकिन क्योंकि मुझे वह काम नहीं मिल रहा था, मैंने एक और भी सरल परीक्षण की कोशिश की, जहां मैं निर्देशिका /root/fooको एक फ़ाइल के साथ कैश करने की कोशिश counter.txtकरता हूं जिसे मैं प्रत्येक बिल्ड में वृद्धि करता हूं। मेरी अपेक्षा यह है कि अगर मैं बाद में एक दूसरे के कुछ ही मिनटों के भीतर चलता हूं, तो मुझे लॉग में "2", "3" आदि दिखाई देंगे। लेकिन वास्तविकता यह है कि सिमलिंक स्थापित होने के बावजूद, अगला निर्माण पिछली counter.txtफ़ाइल को कभी नहीं देखता है , जो मुझे बताता है कि कुछ बहुत टूट गया है।

क्या कोई पुष्टि कर सकता है कि उनका स्थानीय कैश वास्तव में CodeBuild में काम कर रहा है? मुझे आश्चर्य हो रहा है कि क्या सुविधा वर्तमान में टूटी हुई है! या मैं पूरी तरह से गलत समझ रहा हूं कि यह क्या करना चाहिए?

buildspec.yml:

version: 0.2

phases:
  install:
    runtime-versions:
      java: corretto8
  build:
    commands:
      - pwd
      - ls -l /root/
      - ls -l /root/foo/
      - ./cache-test.sh
      - ls -l /root/
      - ls -l /root/foo/

cache:
  paths:
    - '/root/foo/*'

cache-test.sh:

#!/bin/bash
if [ -d "/root/foo" ]; then
  C=$(cat /root/foo/count.txt)
  C=$((C + 1))
  echo "*********************************"
  echo "*********************************"
  echo "Incrementing counter to $C"
  echo $C > /root/foo/count.txt
  echo "*********************************"
  echo "*********************************"
else
  mkdir /root/foo
  echo "*********************************"
  echo "*********************************"
  echo "File not found, starting count at 1"
  echo "*********************************"
  echo "*********************************"
  echo 1 > /root/foo/count.txt
fi

CodeBuild उत्पादन : (एक ही उत्पादन भी जब त्वरित उत्तराधिकार में निष्पादित)

[Container] 2019/11/10 22:35:08 Waiting for agent ping 
[Container] 2019/11/10 22:35:10 Waiting for DOWNLOAD_SOURCE 
[Container] 2019/11/10 22:35:10 Phase is DOWNLOAD_SOURCE 
[Container] 2019/11/10 22:35:10 CODEBUILD_SRC_DIR=/codebuild/output/src905503483/src 
[Container] 2019/11/10 22:35:10 YAML location is /codebuild/output/src905503483/src/buildspec.yml 
[Container] 2019/11/10 22:35:10 No commands found for phase name: INSTALL 
[Container] 2019/11/10 22:35:10 Processing environment variables 
[Container] 2019/11/10 22:35:10 Moving to directory /codebuild/output/src905503483/src 
[Container] 2019/11/10 22:35:10 MkdirAll: /codebuild/local-cache/custom/de68c9f22ae028d4e4dfb0d11bbb481053d28b1373db0d6a56ebee0416bf13b2/root/foo 
[Container] 2019/11/10 22:35:10 Symlinking: /root/foo => /codebuild/local-cache/custom/de68c9f22ae028d4e4dfb0d11bbb481053d28b1373db0d6a56ebee0416bf13b2/root/foo 
[Container] 2019/11/10 22:35:10 Registering with agent 
[Container] 2019/11/10 22:35:10 Phases found in YAML: 2 
[Container] 2019/11/10 22:35:10  BUILD: 6 commands 
[Container] 2019/11/10 22:35:10  INSTALL: 0 commands 
[Container] 2019/11/10 22:35:10 Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED 
[Container] 2019/11/10 22:35:10 Phase context status code:  Message:  
[Container] 2019/11/10 22:35:11 Entering phase INSTALL 
[Container] 2019/11/10 22:35:11 Running command echo "Installing corretto(OpenJDK) version 8 ..." 
Installing corretto(OpenJDK) version 8 ... 

[Container] 2019/11/10 22:35:11 Running command export JAVA_HOME="$JAVA_8_HOME" 

[Container] 2019/11/10 22:35:11 Running command export JRE_HOME="$JRE_8_HOME" 

[Container] 2019/11/10 22:35:11 Running command export JDK_HOME="$JDK_8_HOME" 

[Container] 2019/11/10 22:35:11 Running command for tool_path in "$JAVA_8_HOME"/bin/* "$JRE_8_HOME"/bin/*; 
 do tool=`basename "$tool_path"`; 
  if [ $tool != 'java-rmi.cgi' ]; 
  then 
   rm -f /usr/bin/$tool /var/lib/alternatives/$tool \ 
    && update-alternatives --install /usr/bin/$tool $tool $tool_path 20000; 
  fi; 
done 

[Container] 2019/11/10 22:35:11 Phase complete: INSTALL State: SUCCEEDED 
[Container] 2019/11/10 22:35:11 Phase context status code:  Message:  
[Container] 2019/11/10 22:35:11 Entering phase PRE_BUILD 
[Container] 2019/11/10 22:35:11 Phase complete: PRE_BUILD State: SUCCEEDED 
[Container] 2019/11/10 22:35:11 Phase context status code:  Message:  
[Container] 2019/11/10 22:35:11 Entering phase BUILD 
[Container] 2019/11/10 22:35:11 Running command pwd 
/codebuild/output/src905503483/src 

[Container] 2019/11/10 22:35:11 Running command ls -l /root/ 
total 4 
lrwxrwxrwx 1 root root 103 Nov 10 22:35 foo -> /codebuild/local-cache/custom/de68c9f22ae028d4e4dfb0d11bbb481053d28b1373db0d6a56ebee0416bf13b2/root/foo 

[Container] 2019/11/10 22:35:11 Running command ls -l /root/foo/ 
total 0 

[Container] 2019/11/10 22:35:11 Running command ./cache-test.sh 
cat: /root/foo/count.txt: No such file or directory 
********************************* 
********************************* 
Incrementing counter to 1 
********************************* 
********************************* 

[Container] 2019/11/10 22:35:11 Running command ls -l /root/ 
total 4 
lrwxrwxrwx 1 root root 103 Nov 10 22:35 foo -> /codebuild/local-cache/custom/de68c9f22ae028d4e4dfb0d11bbb481053d28b1373db0d6a56ebee0416bf13b2/root/foo 

[Container] 2019/11/10 22:35:11 Running command ls -l /root/foo/ 
total 4 
-rw-r--r-- 1 root root 2 Nov 10 22:35 count.txt 

[Container] 2019/11/10 22:35:11 Phase complete: BUILD State: SUCCEEDED 
[Container] 2019/11/10 22:35:11 Phase context status code:  Message:  
[Container] 2019/11/10 22:35:11 Entering phase POST_BUILD 
[Container] 2019/11/10 22:35:11 Phase complete: POST_BUILD State: SUCCEEDED 
[Container] 2019/11/10 22:35:11 Phase context status code:  Message:  

CodeBuild परियोजना JSON:

{
    "projects": [
        {
            "name": "test-project",
            "arn": "arn:aws:codebuild:us-east-2:xxx:project/xxx",
            "source": {
                "type": "CODEPIPELINE",
                "insecureSsl": false
            },
            "secondarySourceVersions": [],
            "artifacts": {
                "type": "CODEPIPELINE",
                "name": "test-project",
                "packaging": "NONE",
                "encryptionDisabled": false
            },
            "secondaryArtifacts": [],
            "cache": {
                "type": "LOCAL",
                "modes": [
                    "LOCAL_SOURCE_CACHE",
                    "LOCAL_CUSTOM_CACHE"
                ]
            },
            "environment": {
                "type": "LINUX_CONTAINER",
                "image": "aws/codebuild/amazonlinux2-x86_64-standard:1.0",
                "computeType": "BUILD_GENERAL1_SMALL",
                "environmentVariables": [],
                "privilegedMode": false,
                "imagePullCredentialsType": "CODEBUILD"
            },
            "serviceRole": "arn:aws:iam::xxx:role/service-role/xxx",
            "timeoutInMinutes": 60,
            "queuedTimeoutInMinutes": 480,
            "encryptionKey": "arn:aws:kms:us-east-2:xxx:alias/aws/s3",
            "tags": [],
            "created": 1573364156.631,
            "lastModified": 1573423155.674,
            "badge": {
                "badgeEnabled": false
            },
            "logsConfig": {
                "cloudWatchLogs": {
                    "status": "ENABLED",
                    "groupName": "xxx",
                    "streamName": "xxx"
                },
                "s3Logs": {
                    "status": "DISABLED",
                    "encryptionDisabled": false
                }
            }
        }
    ],
    "projectsNotFound": []
}

ऐसा प्रतीत होता है कि मैं केवल एक ही नहीं हूँ: forum.aws.amazon.com/thread.jspa?threadID=312569&tstart=0
पैट्रिक लाइटबॉडी

जवाबों:


7

दस्तावेज़ बिल्कुल स्पष्ट नहीं है, लेकिन AWS CodeBuild स्थानीय कैश केवल निर्देशिकाओं (लेखन के समय के अनुसार) को कैश कर सकता है । यह थोड़ा भ्रमित करने वाला है क्योंकि एडब्ल्यूएस कोडबिल्ड बिल्डकैप स्पेसिफिकेशन व्यक्तिगत पथ या वाइल्डकार्ड होने की अनुमति देता है , लेकिन वास्तव में किसी फ़ाइल को निर्दिष्ट करने में त्रुटि उत्पन्न होगी।

Unable to initialize cache download: only directories can be cached locally: ...

अपने उदाहरण में आप कैश को निर्दिष्ट करते हैं

cache:
  paths:
    - '/root/foo/*'

जहां * foo के अंदर सभी व्यक्तिगत फ़ाइलों और फ़ोल्डरों को संदर्भित करेगा, लेकिन केवल फ़ोल्डरों को कैश किया जाएगा।

संपूर्ण निर्देशिका को निर्दिष्ट करते हुए काम करना चाहिए

cache:
  paths:
    - /root/foo/

10

मैं कोशिश कर रहा हूं कि कैश को सीमित सफलता के साथ खुद काम करें।

किसी सार्वजनिक स्रोत से नहीं, लेकिन ये कुछ अवलोकन हैं:

  • कैश केवल तभी उपलब्ध होगा जब बिल्ड समय 5 मिनट से अधिक हो।

  • यदि नई बिल्ड को सफलतापूर्वक उसी बिल्ड होस्ट पर रखा जाता है, तो कैश का उपयोग किया जा सकता है।

  • यदि नई बिल्ड को अंतिम बिल्ड के 5-15 मिनट के भीतर चलाया जा रहा है, तो कैश का उपयोग किया जा सकता है। अधिकतम 15 मिनट के अंतिम समय के आधार पर कैश उपलब्ध रह सकता है।

  • बिल्ड 5 मिनट से अधिक होने के बावजूद, कैश हमेशा अलग बिल्ड होस्ट पर रखे जाने के कारण संभवतः काम नहीं कर सकता है।

  • इसके अतिरिक्त, उस स्थिति में जहां कैश नई बिल्ड को 5 मिनट से कम समय तक गति देता है, उस बिल्ड को बाद में मिस नहीं किया जाएगा।

हालांकि मुझे विश्वास है कि CodeBuild इंजीनियरों के पास इसे इस तरह से डिजाइन करने के लिए अच्छे कारण थे, उपरोक्त सीमाएं मेरी राय में सीमित उपयोग की इस स्थानीय कैश कार्यक्षमता को प्रस्तुत करती हैं।


1
सुपर दिलचस्प टिप्पणियों। साझा करने के लिए धन्यवाद!
पैट्रिक लाइटबॉडी 19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.