Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Silav her kesê li ser vê blogê! Ev posta sêyemîn e di rêzefîlmê de ku tê de em destnîşan dikin ka meriv çawa sepanên webê yên nûjen li ser Red Hat OpenShift bicîh dike.

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Di her du postên berê de, me nîşan da ku meriv çawa di çend gavan de sepanên tevna nûjen bicîh tîne û meriv çawa wêneyek nû ya S2I digel wêneyek servera HTTP-ê ya derveyî, wekî NGINX-ê, bi karanîna avahiyên zincîrkirî bikar tîne da ku sazkirinên hilberînê saz bike. .

Îro em ê nîşan bidin ka meriv çawa serverek pêşkeftinê ji bo serîlêdana xwe li ser platforma OpenShift dimeşîne û wê bi pergala pelê ya herêmî re hevdeng bike, û her weha biaxive ka Pipelines OpenShift çi ne û ew çawa dikarin wekî alternatîfek ji meclîsên girêdayî re werin bikar anîn.

OpenShift wekî hawîrdorek pêşveçûnê

Pêşveçûna xebatê

Wekî ku ji berê ve hatî destnîşan kirin yekem post, Pêvajoya pêşkeftinê ya tîpîk ji bo serîlêdanên tevna nûjen tenê celebek "pêşvebira pêşkeftinê" ye ku guhertinên pelên herêmî dişopîne. Dema ku ew diqewimin, avakirina serîlêdanê tê dest pê kirin û dûv re ew li gerokê tê nûve kirin.

Di pir çarçoveyên nûjen de, "pêşvebirek pêşkeftinê" ya weha di nav amûrên rêza fermanê yên têkildar de tête çêkirin.

Mînaka herêmî

Pêşîn, em bibînin ka ev çawa dema ku serîlêdanên herêmî dimeşîne çawa dixebite. Werin em serîlêdanê wekî mînak bigirin Bersivkirin ji gotarên berê, her çend hema hema heman têgehên xebata xebatê di hemî çarçoveyên din ên nûjen de derbas dibin.
Ji ber vê yekê, ji bo destpêkirina "serverê dev" di mînaka xweya React de, em ê emrê jêrîn têkevin:

$ npm run start

Dûv re di pencereya termînalê de em ê tiştek weha bibînin:

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Û serîlêdana me dê di geroka xwerû de vebe:

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Naha, heke em di pelê de guhertinan bikin, divê serîlêdan di gerokê de nûve bike.

Baş e, her tişt bi pêşkeftina di moda herêmî de zelal e, lê meriv çawa heman yekê li ser OpenShift bi dest dixe?

Pêşkêşkara pêşkeftinê li ser OpenShift

Ger tê bîra we, li posta berê, me li qonaxa ku jê re tê gotin qonaxa xebitandinê ya wêneya S2I nihêrî û dît ku ji hêla xwerû, modula servîsê berpirsiyar e ku serîlêdana meya webê xizmet bike.

Lêbelê, heke hûn ji nêzîk ve binêrin script run ji wê nimûneyê, ew guhêrbara jîngehê $NPM_RUN dihewîne, ku dihêle hûn emrê xwe bicîh bînin.

Mînakî, em dikarin modula nodeshift bikar bînin da ku serîlêdana xwe bicîh bikin:

$ npx nodeshift --deploy.env NPM_RUN="yarn start" --dockerImage=nodeshift/ubi8-s2i-web-app

Nîşe: Mînaka jorîn ji bo ronîkirina ramana giştî kurtkirî ye.

Li vir me guhêrbara jîngehê NPM_RUN li bicîhkirina xwe zêde kiriye, ku ji dema xebitandinê re dibêje fermana destpêkirina yarn bimeşîne, ku servera pêşkeftina React di hundurê pod meya OpenShift de dest pê dike.

Ger hûn li têketinek podek diherike binêrin, ew ê tiştek wusa xuya bike:

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Bê guman, ev hemî dê ne tiştek be heya ku em nikaribin koda herêmî bi kodê re hevdeng bikin, ku di heman demê de ji bo guhertinan tê şopandin, lê li ser serverek dûr dijî.

Senkronîzekirina koda dûr û herêmî

Xwezî, nodeshift bi hêsanî dikare bi hevdemkirinê re bibe alîkar, û hûn dikarin fermana temaşekirinê bikar bînin da ku guhartinan bişopînin.

Ji ber vê yekê piştî ku me fermanê da ku servera pêşkeftinê ji bo serîlêdana xwe bicîh bike, em dikarin bi ewlehî fermana jêrîn bikar bînin:

$ npx nodeshift watch

