Bemeester die ontplooiingstaak in GKE sonder inproppe, SMS en registrasie. Met een oog kyk ons ​​onder Jenkins se baadjie

Dit het alles begin toe die spanleier van een van ons ontwikkelingspanne ons gevra het om hul nuwe toepassing, wat die vorige dag in 'n houer geplaas is, te toets. Ek het dit geplaas. Na sowat 20 minute is 'n versoek ontvang om die toepassing op te dateer, want 'n baie nodige ding is daar bygevoeg. Ek het vernuwe. Na nog 'n paar uur... wel, jy kan raai wat volgende begin gebeur het...

Ek moet erken, ek is nogal lui (het ek dit nie vroeër erken nie? Nee?), en gegewe die feit dat spanleiers toegang het tot Jenkins, waarin ons almal CI/CD het, het ek gedink: laat hom ontplooi as soveel as wat hy wil! Ek het 'n grappie onthou: gee 'n man 'n vis en hy eet vir 'n dag; noem 'n persoon Gevoed en hy sal sy hele lewe lank Gevoed word. En gegaan speel truuks op die werk, wat 'n houer met die toepassing van enige suksesvol ingeboude weergawe in Kuber kan ontplooi en enige waardes daarna kan oordra ENV (my oupa, 'n filoloog, 'n Engelse onderwyser in die verlede, sou nou sy vinger na sy slaap draai en baie ekspressief na my kyk nadat hy hierdie sin gelees het).

So, in hierdie nota sal ek jou vertel hoe ek geleer het:

  1. Werk werksgeleenthede in Jenkins dinamies op vanaf die werk self of van ander poste;
  2. Koppel aan die wolkkonsole (Wolkdop) vanaf 'n nodus met die Jenkins-agent geïnstalleer;
  3. Ontplooi werklading na Google Kubernetes Engine.


Trouens, ek is natuurlik ietwat oneerlik. Daar word aanvaar dat u ten minste 'n deel van die infrastruktuur in die Google-wolk het, en daarom is u die gebruiker daarvan en het u natuurlik 'n GCP-rekening. Maar dit is nie waaroor hierdie nota gaan nie.

Dit is my volgende cheat sheet. Ek wil net in een geval sulke aantekeninge skryf: Ek het met 'n probleem gekonfronteer, ek het aanvanklik nie geweet hoe om dit op te los nie, die oplossing is nie klaargemaak gegoogle nie, so ek het dit in dele gegoogle en uiteindelik die probleem opgelos. En sodat ek in die toekoms, wanneer ek vergeet hoe ek dit gedoen het, nie alles weer stukkie vir stukkie hoef te google en saam te stel nie, skryf ek vir my sulke cheat sheets.

Vrywaring: 1. Die nota is geskryf "vir myself", vir die rol beste praktyk nie van toepassing nie. Ek is bly om die "dit sou beter gewees het om dit op hierdie manier te doen"-opsies in die kommentaar te lees.
2. As die aangewende deel van die noot as sout beskou word, dan is hierdie een, soos al my vorige notas, 'n swak soutoplossing.

Dinamiese opdatering van werkinstellings in Jenkins

Ek voorsien jou vraag: wat het dinamiese werkopdatering daarmee te doen? Voer die waarde van die stringparameter handmatig in en jy gaan!

Ek antwoord: Ek is regtig lui, ek hou nie daarvan as hulle kla nie: Misha, die ontplooiing is besig om te kraak, alles is weg! Jy begin soek, en daar is 'n tikfout in die waarde van een of ander taakbeginparameter. Daarom verkies ek om alles so doeltreffend moontlik te doen. As dit moontlik is om die gebruiker te verhoed om data direk in te voer deur eerder 'n lys van waardes te gee om van te kies, dan organiseer ek die keuse.

Die plan is dit: ons skep 'n werk in Jenkins, waarin ons, voor die bekendstelling, 'n weergawe uit die lys kon kies, waardes spesifiseer vir parameters wat na die houer deurgegee word via ENV, dan versamel dit die houer en druk dit in die houerregister. Dan van daar af word die houer in kubus as gelanseer werklading met die parameters gespesifiseer in die werk.

