
یو نیم کال وړاندې، د ۲۰۱۸ کال د مارچ په ۵ مه، ګوګل د خپل پرانیستې سرچینې CI/CD پروژې لومړۍ الفا نسخه خپره کړه چې نوم یې و ، چې هدف یې د "ساده او تکرار وړ کوبرنیټس پراختیا" رامینځته کول وو ترڅو پراختیا کونکي وکولی شي د ادارې پرځای په پراختیا تمرکز وکړي. د سکافولډ په اړه څه ځانګړی دی؟ دا معلومه شوه چې دا په خپل آستین کې ډیری چلونه لري، دا د پراختیا کونکو لپاره یو پیاوړی وسیله جوړوي، او شاید حتی د عملیاتي انجینرانو لپاره. راځئ چې پروژې او د هغې وړتیاو ته نږدې کتنه وکړو.
NB: په لاره کې، موږ دمخه په خپل عمومي مقاله کې د سکافولډ په اړه لنډې خبرې کړې وې ، چې ژوند یې د کوبرنیټس سره تړلی دی.
تیوري. موخه او وړتیاوې
نو، په عمومي توګه، سکافولډ د CI/CD دورې (جوړول، فشار ورکول، ځای پر ځای کول) اتومات کولو ستونزه حل کوي، پراختیا کونکو ته سمدستي فیډبیک وړاندې کوي، د بیلګې په توګه، د دوی د وروستي کوډ بدلونونو پایلې په چټکۍ سره ترلاسه کولو وړتیا - د تازه شوي غوښتنلیک په بڼه چې په کوبرنیټس کلستر کې روان دی. دا غوښتنلیک کولی شي په مختلفو چاپیریالونو (dev، مرحله، تولید، او نور) کې پرمخ بوځي، د کوم لپاره چې سکافولډ د ځای پر ځای کولو لپاره اړونده پایپ لاینونو تعریف کولو کې مرسته کوي.
د سکافولډ سرچینې کوډ په ګو کې لیکل شوی، د وړیا اپاچي جواز 2.0 (GitHub) شرایطو لاندې.
راځئ چې اصلي دندې او ځانګړتیاوې وګورو. په لومړیو کې لاندې شامل دي:
- سکافولډ د CI/CD پایپ لاینونو جوړولو لپاره وسایل وړاندې کوي.
- تاسو ته اجازه درکوي چې په شاليد کې ستاسو د سرچینې کوډ کې بدلونونه وڅارئ او د کانټینر عکسونو کې د کوډ جوړولو لپاره یو اتوماتیک پروسه پیل کړئ، دا عکسونه ډاکر راجسټری ته خپاره کړئ، او د کوبرنیټس کلستر ته یې ځای په ځای کړئ.
- په ذخیره کې فایلونه د کانټینر کې د کاري لارښود سره همغږي کوي.
- په اتوماتيک ډول د کانټینر جوړښت ازموینې سره ازموینه کوي.
- بندرونه فارورډ کوي.
- په کانټینر کې د چلولو غوښتنلیک لاګونه لولي.
- په جاوا، نوډ. جے ایس، پایتون، ګو کې لیکل شوي غوښتنلیکونو ډیبګ کولو کې مرسته کوي.
اوس، د ځانګړتیاوو په اړه:
- سکافولډ پخپله د کلستر اړخ برخې نلري.دا پدې مانا ده چې د دې اسانتیا کارولو لپاره د Kubernetes اضافي ترتیب ته اړتیا نشته.
- ستاسو د غوښتنلیک لپاره مختلف پایپ لاینونهایا تاسو اړتیا لرئ چې د پراختیا په وخت کې په محلي مینی کیوب کې کوډ ځای پر ځای کړئ، او بیا د سټیج یا تولید لپاره؟ د دې لپاره انتخابونه شتون لري. او د کارونکي ترتیبونه، د چاپیریال متغیرات، او بیرغونه، کوم چې تاسو ته اجازه درکوي چې د یو واحد غوښتنلیک لپاره مختلف پایپ لاینونه تشریح کړئ.
- CLI. یوازې د کنسول یوټیلټي او YAML تشکیلات. د آنلاین جوړولو لپاره د هڅو یادونه شتون لري. ، مګر دا مهال دا ډیری احتمال یوازې پدې معنی دی چې یو څوک ورته اړتیا لري، مګر ډیر نه.
- ماډولیتسکافولډ یو خپلواک حاصل ورکوونکی نه دی، بلکې موخه یې د ځانګړو دندو لپاره د انفرادي ماډلونو یا موجوده حلونو کارول دي.
د وروستي مثال:
- د غونډې په مرحله کې تاسو کولی شئ وکاروئ:
- ډاکر په محلي ډول جوړ کړئ، د کانیکو په کارولو سره په کلستر کې، یا په ګوګل کلاوډ بلډ کې؛
- په محلي کچه بازل؛
- جیب ماون او جیب ګریډل په محلي یا د ګوګل کلاوډ بلډ کې؛
- د ګمرک جوړونې سکرپټونه په محلي ډول چلیږي. که تاسو اړتیا لرئ چې یو بل (ډیر انعطاف منونکی/پیژندل شوی/...) جوړونې حل چل کړئ، تاسو کولی شئ دا په سکرپټ کې تشریح کړئ ترڅو سکافولډ دا په ځانګړي ډول پرمخ بوځي (). دا تاسو ته اجازه درکوي چې هر هغه راټولونکی وکاروئ چې د سکریپټ په کارولو سره بلل کیدی شي؛
- د ازموینې په مرحله کې، مخکې ذکر شوی ملاتړ شوی دی ;
- لاندې د پلي کولو لپاره چمتو شوي دي:
- کوبکټل;
- هیلم؛
- دودیز کول.
له دې امله، سکافولډ بې ساری بلل کیدی شي د CI/CD جوړولو لپاره چوکاټدلته د کارونې پرمهال د کاري جریان یوه بیلګه ده (د پروژې اسنادو څخه):

