Ngonyaka nengxenye edlule, ngoMashi 5, 2018, iGoogle yakhipha inguqulo yokuqala ye-alpha yephrojekthi yayo yomthombo ovulekile ye-CI/CD ebizwa ngokuthi.
NB: Ngendlela, sesike sakhuluma kafushane nge-Skaffold ngokujwayelekile
Ithiyori. Inhloso namakhono
Ngakho-ke, ngokujwayelekile, i-Skaffold ixazulula inkinga yokuzenzakalela komjikelezo we-CI/CD (esigabeni sokwakha, sokusunduza, sokuphakela), enikeza impendulo esheshayo yonjiniyela, i.e. ikhono lokuthola ngokushesha umphumela wezinguquko zekhodi ezilandelayo - ngendlela yohlelo lokusebenza olubuyekeziwe olusebenza kuqoqo le-Kubernetes. Futhi ingasebenza kumasekethe ahlukene (i-dev, isiteji, ukukhiqiza...), lapho i-Skaffold isiza khona ukuchaza amapayipi ahambisanayo okukhishwa.
Ikhodi yomthombo ye-Skaffold ibhalwe kokuthi Go,
Ake sibheke imisebenzi esemqoka kanye nezici. Esokuqala sihlanganisa lokhu okulandelayo:
- I-Skaffold inikeza amathuluzi okudala amapayipi e-CI/CD.
- Ikuvumela ukuthi uqaphe izinguquko kukhodi yomthombo ngemuva futhi usebenzise inqubo ezenzakalelayo yokuhlanganisa ikhodi ezithombeni zesiqukathi, ukushicilela lezi zithombe ku-Docker Registry futhi uzithumele kuqoqo le-Kubernetes.
- Ivumelanisa amafayela endaweni yokugcina nohla lwemibhalo olusebenzayo esitsheni.
- Ihlola ngokuzenzakalela kusetshenziswa ukuhlola kwesakhiwo sesitsha.
- Amachweba aphambili.
- Ifunda amalogi ohlelo lokusebenza olusebenza esitsheni.
- Isiza ekulungiseni izinhlelo zokusebenza ezibhalwe nge-Java, Node.js, Python, Go.
Manje mayelana nezici:
- I-Skaffold yona ayinazo izingxenye ze-cluster-side. Okusho ukuthi, asikho isidingo sokuqhubeka nokulungiselela i-Kubernetes ukusebenzisa lolu hlelo lokusebenza.
- Amapayipi ahlukene wohlelo lwakho lokusebenza. Ngabe udinga ukukhipha ikhodi ku-Minikube yasendaweni ngenkathi usathuthuka, bese uye esiteji noma ekukhiqizeni? Ngale njongo kukhona
amaphrofayli kanye nokucushwa komsebenzisi, okuguquguqukayo kwendawo kanye namafulegi, akuvumela ukuthi uchaze amapayipi ahlukene ohlelo lokusebenza olulodwa. - CLI. Usizo lwekhonsoli kuphela nezilungiselelo ku-YAML. Ku-inthanethi ungathola izinkomba zemizamo yokuyidala
i-GUI yokuhlola , nokho, okwamanje lokhu cishe kusho ukuthi othile uyamdinga, kodwa hhayi ngempela. - Ukuzijwayeza. I-Skaffold ayisona isivuni esizimele, kodwa silwela ukusebenzisa amamojula angawodwana noma izixazululo ezikhona zemisebenzi ethile.
Umfanekiso wakamuva:
- Esigabeni somhlangano ungasebenzisa:
- i-docker yakha endaweni, kuqoqo kusetshenziswa i-kaniko noma ku-Google Cloud Build;
- Bazel endaweni;
- UJib Maven noJib Gradle endaweni noma ku-Google Cloud Build;
- izikripthi zokwakha ngokwezifiso ziqhutshwa endaweni. Uma udinga ukusebenzisa esinye isisombululo sokwakha (esivumelana nezimo kakhulu/esijwayeleke kakhulu/...), sichazwa embhalweni ukuze i-Skaffold iyethule (
isibonelo esivela kumadokhumenti ). Lokhu kukuvumela ukuthi usebenzise noma yimuphi umqoqi ongabizwa kusetshenziswa umbhalo;
- Esigabeni sokuhlola, osekushiwo kakade
ukuhlolwa kwesakhiwo sesitsha ; - Ukuze kusetshenziswe okulandelayo kunikezwa:
- Kubectl;
- I-Helm;
- ngokwezifiso.
Ngenxa yalokhu, i-Skaffold ingabizwa ngokuthi iyingqayizivele uhlaka lokwakha i-CI/CD. Nasi isibonelo sokugeleza komsebenzi lapho usisebenzisa (kusuka kumadokhumenti ephrojekthi):
Ngabe ubukeka kanjani umsebenzi kaSkaffold ngokwejwayelekile?
- I-Utility monitors iyashintsha kumkhombandlela wekhodi yomthombo. Uma kwenziwa izinguquko kumafayela, avumelaniswa ne-pod yohlelo lokusebenza kuqoqo le-Kubernetes. Uma kungenzeka, ngaphandle kokuhlanganisa kabusha isithombe. Uma kungenjalo, isithombe esisha siyahlanganiswa.
- Isithombe esihlanganisiwe sibhekwa kusetshenziswa ukuhlolwa kwesakhiwo sesitsha, simakwe futhi sithunyelwe ku-Docker Registry.
- Ngemuva kwalokhu, isithombe siyasetshenziswa - sisetshenziswe kuqoqo le-Kubernetes.
- Uma ukwethulwa kwaqalwa kusetshenziswa umyalo
skaffold dev
, bese siqala ukuthola izingodo kuhlelo lokusebenza, futhi i-Skaffold ilinda izinguquko ukuze iphinde zonke izenzo futhi.
Umfanekiso wezigaba eziyinhloko zokusebenza kwe-Skaffold
Prakthiza. Izama i-Skaffold
Ukukhombisa ukusetshenziswa kwe-Skaffold, ngizothatha isibonelo ku
Faka i-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
Ake sihlanganise inqolobane ye-Skaffold nezibonelo ezidingekayo:
git clone https://github.com/GoogleContainerTools/skaffold
cd skaffold/examples/microservices
Ngikhethe isibonelo esinama-pods amabili, ngalinye liqukethe uhlelo lokusebenza olulodwa oluncane lwe-Go. Olunye uhlelo lokusebenza luyi-frontend (i-leeroy-web), eqondisa kabusha isicelo kuhlelo lokusebenza lwesibili - i-backend (i-leeroy-app). Ake sibone ukuthi ibukeka kanjani:
~/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
I-leeroy-app kanye ne-leeroy-web iqukethe ikhodi ye-Go kanye nama-Dockerfiles alula wokwakha le khodi endaweni:
~/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 .
Ngeke nginikeze ikhodi yesicelo - kwanele ukwazi lokho leeroy-web
yamukela izicelo futhi izithumelele zona leeroy-app
. Ngakho-ke kumafayela Deployment.yaml
kukhona Isevisi kuphela app
(ngomzila wangaphakathi). Imbobo ye-Pod web
sizozidlulisela kithi ukuze sifinyelele ngokushesha kuhlelo lokusebenza.
Kubukeka kanjani 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
Zonke izigaba ezibalulwe ngenhla zichazwe lapha. Ngaphezu kwalokhu kulungiselelwa, kukhona nefayela elinezilungiselelo zomhlaba wonke - ~/.skaffold/config
. Ingahlelwa ngesandla noma nge-CLI - ngokwesibonelo, kanje:
skaffold config set --global local-cluster true
Lo myalo uzosetha ukuguquguquka komhlaba wonke local-cluster
ibe yincazelo true
, ngemva kwalokho i-Skaffold ngeke izame ukuphusha izithombe ekubhaliseni okukude. Uma uthuthukisa endaweni, ungasebenzisa lo myalo ukwakha izithombe endaweni.
Buyela ku skaffold.yaml
:
- Esiteji
build
sicacisa ukuthi udinga ukuqoqa futhi ulondoloze isithombe endaweni. Ngemuva kokuthi isakhiwo sisebenze okokuqala, sizobona okulandelayo:// т.к. 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
Njengoba ubona, uSkaffold umake izithombe ngokwakhe. Ngendlela, izinqubomgomo ezimbalwa zokumaka ziyasekelwa.
- Ngokuqhubekayo ku-config kubonisiwe
context: ./leeroy-app/
, i.e. kucacisiwe umongo lapho isithombe siqoqwa khona. - Esigabeni sokusatshalaliswa, kunqunywa ukuthi sizosebenzisa i-kubectl kanye nemaski ukuze kubonakale okudingekile.
-
PortForward
: kufana nendlela esivamise ukudlulisa ngayo izimbobo sisebenzisakubectl port-forward
, sinikeza iziyalezo ku-Skaffold ukubiza lo myalo. Kulokhu, i-port 9000 yendawo idluliselwa ku-8080 ku-Deployment enegama.leeroy-web
.
Isikhathi sokuqalisa skaffold dev
: Ithimba lizodala "i-loop yempendulo" eqhubekayo, i.e. ngeke nje iqoqe yonke into futhi ikuthumele ku-cluster, kodwa izophinde ikutshele mayelana nesimo se-pods okwamanje, iqaphe izinguquko futhi ibuyekeze isimo se-pods.
Nawu umphumela wokwethulwa skaffold dev --port-forward
uma uhlanganisa kabusha:
Okokuqala, ungabona ukuthi i-cache iyasetshenziswa. Okulandelayo, uhlelo lokusebenza luyahlanganiswa, lusetshenziswe, futhi izimbobo zidluliselwe phambili. Njengoba kucacisiwe --port-forward
, i-Skaffold idlulisele ichweba kuyo web
, njengoba ebuzwa, kodwa lapha app
wajikijela ngokubona kwakhe (wakhetha eseduze ekhululekile). Ngemva kwalokhu, sithola izingodo zokuqala ezivela kuzinhlelo zokusebenza.
Ake sihlole ukuthi iyasebenza yini?
~/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!!!
Ilungisa ifayela leeroy-app/app.go
- kudlula imizuzwana embalwa... futhi:
~/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!!!
Ngesikhathi esifanayo, i-Skaffold ngokwayo ibonise into efanayo ku-console njengangaphambili, ngaphandle kwephuzu elilodwa: yaphuma kuphela. leeroy-app
, futhi hhayi ngesikhathi esisodwa.
Ukuzijwayeza okwengeziwe
Kuyafaneleka futhi ukusho ukuthi lapho udala iphrojekthi entsha, ukulungiselelwa kwe-Skaffold kungenziwa i-bootstrapped kusetshenziswa umyalo. init
, okuyinto elula kakhulu. Ngaphezu kwalokho, ungabhala izilungiselelo ezimbalwa: wenze intuthuko ekucushweni okuzenzakalelayo, bese uphumela esiteji ngomyalo. run
(inqubo efanayo ne dev
, ayiqapheli izinguquko), isebenzisa ukulungiselelwa okuhlukile.
Ku-katacoda kukhona
Icala elilodwa elingasetshenziswa le-Skaffold ukwenza intuthuko kuqoqo elikude. Akuwona wonke umuntu okhululekile ukusebenzisa i-Minikube ku-hardware yabo, bese ekhipha uhlelo lokusebenza futhi elindele ukuthi lusebenze ngokwanele... Kulokhu, i-Skaffold ixazulula inkinga ngokuphelele, engaqinisekiswa, isibonelo, onjiniyela be-Reddit, njengoba sine osekuxoxiwe ngakho
Futhi ku
isiphetho
I-Skaffold iyithuluzi elisebenziseka kalula lokwakha amapayipi afaka ukwethulwa kwezicelo ku-Kubernetes futhi agxile kakhulu ezidingweni zentuthuko. Kwenza kube lula kakhulu ukwakha ipayipi “elifushane” elicabangela izidingo eziyisisekelo zonjiniyela, kodwa uma uthanda, ungahlela izinqubo ezinkulu. Njengesinye sezibonelo ezicacile zokusebenzisa i-Skaffold kuzinqubo ze-CI/CD
I-Skaffold isivele inezinkanyezi ezicishe zibe ngu-8000+ ku-GitHub, ithuthukiswe yi-Google futhi iyingxenye ye
PS
Funda futhi kubhulogi yethu:
- «
Amathuluzi onjiniyela bezinhlelo zokusebenza ezisebenza ku-Kubernetes "; - «
i-werf - ithuluzi lethu le-CI / CD ku-Kubernetes (uhlolojikelele nombiko wevidiyo) "; - «
Ingadi v0.10.0: Ikhompyutha yakho ephathekayo ayidingi i-Kubernetes "; - «
Amathiphu namasu we-Kubernetes: mayelana nokuthuthukiswa kwendawo kanye ne-Telepresence ".
Source: www.habr.com