یو نیم کال دمخه، د مارچ په 5، 2018، ګوګل د CI/CD په نوم د خپلې خلاصې سرچینې پروژې لومړۍ الفا نسخه خپره کړه.
NB: له بلې خوا، موږ دمخه په خپل عمومي کې د سکافولډ په اړه لنډې خبرې کړې دي
نظریه. موخې او وړتیاوې
نو، په عمومي توګه خبرې کول، سکافولډ د CI/CD دورې اتومات کولو ستونزه حل کوي (په جوړیدو، فشار، ځای پرځای کولو مرحلو کې)، د پراختیا کونکي سمدستي فیډبیک وړاندیز کوي، د بیلګې په توګه. د راتلونکي کوډ بدلونونو پایله ګړندي ترلاسه کولو وړتیا - د یو تازه شوي غوښتنلیک په بڼه چې په کوبرنیټس کلستر کې روان دی. او دا کولی شي په مختلف سرکټونو کې کار وکړي (dev، مرحله، تولید ...)، د کوم لپاره چې سکافولډ د رول آوټ لپاره اړونده پایپ لاینونو تشریح کولو کې مرسته کوي.
د سکافولډ سرچینې کوډ په Go کې لیکل شوی،
راځئ چې اصلي دندې او ځانګړتیاوې وګورو. په لومړي کې لاندې شامل دي:
- سکافولډ د CI/CD پایپ لاینونو جوړولو لپاره وسیلې وړاندې کوي.
- تاسو ته اجازه درکوي په شاليد کې د سرچینې کوډ کې بدلونونه وڅارئ او د کانټینر عکسونو کې د کوډ راټولولو اتومات پروسه پرمخ وړئ ، دا عکسونه په ډاکر راجسټري کې خپاره کړئ او د کوبرنیټس کلستر ته یې ځای په ځای کړئ.
- په ذخیره کې فایلونه په کانټینر کې د کاري لارښود سره همغږي کوي.
- په اتوماتيک ډول د کانټینر - جوړښت - ازموینې په کارولو سره ازموینې.
- مخ پر وړاندې بندرونه.
- په کانټینر کې د چلونکي غوښتنلیک لاګونه لوستل.
- په Java, Node.js, Python, Go کې لیکل شوي غوښتنلیکونو ډیبګ کولو کې مرسته کوي.
اوس د ځانګړتیاوو په اړه:
- سکافولډ پخپله د کلستر اړخ برخې نلري. دا دی، د دې افادیت کارولو لپاره د کوبرنیټس نور تنظیم کولو ته اړتیا نشته.
- ستاسو د غوښتنلیک لپاره مختلف پایپ لاینونه. ایا تاسو اړتیا لرئ ځایی مینیکیوب ته کوډ ورکړئ پداسې حال کې چې تاسو وده کوئ ، او بیا سټیج یا تولید ته؟ د دې هدف لپاره شتون لري
پروفایلونه او د کاروونکي تشکیلات، د چاپیریال تغیرات او بیرغونه، کوم چې تاسو ته اجازه درکوي د یو غوښتنلیک لپاره مختلف پایپ لاینونه تشریح کړئ. - CLI. یوازې په YAML کې د کنسول افادیت او تشکیلات. په انټرنیټ کې تاسو کولی شئ د جوړولو هڅو ته مراجعه ومومئ
تجربوي GUI په هرصورت، په اوس وخت کې دا خورا احتمال یوازې د دې معنی لري چې یو څوک ورته اړتیا لري، مګر واقعا نه. - ماډولیت. سکافولډ یو خپلواک فصل نه دی، مګر هڅه کوي د ځانګړو دندو لپاره انفرادي ماډلونه یا موجوده حلونه وکاروي.
وروستی مثال:
- د غونډې په مرحله کې تاسو کولی شئ وکاروئ:
- ډاکر په محلي توګه جوړ کړئ، په کلستر کې د کانیکو په کارولو یا د ګوګل کلاوډ جوړونې کې؛
- په محلي توګه بازل؛
- Jib Maven او Jib Gradle په ځایی یا د ګوګل کلاوډ جوړ کې؛
- د دودیز جوړونې سکریپټونه په محلي توګه پرمخ ځي. که تاسو اړتیا لرئ یو بل (ډیر انعطاف منونکی / پیژندل شوی / ...) جوړ کړئ حل چل کړئ ، دا په سکریپټ کې تشریح شوی ترڅو سکافولډ دا په لاره واچوي (
مثال د اسنادو څخه ). دا تاسو ته اجازه درکوي هر هغه راټولونکی وکاروئ چې د سکریپټ په کارولو سره ویل کیدی شي؛
- د ازموینې په مرحله کې، مخکې ذکر شوي
د کانټینر جوړښت - ازموینه ; - د پلي کولو لپاره لاندې چمتو شوي دي:
- کوبکټل;
- هیلم
- دودیز کول
د دې څخه مننه، سکافولډ یو ځانګړی بلل کیدی شي د CI/CD جوړولو لپاره چوکاټ. دلته د کار فلو مثال دی کله چې دا کاروئ (د پروژې اسنادو څخه):
د سکافولډ کار په عمومي شرایطو کې څه ښکاري؟
- یوټیلیټ د سرچینې کوډ لارښود کې بدلونونه څاري. که په فایلونو کې تعدیلات رامینځته شي، دوی د کوبرنیټس کلستر کې د غوښتنلیک پوډ سره همغږي کیږي. که ممکنه وي، پرته له دې چې انځور بیا یوځای شي. که نه نو، یو نوی انځور راټول شوی.
- راټول شوی عکس د کانټینر - جوړښت - ازموینې په کارولو سره چک شوی ، ټګ شوی او د ډاکر راجسټری ته لیږل شوی.
- له دې وروسته، عکس له مینځه وړل شوی - د کوبرنیټس کلستر کې ځای پرځای شوی.
- که لانچ د کمانډ په کارولو سره پیل شوی وي
skaffold dev
، بیا موږ د غوښتنلیک څخه د لاګونو ترلاسه کول پیل کوو ، او سکافولډ بدلونونو ته انتظار باسي ترڅو ټولې کړنې بیا تکرار کړي.
د Skaffold عملیاتو د اصلي پړاوونو انځور
تمرین. د سکافولډ هڅه کول
د سکافولډ کارولو ښودلو لپاره، زه به یو مثال واخلم
Skaffold نصب کړئ:
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
ما د دوه پوډونو سره یو مثال غوره کړ، هر یو د یو کوچني ګو غوښتنلیک لري. یو غوښتنلیک فرنټ اینډ (لیروی-ویب) دی ، کوم چې غوښتنه دوهم غوښتنلیک ته لیږل کیږي - بیکینډ (لیروی ایپ). راځئ وګورو چې دا څه ښکاري:
~/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 files
leeroy-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/
، i.e. هغه شرایط چې په کوم کې عکس راټول شوی دی مشخص شوی. - د ګمارنې په مرحله کې، دا ټاکل شوې چې موږ به د اړینو څرګندونو لپاره کیوبیکل او ماسک وکاروو.
-
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 پروسو کې د سکافولډ کارولو روښانه مثال په توګه
سکافولډ لا دمخه په GitHub کې نږدې 8000+ ستوري لري، د ګوګل لخوا رامینځته شوی او یوه برخه ده
PS
زموږ په بلاګ کې هم ولولئ:
- «
په Kubernetes کې د غوښتنلیکونو پراختیا کونکو لپاره وسیلې » - «
werf - په Kubernetes کې د CI / CD لپاره زموږ وسیله (کتنې او ویډیو راپور) » - «
باغ v0.10.0: ستاسو لپ ټاپ Kubernetes ته اړتیا نلري » - «
د کوبرنیټس لارښوونې او چلونه: د ځایی پراختیا او ټیلی پریزنس په اړه ".
سرچینه: www.habr.com