Wekî encamek, dê pêwendiyek bi poda xebitandinê ya ku me hinekî berê afirandiye re were çêkirin, hevdengkirina pelên meya herêmî bi komika dûr ve dê were çalak kirin, û pelên li ser pergala meya herêmî dê dest bi çavdêriya guhertinan bikin.

Ji ber vê yekê, heke em naha pelê src/App.js nûve bikin, pergal dê li hember van guhertinan bertek nîşan bide, wan li komika dûr kopî bike û servera pêşkeftinê dest pê bike, ku paşê dê serlêdana me di gerokê de nûve bike.

Ji bo temamkirina wêneyê, ka em nîşan bidin ka van fermanên tevahî çawa xuya dikin:

$ npx nodeshift --strictSSL=false --dockerImage=nodeshift/ubi8-s2i-web-app --build.env YARN_ENABLED=true --expose --deploy.env NPM_RUN="yarn start" --deploy.port 3000

$ npx nodeshift watch --strictSSL=false

Fermana temaşekirinê li ser fermana oc rsync abstractionek e, hûn dikarin li ser ka ew çawa dixebite bêtir fêr bibin vir.

Ev ji bo React-ê mînakek bû, lê tam heman rêbaz dikare bi çarçoveyên din re were bikar anîn, tenê guhêrbara jîngehê NPM_RUN wekî ku hewce ye destnîşan bike.

Openshift Pipelines

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Dûv re em ê li ser amûrek mîna OpenShift Pipelines biaxivin û ka ew çawa dikare wekî alternatîfek ji avahiyên zincîran re were bikar anîn.

OpenShift Pipelines çi ne

OpenShift Pipelines pergalek întegrasyon û radestkirina domdar a CI/CD-ya ewr e ku ji bo organîzekirina boriyan bi karanîna Tekton hatî çêkirin. Tekton çarçoveyek CI/CD-a xwemalî ya Kubernetes-a-çavkaniya vekirî ya maqûl e ku destûrê dide te ku bi veqetandina ji qata bingehîn ve bicîhkirina li ser platformên cihêreng (Kubernetes, bê server, makîneyên virtual, hwd.) otomatîk bike.

Fêmkirina vê gotarê hin zanîna Pipelines hewce dike, ji ber vê yekê em bi tundî pêşniyar dikin ku hûn pêşî bixwînin pirtûka fermî.

Sazkirina jîngeha karê xwe

Ji bo ku hûn bi mînakên di vê gotarê de bilîzin, hûn pêşî hewce ne ku hawîrdora xebata xwe amade bikin:

  1. Komek OpenShift 4 saz bikin û mîheng bikin. Mînakên me ji bo vê yekê CodeReady Containers (CRD) bikar tînin, talîmatên sazkirinê yên ku dikarin werin dîtin vir.
  2. Piştî ku kom amade ye, hûn hewce ne ku Operatorê Pipeline li ser saz bikin. Netirsin, ew hêsan e, rêwerzên sazkirinê vir.
  3. download Tekton CLI (tkn) vir.
  4. Amûra rêzika fermanê create-react-app bimeşînin da ku serîlêdanek ku hûn ê dûv re saz bikin biafirînin (ev serîlêdanek hêsan e Bersivkirin).
  5. (Vebijarkî) Depoyê klon bikin da ku serîlêdana nimûneyê bi npm saz bikin û dûv re npm dest pê bikin.

Di depoya serîlêdanê de dê peldankek k8s jî hebe, ku dê Kubernetes/OpenShift YAML-yên ku ji bo bicîhkirina serîlêdanê têne bikar anîn hebin. Dê Tasks, ClusterTasks, Çavkanî û Pipelines ku em ê di vê yekê de biafirînin hebin depoyên.

Werin em dest pê bikin

Ji bo nimûneya me gava yekem ev e ku di koma OpenShift de projeyek nû biafirînin. Ka em vê projeyê bang bikin webapp-pipeline û wê bi fermana jêrîn biafirînin:

$ oc new-project webapp-pipeline

Navê vê projeyê dê paşê di kodê de xuya bibe, ji ber vê yekê heke hûn biryar bidin ku navê wê tiştek din bikin, ji bîr nekin ku koda nimûneyê li gorî wê biguherînin. Ji vê nuqteyê dest pê bikin, em ê ne ji jor-bijêr, lê ji jêr-jor ve biçin: ango em ê pêşî hemî pêkhateyên veguhêzkerê biafirînin, û tenê paşê veguhezkar bixwe.

Ji ber vê yekê, berî her tiştî ...

Tasks