د سکافولډ کار په عمومي ډول څه ډول ښکاري؟
- دا یوټیلټي د سرچینې کوډ ډایرکټرۍ کې بدلونونه څاري. که چیرې په فایلونو کې بدلونونه راوستل شي، نو دوی د کوبرنیټس کلستر کې د غوښتنلیک پوډ سره همغږي کیږي. که امکان ولري، دا د عکس بیا رغولو پرته ترسره کیږي. که نه نو، یو نوی عکس جوړیږي.
- جوړ شوی انځور د کانټینر-جوړښت-ټیسټ په کارولو سره ازمول شوی، ټګ شوی، او د ډاکر راجسټری ته سپارل شوی.
- له دې وروسته، انځور د کوبرنیټس کلستر کې ځای پر ځای کیږي.
- که چیرې لانچ د کمانډ په کارولو سره پیل شوی وي
skaffold dev، بیا موږ د غوښتنلیک څخه لاګونه ترلاسه کول پیل کوو، او سکافولډ د ټولو کړنو بیا تکرارولو لپاره بدلونونو ته انتظار باسي.

د سکافولډ د کار د اصلي مرحلو انځور
تمرین وکړئ. د سکافولډ هڅه کول
د سکافولډ کارولو د ښودلو لپاره، زه به د . په ضمن کې، تاسو کولی شئ ډیری نورې مثالونه ومومئ چې مختلف مشخصات په ګوته کوي. زه به په مینیکوب کې ټول مرحلې په محلي ډول ترسره کړم. نصب کول ساده دي او یوازې څو دقیقې وخت نیسي، او تاسو به د پیل کولو لپاره kubectl ته اړتیا ولرئ.
راځئ چې سکافولډ نصب کړو:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64
chmod +x skaffold
sudo mv skaffold /usr/local/bin
skaffold version
v0.37.1راځئ چې د اړینو مثالونو سره د سکافولډ ذخیره کلون کړو:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservicesما د دوو پوډونو سره یوه بیلګه غوره کړې ده، هر یو یې یو کوچنی Go اپلیکیشن لري. یو اپلیکیشن فرنټ اینډ (لیروی-ویب) دی، کوم چې غوښتنې دوهم اپلیکیشن، بیک اینډ (لیروی-اپ) ته لیږي. راځئ چې وګورو چې دا څنګه ښکاري:
~/skaffold/examples/microservices # tree
.
├── leeroy-app
│ ├── app.go
│ ├── Dockerfile
│ └── kubernetes
│ └── deployment.yaml
├── leeroy-web
│ ├── Dockerfile
│ ├── kubernetes
│ │ └── deployment.yaml
│ └── web.go
├── README.adoc
└── skaffold.yaml
4 directories, 8 filesleeroy-app او leeroy-web د Go کوډ او ساده ډاکر فایلونه لري ترڅو دا کوډ په محلي ډول جوړ کړي:
~/skaffold/examples/microservices # cat leeroy-app/Dockerfile
FROM golang:1.12.9-alpine3.10 as builder
COPY app.go .
RUN go build -o /app .
FROM alpine:3.10
CMD ["./app"]
COPY --from=builder /app . زه به د غوښتنلیک کوډ نه درکوم - دا د دې پوهیدلو لپاره کافي دي leeroy-web غوښتنې مني او پراکسي یې ورته کوي leeroy-app. له همدې امله، په فایلونو کې Deployment.yaml یوازې د دې لپاره یو خدمت شتون لري app (د داخلي لارې لپاره). پوډ پورټ web موږ به دا غوښتنلیک ته د چټک لاسرسي لپاره ځان ته واستوو.
دا څه ښکاري skaffold.yaml:
~/skaffold/examples/microservices # cat skaffold.yaml
apiVersion: skaffold/v1beta13
kind: Config
build:
artifacts:
- image: leeroy-web
context: ./leeroy-web/
- image: leeroy-app
context: ./leeroy-app/
deploy:
kubectl:
manifests:
- ./leeroy-web/kubernetes/*
- ./leeroy-app/kubernetes/*
portForward:
- resourceType: deployment
resourceName: leeroy-web
port: 8080
localPort: 9000 پورته ذکر شوي ټول مرحلې دلته تشریح شوي دي. د دې ترتیب سربیره، د نړیوال ترتیباتو سره یو فایل هم شتون لري: ~/.skaffold/config. دا په لاسي ډول یا د CLI له لارې ترمیم کیدی شي — د مثال په توګه، پدې ډول:
skaffold config set --global local-cluster true دا قومانده به یو نړیوال متغیر تنظیم کړي local-cluster په معنی true، چې له هغې وروسته به سکافولډ هڅه ونکړي چې انځورونه لرې پرتو راجسټری ته فشار ورکړي. که تاسو په محلي توګه پراختیا ورکوئ، تاسو کولی شئ دا قومانده د محلي انځورونو جوړولو لپاره وکاروئ.
بېرته ته skaffold.yaml:
- په سټیج کې
buildموږ مشخص کوو چې انځور باید په محلي ډول جوړ او خوندي شي. وروسته له دې چې جوړونه د لومړي ځل لپاره پیل شي، موږ به لاندې وګورو:// т.к. Minikube создает кластер в отдельной виртуальной машине, // придется проникнуть внутрь, чтобы найти образы # minikube ssh $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE leeroy-app 7d55a50803590b2ff62e47e6f240723451f3ef6f8c89aeb83b34e661aa287d2e 7d55a5080359 4 hours ago 13MB leeroy-app v0.37.1-171-g0270a0c-dirty 7d55a5080359 4 hours ago 13MB leeroy-web 5063bfb29d984db1ff70661f17d6efcc5537f2bbe6aa6907004ad1ab38879681 5063bfb29d98 5 hours ago 13.1MB leeroy-web v0.37.1-171-g0270a0c-dirty 5063bfb29d98 5 hours ago 13.1MBلکه څنګه چې تاسو لیدلی شئ، سکافولډ انځورونه په اتوماتيک ډول ټګ کړي دي. په تصادفي توګه، دا د ټګ کولو ډیری پالیسیو ملاتړ کوي.
- نور په ترتیب کې دا ښودل شوی
context: ./leeroy-app/، د بیلګې په توګه هغه شرایط چې انځور پکې راټول شوی مشخص شوی دی. - د ځای پر ځای کولو په مرحله کې، موږ دا معلومه کوو چې موږ به د اړتیا وړ مینیفیسټونو لپاره kubectl او ماسک وکاروو.
-
PortForward: د هغه څه سره ورته چې موږ معمولا د پورټونو په کارولو سره فارورډ کووkubectl port-forward، موږ سکافولډ ته لارښوونه ورکوو چې دا قومانده زنګ ووهي. پدې حالت کې، سیمه ایز پورټ 9000 د ځای پرځای کولو په نوم 8080 ته لیږل کیږيleeroy-web.
د پیل کولو وخت دی skaffold dev: دا قومانده به یو دوامداره "فیډبیک لوپ" رامینځته کړي، پدې معنی چې دا به نه یوازې هرڅه راټول کړي او کلستر ته به یې ځای په ځای کړي، بلکې د پوډونو اوسنی حالت به راپور کړي، بدلونونه به وڅاري، او د پوډونو حالت به تازه کړي.
دلته د لانچ پایله ده skaffold dev --port-forward کله چې بیا راټولیږي:

لومړی، دا روښانه ده چې زیرمه کارول کیږي. بیا، غوښتنلیک جوړیږي، ځای پر ځای کیږي، او پورټونه لیږل کیږي. له هغه وخته چې --port-forward، سکافولډ بندر ته واستاوه webلکه څنګه چې ترې پوښتنه شوې وه، خو دلته app هغه دا په خپل اختیار سره لیږلی (د نږدې موجود یو غوره کول). له هغې وروسته، موږ د غوښتنلیکونو څخه لومړني لاګونه ترلاسه کوو.
راځئ چې وګورو چې دا کار کوي؟
~/skaffold/examples/microservices # kubectl get po
NAME READY STATUS RESTARTS AGE
leeroy-app-6998dfcc95-2nxvf 1/1 Running 0 103s
leeroy-web-69f7d47c9d-5ff77 1/1 Running 0 103s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy app!!! د فایل بدلول leeroy-app/app.go — څو ثانیې تیریږي... او:
~/skaffold/examples/microservices # kubectl get po
NAME READY STATUS RESTARTS AGE
leeroy-app-ffd79d986-l6nwp 1/1 Running 0 11s
leeroy-web-69f7d47c9d-5ff77 1/1 Running 0 4m59s
~/skaffold/examples/microservices # curl localhost:9000
leeroooooy Habr!!! په ورته وخت کې، سکافولډ پخپله کنسول ته ورته شی د پخوا په څیر واستاوه، د یو شی استثنا سره: دا یوازې رول آوټ شو leeroy-app، او ټول په یو وخت کې نه.
ډیر تمرین
دا هم د یادونې وړ ده چې کله یوه نوې پروژه رامینځته کیږي، د سکافولډ لپاره تشکیلات د قوماندې په کارولو سره بوټسټریپ کیدی شي init، کوم چې خورا اسانه دی. سربیره پردې، تاسو کولی شئ ډیری تشکیلات ولیکئ: په ډیفالټ ترتیب کې پراختیا ورکړئ، او بیا د قوماندې سره مرحلې ته واستوئ run (ورته پروسه لکه dev، مګر بدلونونه نه تعقیبوي)، د یو بل ترتیب په کارولو سره.
په کاتاکوډا کې یو شته دا د مثال سره نور هم اسانه ده. مګر دا د کوبرنیټس، یو اپلیکیشن، او سکافولډ سره یو چمتو شوی سینڈ باکس وړاندې کوي. دا یو ښه انتخاب دی که تاسو د اساساتو په هڅه کې لیوالتیا لرئ.
د سکافولډ لپاره د کارولو یوه ممکنه قضیه په لرې پرتو کلسترونو کې پراختیا ده. هرڅوک په خپل هارډویر کې د مینیکوب چلولو کې آرام نه وي، بیا یې اپلیکیشن ځای په ځای کړي او د دې د سم کار کولو انتظار وکړي. پدې حالت کې، سکافولډ یو غوره حل دی، لکه څنګه چې د ریډیټ انجینرانو لخوا تایید کیدی شي، لکه څنګه چې موږ دمخه بحث کړی دی. زموږ په بلاګ کې.
او په ویو ورکس د تولید پایپ لاین جوړولو یوه بیلګه لري.
پایلې
سکافولډ د کوبرنیټس ته د غوښتنلیکونو د ځای پرځای کولو لپاره د پایپ لاینونو جوړولو لپاره یوه اسانه وسیله ده، چې په عمده توګه د پراختیا اړتیاو باندې تمرکز کوي. د لنډ پایپ لاین جوړول اسانه دي چې د پراختیا کونکي اساسي اړتیاوې پوره کړي، مګر د لویو پروسو تنظیم کولو لپاره هم کارول کیدی شي. د CI/CD پروسو کې د سکافولډ کارولو یوه ښه بیلګه دا ده: داسې د لسو کوچنیو خدماتو څخه چې د Kubernetes، gRPC، Istio، او OpenCensus Tracing څخه ګټه پورته کوي.
سکافولډ لا دمخه په ګیټ هب کې نږدې 8000+ ستوري ترلاسه کړي دي، د ګوګل لخوا رامینځته شوی او د - په عمومي توګه، دا مهال د دې باور کولو لپاره هر دلیل شتون لري چې پروژه به اوږده او په خوښۍ سره وده وکړي.
PS
زموږ په بلاګ کې هم ولولئ:
- «»
- «»
- «»
- «".
سرچینه: www.habr.com