Ons sal nie die proses oorweeg om 'n werk in Jenkins te skep en op te rig nie, dit is buite die onderwerp. Ons sal aanvaar dat die taak gereed is. Om 'n opgedateerde lys met weergawes te implementeer, het ons twee dinge nodig: 'n bestaande bronnelys met a priori geldige weergawenommers en 'n veranderlike soos Keuse parameter in die taak. In ons voorbeeld, laat die veranderlike benoem word BOU_VERSIE, sal ons nie in detail daaroor stilstaan ​​nie. Maar kom ons kyk noukeuriger na die bronnelys.

Daar is nie soveel opsies nie. Twee dinge het dadelik by my opgekom:

  • Gebruik die afstandtoegang-API wat Jenkins aan sy gebruikers bied;
  • Versoek die inhoud van die afgeleë repository-lêergids (in ons geval is dit JFrog Artifactory, wat nie belangrik is nie).

Jenkins Remote Access API

Volgens die gevestigde uitstekende tradisie sou ek liewer lang verduidelikings vermy.
Ek sal myself slegs 'n vrye vertaling van 'n stuk van die eerste paragraaf toelaat eerste bladsy van API-dokumentasie:

Jenkins bied 'n API vir afgeleë masjienleesbare toegang tot die funksionaliteit daarvan. <…> Afstandtoegang word in 'n REST-agtige styl aangebied. Dit beteken dat daar geen enkele toegangspunt tot alle kenmerke is nie, maar eerder 'n URL soos ".../api/", Waar"..." beteken die voorwerp waarop die API-vermoëns toegepas word.

Met ander woorde, as die ontplooiingstaak waaroor ons tans praat, beskikbaar is by http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, dan is die API-fluitjies vir hierdie taak beskikbaar by http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Vervolgens het ons 'n keuse in watter vorm om die uitset te ontvang. Kom ons fokus op XML, aangesien die API slegs in hierdie geval filtering toelaat.

Kom ons probeer net om 'n lys van alle werklopies te kry. Ons stel net belang in die gemeentenaam (vertoonnaam) en die resultaat daarvan (lei):

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]

Dit blyk uit?

Laat ons nou net die lopies filter wat met die resultaat eindig SUKSES. Kom ons gebruik die argument &sluit uit en as 'n parameter sal ons dit die pad deurgee na 'n waarde wat nie gelyk is aan SUKSES. Ja ja. 'n Dubbel negatief is 'n stelling. Ons sluit alles uit wat ons nie interesseer nie:

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!='SUCCESS']

Skermskoot van die lys van suksesvolle
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

Wel, net vir die pret, kom ons maak seker dat die filter ons nie bedrieg het nie (filters lieg nooit!) en vertoon 'n lys van "onsuksesvolle":

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result='SUCCESS']

Skermskoot van die lys nie-suksesvolles
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

Lys van weergawes van 'n gids op 'n afgeleë bediener

Daar is 'n tweede manier om 'n lys weergawes te kry. Ek hou selfs meer daarvan as om toegang tot die Jenkins API te kry. Wel, want as die toepassing suksesvol gebou is, beteken dit dat dit verpak en in die bewaarplek in die toepaslike vouer geplaas is. Soos, 'n bewaarplek is die verstekberging van werkende weergawes van toepassings. Soos. Wel, kom ons vra hom watter weergawes in stoor is. Ons sal die afgeleë gids krul, grep en awk. As iemand belangstel in die oneliner, dan is dit onder die spoiler.

Een reël opdrag
Let asseblief op twee dinge: ek gee die verbindingbesonderhede in die kopskrif deur en ek het nie al die weergawes van die gids nodig nie, en ek kies slegs dié wat binne 'n maand geskep is. Wysig die opdrag om by jou realiteite en behoeftes te pas:

curl -H "X-JFrog-Art-Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

Die opstel van take en poskonfigurasielêer in Jenkins