Werin em çend peywiran biafirînin, ku wê dûv re bibin alîkar ku serîlêdanê di nav lûleya me de bicîh bikin. Karê yekem - application_manifests_task - berpirsiyar e ji bo sepandina YAML ya wan çavkaniyên Kubernetes (xizmet, danîn û rê) ku di peldanka k8s ya serîlêdana me de ne. Karê duyemîn - update_deployment_task - ji nûvekirina wêneyek ku berê hatî vedan bi ya ku ji hêla xeta me ve hatî çêkirin de berpirsiyar e.

Xem neke ger hîn pir ne diyar e. Di rastiyê de, ev karan tiştek wekî karûbaran in, û em ê hinekî paşê bi hûrgulî li wan binêrin. Heya nuha, em tenê wan biafirînin:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/update_deployment_task.yaml
$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/tasks/apply_manifests_task.yaml

Dûv re, emrê tkn CLI bikar bînin, em ê kontrol bikin ka peywir hatine afirandin:

$ tkn task ls

NAME                AGE
apply-manifests     1 minute ago
update-deployment   1 minute ago

Nîşe: Ji bo projeya weya heyî ev karên herêmî ne.

Karên Cluster

Karên komê bi bingehîn heman karên hêsan in. Ango, ew berhevokek gavên ji nû ve bi kar anîn e ku dema ku karek taybetî dimeşînin bi rengekî an din têne hev kirin. Cûdahî ev e ku peywirek komê li her deverê di nav komê de peyda dibe. Ji bo dîtina navnîşa karên komê yên ku dema ku Operatorê Pipeline zêde dikin bixweber têne afirandin, em ê dîsa fermana tkn CLI bikar bînin:

$ tkn clustertask ls

NAME                       AGE
buildah                    1 day ago
buildah-v0-10-0            1 day ago
jib-maven                  1 day ago
kn                         1 day ago
maven                      1 day ago
openshift-client           1 day ago
openshift-client-v0-10-0   1 day ago
s2i                        1 day ago
s2i-go                     1 day ago
s2i-go-v0-10-0             1 day ago
s2i-java-11                1 day ago
s2i-java-11-v0-10-0        1 day ago
s2i-java-8                 1 day ago
s2i-java-8-v0-10-0         1 day ago
s2i-nodejs                 1 day ago
s2i-nodejs-v0-10-0         1 day ago
s2i-perl                   1 day ago
s2i-perl-v0-10-0           1 day ago
s2i-php                    1 day ago
s2i-php-v0-10-0            1 day ago
s2i-python-3               1 day ago
s2i-python-3-v0-10-0       1 day ago
s2i-ruby                   1 day ago
s2i-ruby-v0-10-0           1 day ago
s2i-v0-10-0                1 day ago

Naha em du peywirên komê biafirînin. Ya yekem dê wêneya S2I çêbike û wê bişîne qeyda OpenShift ya hundurîn; ya duyemîn ev e ku em wêneya xwe li ser bingeha NGINX ava bikin, bi karanîna serîlêdana ku me berê wekî naverok çêkiriye.

Wêne çêbikin û bişînin

Dema ku karê yekem biafirînin, em ê tiştê ku me berê di gotara berê de di derbarê meclîsên girêdayî de kiriye dubare bikin. Bînin bîra xwe ku me wêneya S2I (ubi8-s2i-web-app) bikar anî da ku serîlêdana xwe "avakirin" bike, û bi wêneyek ku di qeyda navxweyî ya OpenShift de hatî hilanîn bi dawî bû. Naha em ê vê wêneya serîlêdana webê ya S2I bikar bînin da ku ji bo sepana xwe DockerFile biafirînin û dûv re Buildah bikar bînin da ku avakirina rastîn bikin û wêneya encam bişopînin tomara navxweyî ya OpenShift, ji ber ku ew tam ya ku OpenShift dike gava ku hûn serîlêdanên xwe bi karanîna NodeShift-ê bi cih dikin. .

Hûn dipirsin, me van hemûyan çawa zanibû? Ji guhertoya fermî ya fermî Node.js, me tenê ew kopî kir û ji xwe re guherand.

Ji ber vê yekê, naha em peywira komê ya s2i-web-app biafirînin:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/s2i-web-app-task.yaml

Em ê vê bi hûrgulî analîz nekin, lê dê tenê li ser pîvana OUTPUT_DIR bisekinin:

params:
      - name: OUTPUT_DIR
        description: The location of the build output directory
        default: build

