এডাব্লুএস কোড বিল্ড স্থানীয় ক্যাশে আসলে ক্যাশে ব্যর্থ?


12

আমি AWS কোড বিল্ডের স্থানীয় ক্যাশেটি কাজ করার চেষ্টা করেছি এবং আমার জীবনের জন্য আমি এমনকি সবচেয়ে বেসিক ক্যাশেও কাজ করতে পারি না। আমার চূড়ান্ত লক্ষ্য হ'ল গ্রেডল শৈল্পিকাগুলি ক্যাশে করা, যা এখানে আলোচনা করা হয়েছে

তবে আমি এটি কাজ করতে না পারার কারণে, আমি আরও সাধারণ পরীক্ষার চেষ্টা করেছি, যেখানে আমি প্রতিটি বিল্ড ইনক্রিমেন্ট করে এমন /root/fooএকটি ফাইল দিয়ে ডিরেক্টরিকে ক্যাশে করার চেষ্টা counter.txtকরি। আমার প্রত্যাশাটি হ'ল আমি যদি পরের বিল্ডগুলি একে অপরের কয়েক মিনিটের মধ্যে চালিত করি তবে আমি লগগুলিতে "2", "3" ইত্যাদি দেখতে পাব। তবে বাস্তবতাটি হ'ল সিমিলিংক প্রতিষ্ঠিত হওয়া সত্ত্বেও, পরবর্তী বিল্ডটি কখনই পূর্ববর্তী counter.txtফাইলটি দেখতে পায় না , যা আমার কাছে প্রস্তাব দেয় যে খুব কিছু খুব ভাঙা।

কেউ কি নিশ্চিত করতে পারেন যে তাদের স্থানীয় ক্যাশে আসলে কোডবিল্ডে কাজ করছে? আমি ভাবতে শুরু করি যে বৈশিষ্ট্যটি বর্তমানে নষ্ট হয়ে গেছে কিনা! বা এটি করার কথা বলে আমি কি পুরোপুরি ভুল বোঝাবুঝি করছি?

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:  

কোড বিল্ড প্রকল্প জেএসএন:

{
    "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": []
}

দেখা যাচ্ছে যে আমি একমাত্র নই: forums.aws.amazon.com/thread.jspa?threadID=312569&tstart=0
প্যাট্রিক লাইটবডি

উত্তর:


7

ডকুমেন্টেশন হুবহু পরিষ্কার নয়, তবে এডাব্লুএস কোডবিল্ড লোকাল ক্যাশে কেবল ডিরেক্টরিগুলি ক্যাশে করতে পারে (লেখার সময় হিসাবে)। এটি কিছুটা বিভ্রান্তিকর কারণ অ্যাডাব্লুএস কোড বিল্ড বিল্ডস্পেক স্পেসিফিকেশন পাথটিকে স্বতন্ত্র ফাইল বা ওয়াইল্ডকার্ডের অনুমতি দেয় তবে বাস্তবে কোনও ফাইল নির্দিষ্ট করে ত্রুটি পাওয়া যায়।

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

আপনার উদাহরণে আপনি হিসাবে ক্যাশে নির্দিষ্ট ব্যবহার করুন

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

যেখানে * ফু এর অভ্যন্তরে সমস্ত পৃথক ফাইল এবং ফোল্ডারগুলি উল্লেখ করা হয় তবে কেবল ফোল্ডারই ক্যাশে হবে।

পুরো ডিরেক্টরিটি নির্দিষ্ট করে কাজ করা উচিত

cache:
  paths:
    - /root/foo/

10

আমি সীমিত সাফল্য দিয়ে ক্যাশে নিজেই কাজ করার চেষ্টা করছি।

কোনও সরকারী উত্স থেকে নয়, তবে এগুলি কিছু পর্যবেক্ষণ:

  • বিল্ড সময়টি 5 মিনিটের বেশি হলে ক্যাশেটি কেবলমাত্র উপলভ্য হবে।

  • নতুন বিল্ডটি যদি একই বিল্ড হোস্টে সফলভাবে স্থাপন করা হয় তবে ক্যাশে ব্যবহার করা যেতে পারে।

  • শেষ বিল্ডের 5-15 মিনিটের মধ্যে নতুন বিল্ডটি চলমান থাকলে ক্যাশে ব্যবহার করা যেতে পারে। সর্বোচ্চ 15 মিনিটের সাথে শেষ বিল্ড টাইমের ভিত্তিতে ক্যাশে উপলব্ধ থাকতে পারে।

  • 5 মিনিটের বেশি বিল্ড সত্ত্বেও, বিভিন্ন বিল্ড হোস্টে বিল্ড স্থাপনের কারণে ক্যাশে সর্বদা কাজ না করে।

  • অতিরিক্ত হিসাবে, যখন ক্যাশে নতুন বিল্ডটিকে 5 মিনিটের নীচে গতি দেয়, সেই বিল্ডটি পরবর্তী মিসের ফলে ক্যাশে হবে না।

যদিও আমি বিশ্বাস করি কোড বিল্ড ইঞ্জিনিয়ারদের এটি এইভাবে ডিজাইনের উপযুক্ত কারণ রয়েছে, উপরের সীমাবদ্ধতাগুলি আমার মতে সীমিত ব্যবহারের এই স্থানীয় ক্যাশে কার্যকারিতাটিকে রেন্ডার করে।


1
সুপার আকর্ষণীয় পর্যবেক্ষণ। ভাগ করার জন্য আপনাকে ধন্যবাদ!
প্যাট্রিক লাইটবডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.