Ons het die bron van die lys weergawes uitgepluis. Kom ons inkorporeer nou die gevolglike lys in die taak. Vir my was die ooglopende oplossing om 'n stap in die toepassingsboutaak by te voeg. Die stap wat uitgevoer sou word as die resultaat "sukses" was.

Maak die monteringstaakinstellings oop en blaai tot heel onder. Klik op die knoppies: Voeg boustap by -> Voorwaardelike stap (enkel). Kies die toestand in die stapinstellings Huidige boustatus, stel die waarde in SUKSES, die aksie wat uitgevoer moet word indien suksesvol Voer dop opdrag uit.

En nou die prettige deel. Jenkins stoor werkkonfigurasies in lêers. In XML-formaat. Langs die pad http://путь-до-задания/config.xml Gevolglik kan u die konfigurasielêer aflaai, dit wysig soos nodig en dit terugsit waar u dit gekry het.

Onthou, ons het hierbo ooreengekom dat ons 'n parameter vir die lys weergawes sal skep BOU_VERSIE?

Kom ons laai die konfigurasielêer af en kyk daarin. Net om seker te maak dat die parameter in plek is en van die verlangde tipe is.

Skermskoot onder bederf.

Jou config.xml-fragment moet dieselfde lyk. Behalwe dat die inhoud van die keuses-element nog ontbreek
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

Is jy seker? Dit is dit, kom ons skryf 'n skrif wat uitgevoer sal word as die bou suksesvol is.
Die skrif sal 'n lys weergawes ontvang, die konfigurasielêer aflaai, die lys weergawes daarin skryf op die plek wat ons benodig, en dit dan terugsit. Ja. Dit is reg. Skryf 'n lys weergawes in XML op die plek waar daar reeds 'n lys weergawes is (sal in die toekoms wees, na die eerste bekendstelling van die skrif). Ek weet daar is nog vurige aanhangers van gewone uitdrukkings in die wêreld. Ek behoort nie aan hulle nie. Installeer asseblief xmlsterler na die masjien waar die konfigurasie geredigeer sal word. Dit lyk vir my dat dit nie so 'n groot prys is om te betaal om die wysiging van XML met sed te vermy nie.

Onder die bederf bied ek die kode aan wat die bogenoemde volgorde in sy geheel uitvoer.