Ji hêla xwerû ve, ev parametre bi avakirina wekhev e, ku React naveroka berhevkirî datîne. Çarçoveyên din riyên cûda bikar tînin, mînakî, di Ember de ew dist e. Encama xebata meya komê ya yekem dê wêneyek be ku HTML, JavaScript û CSS-ya ku me berhev kiriye vedihewîne.

Li ser NGINX-ê wêneyek ava bikin

Ji bo peywira meya komê ya duyemîn, divê ew ji me re wêneyek-based NGINX ava bike, naveroka serîlêdana ku me berê çêkiriye bikar bîne. Di bingeh de, ev beşa beşa berê ye ku me li avahiyên zincîran nihêrî.

Ji bo kirina vê yekê, em - tam eynî wekî li jor - dê peywirek koma webapp-build-runtime biafirînin:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/clustertasks/webapp-build-runtime-task.yaml

Ger hûn li koda van peywirên komê mêze bikin, hûn dikarin bibînin ku ew depoya Git ku em pê re dixebitin an navên wêneyên ku em diafirînin diyar nake. Em tenê diyar dikin ka em bi rastî çi vediguhezînin Git, an wêneyek diyar a ku divê wêneya paşîn lê derkeve. Ji ber vê yekê dema ku bi serîlêdanên din re dixebitin van karên komê dikarin ji nû ve werin bikar anîn.

Û li vir em bi dilovanî derbasî xala din dibin…

Çavkaniyên

Ji ber vê yekê, ji ber ku, wekî ku me tenê got, divê peywirên komê bi qasî ku gengaz be gelemperî bin, pêdivî ye ku em çavkaniyên ku dê wekî têketin (depoya Git) û wekî encam (wêneyên paşîn) werin bikar anîn biafirînin. Yekem çavkaniya ku em hewce ne Git e, ku serîlêdana me lê dimîne, tiştek weha:

# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: web-application-repo
spec:
  type: git
  params:
    - name: url
      value: https://github.com/nodeshift-starters/react-pipeline-example
    - name: revision
      value: master

Li vir PipelineResource ji celebê git e. Mifteya url ya di beşa paraman de depoyek taybetî destnîşan dike û şaxê sereke diyar dike (ev vebijarkî ye, lê em ji bo tambûnê dinivîsin).

Naha em hewce ne ku çavkaniyek ji bo wêneya ku dê encamên peywira s2i-web-app werin tomarkirin biafirînin, ev bi vî rengî tête kirin:

# This resource is the result of running "npm run build",  the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: built-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest

Li vir PipelineResource ji celebê wêneyê ye, û nirxa parametreya url nîşan dide Tomara Wêne ya OpenShift ya hundurîn, bi taybetî ya ku di nav cîhê navên webapp-pipeline de ye. Ji bîr nekin ku hûn vê mîhengê biguherînin ger hûn cîhek navekî cûda bikar tînin.

Û di dawiyê de, çavkaniya paşîn a ku em hewce ne jî dê ji wêneyê celeb be û ev ê wêneya NGINX ya paşîn be ku wê hingê di dema danînê de were bikar anîn:

# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: runtime-web-application-image
spec:
  type: image
  params:
    - name: url
      value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest

Dîsa, bala xwe bidin ku ev çavkanî wêneyê di qeyda OpenShift ya hundurîn de di cîhê navên webapp-pipeline de hilîne.

Ji bo ku van hemî çavkaniyan bi yekcar biafirînin, em fermana afirandina bikar tînin:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/resources/resource.yaml

Hûn dikarin piştrast bikin ku çavkanî bi vî rengî hatine afirandin:

$ tkn resource ls

lûleya conveyor

Naha ku me hemî hêmanên pêwîst hene, bila em bi çêkirina wê bi fermana jêrîn boriyek ji wan kom bikin:

$ oc create -f https://raw.githubusercontent.com/nodeshift/webapp-pipeline-tutorial/master/pipelines/build-and-deploy-react.yaml

Lê berî ku em vê fermanê bimeşînin, werin em li van pêkhateyan binêrin. Navê yekem e:

apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
  name: build-and-deploy-react

Dûv re di beşa taybetmendiyê de em nîşanek çavkaniyên ku me berê afirandine dibînin:

spec:
  resources:
    - name: web-application-repo
      type: git
    - name: built-web-application-image
      type: image
    - name: runtime-web-application-image
      type: image

Dûv re em karên ku pêdivî ye ku xeta boriya me temam bike, diafirînin. Berî her tiştî, divê ew peywira s2i-web-app-a ku me berê afirandiye bicîh bîne:

tasks:
    - name: build-web-application
      taskRef:
        name: s2i-web-app
        kind: ClusterTask

