ከአንድ ዓመት ተኩል በፊት፣ በማርች 5፣ 2018፣ ጎግል የክፍት ምንጭ CI/CD ፕሮጄክቱን የመጀመሪያ የአልፋ ስሪት አወጣ።
NBበነገራችን ላይ ስለ ስካፎል በጥቅሉ በአጭሩ ተናግረናል።
ቲዎሪ. ዓላማ እና እድሎች
ስለዚህ፣ በአጠቃላይ ስካፎልድ የሲአይ/ሲዲ ዑደትን (በግንባታው፣ በመግፋት፣ በማሰማራት ደረጃዎች) በራስ-ሰር የማዘጋጀት ችግርን ይፈታል፣ ለገንቢው ፈጣን ምላሽ ይሰጣል፣ ማለትም። የሚቀጥለውን ኮድ ለውጦች በፍጥነት የማግኘት ችሎታ - በ Kubernetes ክላስተር ውስጥ በሚሰራ የተሻሻለ መተግበሪያ መልክ። እና በተለያዩ ወረዳዎች (dev, ደረጃ, ምርት ...) ውስጥ ሊሠራ ይችላል, ለዚህም ስካፎል ለመልቀቅ ተጓዳኝ የቧንቧ መስመሮችን ለመግለጽ ይረዳል.
የስካፎል ምንጭ ኮድ የተፃፈው በGo ቋንቋ ነው፣
ዋና ዋና ተግባራትን እና ባህሪያትን አስቡባቸው. የመጀመሪያዎቹ የሚከተሉትን ያካትታሉ:
- ስካፎል CI/CD ቧንቧዎችን ለመፍጠር መሳሪያዎችን ያቀርባል።
- ከበስተጀርባ ባለው የምንጭ ኮድ ላይ ለውጦችን እንዲከታተሉ እና ኮድን ወደ ኮንቴነር ምስሎች በራስ ሰር የማዘጋጀት ሂደት እንዲጀምሩ፣ እነዚህን ምስሎች ወደ ዶከር መዝገብ ቤት በማተም እና ወደ ኩበርኔትስ ክላስተር በማሰማራት ሂደት እንዲጀምሩ ይፈቅድልዎታል።
- በማጠራቀሚያው ውስጥ ያሉትን ፋይሎች በማጠራቀሚያው ውስጥ ካለው የሥራ ማውጫ ጋር ያመሳስላቸዋል።
- በራስ-ሰር በመያዣ-መዋቅር-ሙከራ ይሞክሩ።
- ማስተላለፊያ ወደቦች.
- በኮንቴይነር ውስጥ የሚሰራውን የመተግበሪያ ምዝግብ ማስታወሻዎች ያነባል።
- በJava፣ Node.js፣ Python፣ Go የተጻፉ መተግበሪያዎችን ለማረም ይረዳል።
አሁን - ስለ ባህሪያቱ:
- ስካፎልድ እራሱ በክላስተር በኩል ምንም አካላት የሉትም።. ማለትም፣ ይህንን መገልገያ ለመጠቀም Kubernetes በተጨማሪ ማዋቀር አያስፈልግዎትም።
- ለትግበራዎ የተለያዩ የቧንቧ መስመሮች. በማደግ ላይ እያሉ ኮዱን ለአካባቢው ሚኒኩቤ ከዚያም ወደ መድረክ ወይም ምርት መልቀቅ ያስፈልግዎታል? ለዚህም, አሉ
መገለጫዎች እና የተጠቃሚ ውቅሮች, የአካባቢ ተለዋዋጮች እና ባንዲራዎች, ይህም ለአንድ መተግበሪያ የተለያዩ የቧንቧ መስመሮችን እንዲገልጹ ያስችልዎታል. - CLI. በ YAML ውስጥ የኮንሶል መገልገያ እና ውቅሮች ብቻ። በአውታረ መረቡ ላይ ለመፍጠር ሙከራዎች ማጣቀሻዎችን ማግኘት ይችላሉ።
የሙከራ GUI አሁን ግን አንድ ሰው ያስፈልገዋል ማለት ነው, ግን በእውነቱ አይደለም. - ሞዱልነት. Skaffold ራሱን የቻለ ማጨጃ አይደለም፣ ነገር ግን ለተወሰኑ ተግባራት ነጠላ ሞጁሎችን ወይም አስቀድሞ ያሉትን መፍትሄዎች ለመጠቀም ይፈልጋል።
የኋለኛው ምሳሌ፡-
- በግንባታው ደረጃ ላይ የሚከተሉትን መጠቀም ይችላሉ-
- ዶከር በአካባቢው ይገነባል፣ kanikoን በመጠቀም ክላስተር ላይ ወይም በጎግል ክላውድ ግንባታ ላይ;
- ባዝል በአካባቢው;
- ጂብ ማቨን እና ጂብ ግራድል በአገር ውስጥ ወይም በጎግል ክላውድ ግንባታ;
- ብጁ የግንባታ ስክሪፕቶች በአገር ውስጥ ይሰራሉ። ሌላ (የበለጠ ተለዋዋጭ/የሚታወቅ/…) የግንባታ መፍትሄን ማስኬድ ከፈለጉ፣ ስካፎል እንዲያሄድ በስክሪፕቱ ውስጥ ተገልጿል
ምሳሌ ከሰነድ ). ይህ በአጠቃላይ ስክሪፕት በመጠቀም ሊጠራ የሚችል ማንኛውንም ሰብሳቢ እንድትጠቀም ይፈቅድልሃል;
- በሙከራ ደረጃ, ቀደም ሲል የተጠቀሰው
መያዣ-መዋቅር-ሙከራ ; - ማሰማራት የሚከተሉትን ያጠቃልላል
- ኩቤክትል;
- Helms;
- ማበጀት.
ለዚህም ምስጋና ይግባውና ስካፎል ልዩ ተብሎ ሊጠራ ይችላል CI / ሲዲ ለመገንባት ማዕቀፍ. ሲጠቀሙበት (ከፕሮጀክት ሰነዱ የተወሰደ) የስራ ሂደት ምሳሌ ይኸውና፡-
የ Skaffold ሥራ በጥቅሉ ሲታይ ምን ይመስላል?
- መገልገያው የምንጭ ኮድ ማውጫ ላይ ለውጦችን ይመለከታል። በፋይሎቹ ላይ ማሻሻያዎች ከተደረጉ፣ በ Kubernetes ክላስተር ውስጥ ካለው የመተግበሪያ ፖድ ጋር ይመሳሰላሉ። ከተቻለ, ምስሉን እንደገና ሳይገነባ. አለበለዚያ, አዲስ ምስል ተሰብስቧል.
- የተገነባው ምስል በመያዣ-መዋቅር-ሙከራ ተረጋግጧል፣ መለያ ተሰጥቶታል እና ለዶከር መዝገብ ቤት ገብቷል።
- ከዚያ በኋላ, ምስሉ ተዘርግቷል - በኩበርኔትስ ክላስተር ውስጥ ተዘርግቷል.
- ማስጀመሪያው በትእዛዙ ከተጀመረ
skaffold dev
, ከዚያ ከመተግበሪያው ምዝግብ ማስታወሻዎችን መቀበል እንጀምራለን, እና Skaffold ሁሉንም ድርጊቶች እንደገና ለመድገም ለውጦችን እየጠበቀ ነው.
የስካፎልድ ሥራ ዋና ደረጃዎች ምሳሌ
ተለማመዱ። Skaffold በመሞከር ላይ
የ 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
የ Skaffold ማከማቻውን በአስፈላጊ ምሳሌዎች እንዝጋው፡-
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 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 ምስሎችን ወደ የርቀት መዝገብ ውስጥ 'ለመግፋት' አይሞክርም. በአገር ውስጥ እያደጉ ካሉ፣ ምስሎችን በአካባቢው ለመቆለልም ይህን ትዕዛዝ መጠቀም ይችላሉ።
ተመለስ ወደ 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
, ይህን ትዕዛዝ ለመጥራት ለ Skaffold መመሪያዎችን እንሰጣለን. በዚህ ጉዳይ ላይ የአከባቢው ወደብ 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
፣ ሁሉም በአንድ ጊዜ አይደለም።
ተጨማሪ ልምምድ
አዲስ ፕሮጀክት ሲፈጥሩ የ Skaffold ውቅሮች ትዕዛዙን በመጠቀም 'bootstrap' ሊደረጉ እንደሚችሉ መጥቀስ ተገቢ ነው. init
በጣም ምቹ የሆነው. በተጨማሪም ፣ ብዙ አወቃቀሮችን መጻፍ ይችላሉ-በነባሪው ውቅር ላይ ማዳበር እና ከዚያ በትእዛዙ ወደ መድረክ ያውጡ። run
(ከዚህ ጋር ተመሳሳይ ሂደት) dev
, ለውጦቹን ብቻ አይከተልም), የተለየ ውቅር በመጠቀም.
በካታኮዳ ላይ አለ።
ለስካፎል ሊጠቅም የሚችል አንድ መያዣ በርቀት ዘለላ ላይ ልማትን መስራት ነው። ሁሉም ሰው ሚኒኩቤን በራሱ ሃርድዌር ማስኬድ፣ ከዚያም አፕሊኬሽኑን አውጥቶ በበቂ ሁኔታ እንዲሰራ መጠበቅ አይመቸውም ... በዚህ አጋጣሚ ስካፎል ተግባሩን በትክክል ይፈታል ይህም ለምሳሌ በሬዲት መሐንዲሶች ሊረጋገጥ ይችላል አስቀድመን አለን።
እና ውስጥ
መደምደሚያ
ስካፎልድ ወደ ኩበርኔትስ አፕሊኬሽኖችን መልቀቅን የሚያካትት እና በዋናነት በልማት ፍላጎቶች ላይ ያተኮረ የቧንቧ መስመሮችን ለመገንባት ምቹ መሳሪያ ነው። በእሱ አማካኝነት የገንቢውን መሰረታዊ ፍላጎቶች ከግምት ውስጥ የሚያስገባ "አጭር" የቧንቧ መስመር መፍጠር በጣም ቀላል ነው, ነገር ግን ከተፈለገ ትላልቅ ሂደቶችን ማደራጀት ይችላሉ. በ CI / ሲዲ ሂደቶች ውስጥ የ Skaffold አጠቃቀም ግልፅ ምሳሌዎች እንደ አንዱ
ስካፎልድ በGitHub ላይ ወደ 8000+ የሚጠጉ ኮከቦች አሉት፣ በGoogle የተገነባ እና ከፊል
PS
በብሎጋችን ላይ ያንብቡ፡-
- «
በ Kubernetes ላይ ለሚሰሩ መተግበሪያዎች ገንቢዎች መሣሪያዎች "; - «
werf - የእኛ መሳሪያ ለ CI / ሲዲ በኩበርኔትስ (አጠቃላይ እይታ እና የቪዲዮ ዘገባ) "; - «
የአትክልት v0.10.0: የእርስዎ ላፕቶፕ Kubernetes አያስፈልገውም "; - «
የኩበርኔትስ ጠቃሚ ምክሮች እና ዘዴዎች፡ ስለ አካባቢ ልማት እና ቴሌፕረዘንስ ».
ምንጭ: hab.com