Skryf 'n lys weergawes van 'n gids op die afgeleë bediener na die konfigurasie

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Читаем в массив список версий из репозитория
readarray -t vers < <( curl -H "X-JFrog-Art-Api:Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

As jy die opsie verkies om weergawes van Jenkins te kry en jy is so lui soos ek, dan is dieselfde kode onder die bederf, maar 'n lys van Jenkins:

Skryf 'n lys weergawes van Jenkins na die konfigurasie
Hou dit net in gedagte: my samestellingnaam bestaan ​​uit 'n volgnommer en 'n weergawenommer, geskei deur 'n dubbelpunt. Gevolglik sny awk die onnodige deel af. Vir jouself, verander hierdie lyn om by jou behoeftes te pas.

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Пишем в файл список версий из Jenkins
curl -g -X GET -u username:apiKey 'http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!=%22SUCCESS%22]&pretty=true' -o builds.xml

############## Читаем в массив список версий из XML
readarray vers < <(xmlstarlet sel -t -v "freeStyleProject/allBuild/displayName" builds.xml | awk -F":" '{print $2}')

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

In teorie, as jy die kode getoets het wat geskryf is op grond van die voorbeelde hierbo, dan behoort jy in die ontplooiingstaak reeds 'n aftreklys met weergawes te hê. Dit is soos in die kiekie onder die bederf.

Korrek voltooide lys weergawes
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

As alles gewerk het, copy-paste dan die skrif in Voer dop opdrag uit en stoor veranderinge.

Koppel tans aan wolkdop

Ons het versamelaars in houers. Ons gebruik Ansible as ons toepassingafleweringsinstrument en konfigurasiebestuurder. Gevolglik, wanneer dit kom by die bou van houers, kom drie opsies in gedagte: installeer Docker in Docker, installeer Docker op 'n masjien wat Ansible gebruik, of bou houers in 'n wolkkonsole. Ons het in hierdie artikel ingestem om stil te bly oor plugins vir Jenkins. Onthou jy?

Ek het besluit: wel, aangesien houers "uit die boks" in die wolkkonsole opgetel kan word, hoekom dan pla? Hou dit skoon, reg? Ek wil Jenkins-houers in die wolkkonsole versamel, en dan van daar af in die kubus begin. Boonop het Google baie ryk kanale binne sy infrastruktuur, wat 'n voordelige uitwerking op die spoed van ontplooiing sal hê.

Om aan die wolkkonsole te koppel, het jy twee dinge nodig: gwolk en toegangsregte tot Google Wolk API vir die VM-instansie waarmee dieselfde verbinding gemaak sal word.

Vir diegene wat van plan is om glad nie van Google Cloud af te koppel nie
Google laat die moontlikheid toe om interaktiewe magtiging in sy dienste te deaktiveer. Dit sal jou toelaat om selfs vanaf 'n koffiemasjien aan die konsole te koppel, as dit *nix loop en self 'n konsole het.

As dit nodig is dat ek hierdie kwessie in meer besonderhede dek binne die raamwerk van hierdie nota, skryf in die kommentaar. As ons genoeg stemme kry, sal ek 'n opdatering oor hierdie onderwerp skryf.

Die maklikste manier om regte toe te ken, is deur die webkoppelvlak.

  1. Stop die VM-instansie waarvandaan jy later aan die wolkkonsole sal koppel.
  2. Maak instansiebesonderhede oop en klik Wysig.
  3. Kies die instansietoegangsomvang heel onder aan die bladsy Volle toegang tot alle Cloud API's.

    kiekie
    Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

  4. Stoor jou veranderinge en begin die instansie.

Sodra die VM klaar gelaai het, koppel aan dit via SSH en maak seker dat die verbinding sonder 'n fout plaasvind. Gebruik die opdrag:

gcloud alpha cloud-shell ssh

'n Suksesvolle verbinding lyk so iets
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

Ontplooi na GKE

Aangesien ons op elke moontlike manier daarna streef om heeltemal oor te skakel na IaC (Infrastruktuur as 'n kode), word ons docker-lêers in Git gestoor. Dit is aan die een kant. En ontplooiing in kubernetes word beskryf deur 'n yaml-lêer, wat slegs deur hierdie taak gebruik word, wat self ook soos kode is. Dit is van die ander kant af. Oor die algemeen bedoel ek, die plan is dit:

  1. Ons neem die waardes van die veranderlikes BOU_VERSIE en, opsioneel, die waardes van die veranderlikes wat deurgegee sal word ENV.
  2. Laai die docker-lêer van Git af.
  3. Genereer yaml vir ontplooiing.
  4. Ons laai albei hierdie lêers op via scp na die wolkkonsole.
  5. Ons bou 'n houer daar en druk dit in die Container-register
  6. Ons pas die laai-ontplooiingslêer toe op die kuber.

Kom ons wees meer spesifiek. Sodra ons begin praat het oor ENV, veronderstel dan dat ons die waardes van twee parameters moet deurgee: PARAM1 и PARAM2. Ons voeg hul taak vir ontplooiing by, tik - String parameter.

kiekie
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

Ons sal yaml genereer met 'n eenvoudige herleiding mis om te liasseer. Daar word natuurlik aanvaar dat jy in jou dockerfile het PARAM1 и PARAM2dat die vragnaam sal wees awesome app, en die saamgestelde houer met die toepassing van die gespesifiseerde weergawe lê in Houer register oppad gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONWaar $BUILD_VERSION is sopas gekies uit die aftreklys.

Spanlys

touch deploy.yaml
echo "apiVersion: apps/v1" >> deploy.yaml
echo "kind: Deployment" >> deploy.yaml
echo "metadata:" >> deploy.yaml
echo "  name: awesomeapp" >> deploy.yaml
echo "spec:" >> deploy.yaml
echo "  replicas: 1" >> deploy.yaml
echo "  selector:" >> deploy.yaml
echo "    matchLabels:" >> deploy.yaml
echo "      run: awesomeapp" >> deploy.yaml
echo "  template:" >> deploy.yaml
echo "    metadata:" >> deploy.yaml
echo "      labels:" >> deploy.yaml
echo "        run: awesomeapp" >> deploy.yaml
echo "    spec:" >> deploy.yaml
echo "      containers:" >> deploy.yaml
echo "      - name: awesomeapp" >> deploy.yaml
echo "        image: gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION:latest" >> deploy.yaml
echo "        env:" >> deploy.yaml
echo "        - name: PARAM1" >> deploy.yaml
echo "          value: $PARAM1" >> deploy.yaml
echo "        - name: PARAM2" >> deploy.yaml
echo "          value: $PARAM2" >> deploy.yaml

Jenkins-agent na aansluiting met behulp van gcloud alfa wolk-dop ssh interaktiewe modus is nie beskikbaar nie, so ons stuur opdragte na die wolkkonsole met behulp van die parameter --bevel.

Ons maak die tuislêer in die wolkkonsole skoon vanaf die ou dockerfile:

gcloud alpha cloud-shell ssh --command="rm -f Dockerfile"

Plaas die vars afgelaaide dockerfile in die tuisvouer van die wolkkonsole met behulp van scp:

gcloud alpha cloud-shell scp localhost:./Dockerfile cloudshell:~

Ons versamel, merk en stoot die houer na die houerregister:

gcloud alpha cloud-shell ssh --command="docker build -t awesomeapp-$BUILD_VERSION ./ --build-arg BUILD_VERSION=$BUILD_VERSION --no-cache"
gcloud alpha cloud-shell ssh --command="docker tag awesomeapp-$BUILD_VERSION gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"
gcloud alpha cloud-shell ssh --command="docker push gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"

Ons doen dieselfde met die ontplooiingslêer. Neem asseblief kennis dat die opdragte hieronder fiktiewe name gebruik van die groep waar die ontplooiing plaasvind (awsm-kluster) en projeknaam (awesome-projek), waar die groep geleë is.

gcloud alpha cloud-shell ssh --command="rm -f deploy.yaml"
gcloud alpha cloud-shell scp localhost:./deploy.yaml cloudshell:~
gcloud alpha cloud-shell ssh --command="gcloud container clusters get-credentials awsm-cluster --zone us-central1-c --project awesome-project && 
kubectl apply -f deploy.yaml"

Ons voer die taak uit, maak die konsole-uitset oop en hoop om die suksesvolle samestelling van die houer te sien.

kiekie
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

En dan die suksesvolle ontplooiing van die saamgestelde houer

kiekie
Ons skep 'n ontplooiingstaak in GKE sonder plugins, SMS of registrasie. Kom ons gaan loer onder Jenkins se baadjie in

Ek het die instelling doelbewus geïgnoreer Ingang. Om een ​​eenvoudige rede: sodra jy dit opgestel het werklading met 'n gegewe naam, sal dit operasioneel bly, maak nie saak hoeveel ontplooiings met hierdie naam jy uitvoer nie. Wel, in die algemeen is dit 'n bietjie buite die bestek van die geskiedenis.

In plaas van gevolgtrekkings

Al die bogenoemde stappe kon waarskynlik nie gedoen word nie, maar het eenvoudig een of ander plugin vir Jenkins, hul muuulion, geïnstalleer. Maar om een ​​of ander rede hou ek nie van plugins nie. Wel, meer presies, ek wend my tot hulle slegs uit desperaatheid.

En ek hou net daarvan om vir my 'n nuwe onderwerp op te tel. Die teks hierbo is ook 'n manier om die bevindinge te deel wat ek gemaak het terwyl ek die probleem opgelos het wat heel aan die begin beskryf is. Deel met diegene wat, soos hy, glad nie 'n verskriklike wolf in devops is nie. As my bevindinge ten minste iemand help, sal ek bly wees.

Bron: will.com

Voeg 'n opmerking