Ev kar pîvanên têketinê (çavkaniya gir) û derketinê (çavkaniya malper-serlêdan-çavkaniya wêneyê) digire. Em di heman demê de wê pîvanek taybetî jî derbas dikin da ku ew TLS-ê verast neke ji ber ku em sertîfîkayên xwe-îmzakirî bikar tînin:

resources:
        inputs:
          - name: source
            resource: web-application-repo
        outputs:
          - name: image
            resource: built-web-application-image
      params:
        - name: TLSVERIFY
          value: "false"

Karê din hema hema heman e, tenê li vir peywira komê ya webapp-build-runtime ku me berê çêkiriye jê re tê gotin:

name: build-runtime-image
    taskRef:
      name: webapp-build-runtime
      kind: ClusterTask

Mîna peywira berê, em di çavkaniyekê de derbas dibin, lê naha ew wêne-web-serîlêdana çêkirî ye (derketina peywira meya berê). Û wekî encamek me dîsa wêneyê destnîşan kir. Ji ber ku divê ev peywir piştî ya berê were îdam kirin, em qada runAfter lê zêde dikin:

resources:
        inputs:
          - name: image
            resource: built-web-application-image
        outputs:
          - name: image
            resource: runtime-web-application-image
        params:
        - name: TLSVERIFY
          value: "false"
      runAfter:
        - build-web-application

Du peywirên din ji bo karanîna karûbar, rê û vekirina pelên YAML yên ku di pelrêça k8s ya serîlêdana meya webê de dijîn, û her weha ji bo nûvekirina vê bicîhkirinê dema ku wêneyên nû diafirînin berpirsiyar in. Me di destpêka gotarê de van her du peywirên komê diyar kirin.

Veguheztinê dest pê dike

Ji ber vê yekê, hemî beşên boriyê me têne afirandin, û em ê wê bi fermana jêrîn bimeşînin:

$ tkn pipeline start build-and-deploy-react

Di vê qonaxê de, rêzika fermanê bi înteraktîf tê bikar anîn û hûn hewce ne ku di bersiva her daxwazek wê de çavkaniyên guncan hilbijêrin: ji bo çavkaniya git, web-sepan-repo hilbijêrin, dûv re ji bo çavkaniya wêneya yekem, serîlêdana çêkirî-web. -image, û di dawiyê de, ji bo çavkaniya wêneya duyemîn -runtime-web-application-image:

? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr

Naha em werin rewşa boriyê bi karanîna fermana jêrîn kontrol bikin:

$ tkn pipeline logs -f

Dema ku boriyê dest pê kir û serîlêdan hate bicîh kirin, em dikarin bi fermana jêrîn riya weşandî daxwaz bikin:

$ oc get route react-pipeline-example --template='http://{{.spec.host}}'

Ji bo dîtbarîkirina mezintir, hûn dikarin di beşê de di moda Pêşdebir a konsolê malperê de lûleya me bibînin Pipeline, wek ku di Fig. 1.

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Fig.1. Çavdêriya boriyên diherike.

Bi tikandina li ser boriyek xebitandinê hûrguliyên zêde nîşan dide, wekî ku di Figure 2 de tê xuyang kirin.

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Birinc. 2. Agahiyên bêtir li ser boriyê.

Piştî bêtir agahdarî, hûn dikarin serîlêdanên xebitandinê di dîmenê de bibînin Topology, wek ku di Fig.3 de tê nîşandan.

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Hêjîra 3. Pod dest pê kir.

Bi tikandina xeleka li quncikê jorê yê rastê yê îkonê, wekî ku di Fig. 4-ê de tê xuyang kirin, serîlêdana me vedike.

Serlêdanên nûjen ên li ser OpenShift, beş 3: OpenShift wekî hawîrdorek pêşkeftinê û OpenShift Pipelines

Birinc. 4. Serlêdana React dimeşîne.

encamê

Ji ber vê yekê, me destnîşan kir ku meriv çawa serverek pêşkeftinê ji bo serîlêdana xwe li OpenShift dimeşîne û wê bi pergala pelê herêmî re hevdeng bike. Me her weha nihêrî ka meriv çawa bi karanîna Pipelines OpenShift şablonek çêkirî ya zincîrkirî simule dike. Hemî kodên nimûne ji vê gotarê têne dîtin vir.

Çavkaniyên zêde (EN)

Daxuyaniyên webinarên pêşerojê

Em dest bi rêze webinarên Îniyê yên derbarê ezmûna xwemalî dikin ku bi karanîna Platforma Konteyner a Red Hat OpenShift û Kubernetes bikar tînin:

Source: www.habr.com

Add a comment