Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Et huet alles ugefaang wéi d'Teamleader vun engem vun eisen Entwécklungsteams eis gefrot huet hir nei Applikatioun ze testen, déi den Dag virdrun containeriséiert gouf. Ech hunn et gepost. No ronn 20 Minutte gouf eng Demande kritt fir d'Applikatioun ze aktualiséieren, well do eng ganz néideg Saach dobäi komm ass. ech erneiert. No nach e puer Stonnen ... bon, Dir kënnt roden wat duerno geschitt ass ...

Ech muss zouginn, ech sinn zimlech faul (hun ech dat net virdru zouginn? Nee?), a well d'Teamleaderen Zougang zu Jenkins hunn, an deem mir all CI/CD hunn, hunn ech geduecht: loosst hien deployéieren als vill wéi hie wëll! Ech erënnere mech un engem Witz: Gëff engem Mann e Fësch an hien iessen fir een Dag; rufft eng Persoun Fed an hie wäert säi ganzt Liewen Fed ginn. An gaangen spillt Tricken op der Aarbecht, wat fäeg wier e Container mat der Uwendung vun enger erfollegräicher gebauter Versioun an de Kuber z'installéieren an all Wäerter drop ze transferéieren ENV (Mäi Grousspapp, e Philolog, en englesche Enseignant an der Vergaangenheet, géif elo säi Fanger op säin Tempel dréinen a mech ganz expressiv no der Liesung vun dësem Saz kucken).

Also, an dëser Notiz wäert ech Iech soen wéi ech geléiert hunn:

  1. Dynamesch Update Aarbechtsplazen zu Jenkins aus der Aarbecht selwer oder vun aneren Aarbechtsplazen;
  2. Connectéiert mat der Wollekkonsole (Cloud Shell) vun engem Node mam Jenkins Agent installéiert;
  3. Deploy Workload op Google Kubernetes Engine.


Tatsächlech sinn ech selbstverständlech e bëssen onofhängeg. Et gëtt ugeholl datt Dir op d'mannst en Deel vun der Infrastruktur an der Google Cloud hutt, an dofir sidd Dir säi Benotzer an Dir hutt natierlech e GCP Kont. Mä dat ass net ëm wat dës Notiz geet.

Dëst ass mäi nächste Cheatsheet. Ech wëll nëmmen esou Noten an engem Fall schreiwen: Ech war mat engem Problem konfrontéiert, ech wousst am Ufank net wéi ech et soll léisen, d'Léisung gouf net fäerdeg googled, also hunn ech se an Deeler gegooglet a schlussendlech de Problem geléist. A fir datt ech an Zukunft, wann ech vergiessen, wéi ech et gemaach hunn, net méi Stéck fir Stéck erëm alles muss google an zesummen zesummestellen, schreiwen ech mir esou Cheat Sheets.

Verzichterklärung: 1. Den Notiz gouf "fir mech selwer" geschriwwen, fir d'Roll best practice gëllt net. Ech si frou d'Optiounen "et wier besser gewiescht et esou ze maachen" an de Kommentaren ze liesen.
2. Wann den ugewandten Deel vun der Notiz als Salz ugesi gëtt, dann, wéi all meng virdrun Notizen, ass dëst eng schwaach Salzléisung.

Dynamesch Aktualiséierung vun Aarbechtsastellungen zu Jenkins

Ech gesinn Är Fro vir: wat huet dynamesch Jobaktualiséierung domat ze dinn? Gitt de Wäert vum Stringparameter manuell an a gitt fort!

Ech äntweren: Ech si wierklech faul, ech hunn et net gär wann se beschwéieren: Misha, d'Deployment klappt, alles ass fort! Dir fänkt un ze kucken, an et gëtt en Tippfeeler am Wäert vun e puer Taskstartparameter. Dofir maachen ech léiwer alles sou effizient wéi méiglech ze maachen. Wann et méiglech ass ze verhënneren datt de Benotzer direkt Daten aginn andeems Dir amplaz eng Lëscht vu Wäerter gitt fir aus ze wielen, dann organiséieren ech d'Selektioun.

De Plang ass dëst: mir kreéieren eng Aarbecht zu Jenkins, an där mir, ier Dir lancéiert, eng Versioun aus der Lëscht auswielen, Wäerter spezifizéieren fir Parameteren, déi un de Container iwwerginn ginn ENV, da sammelt de Container an dréckt en an d'Container Registry. Dann vun do aus de Container lancéiert an cuber als Aarbechtspensum mat de Parameteren an der Aarbecht uginn.

Mir wäerten de Prozess net berücksichtegen fir eng Aarbecht zu Jenkins ze kreéieren an opzestellen, dëst ass off-topic. Mir huelen un datt d'Aufgab fäerdeg ass. Fir eng aktualiséiert Lëscht mat Versiounen ëmzesetzen, brauche mir zwou Saachen: eng existéierend Quelllëscht mat a priori gültege Versiounsnummeren an eng Variabel wéi Wielt Parameter an der Aufgab. An eisem Beispill loosst d'Variabel benannt ginn BUILD_VERSION, mir wäerten net am Detail op et ophalen. Awer loosst eis d'Quelllëscht méi no kucken.

Et ginn net esou vill Optiounen. Zwou Saache koumen direkt an de Kapp:

  • Benotzt d'Remote Access API déi Jenkins senge Benotzer ubitt;
  • Frot den Inhalt vum Remote Repository Dossier (an eisem Fall ass dëst JFrog Artifactory, wat net wichteg ass).

Jenkins Remote Access API

No der etabléierter exzellenter Traditioun, géif ech léiwer laang Erklärungen vermeiden.
Ech erlaben mir nëmmen eng fräi Iwwersetzung vun engem Stéck vum éischte Paragraph éischt Säit vun API Dokumentatioun:

Jenkins bitt eng API fir Remote Maschinn liesbaren Zougang zu senger Funktionalitéit. <...> Fernzougang gëtt an engem REST-ähnlechen Stil ugebueden. Dëst bedeit datt et keen eenzegen Entrée fir all Feature gëtt, mee amplaz eng URL wéi ".../api/", Wou"..." bedeit den Objet op deen d'API-Fäegkeeten applizéiert ginn.

An anere Wierder, wann d'Deployment Aufgab, iwwer déi mir am Moment schwätzen, verfügbar ass http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, da sinn d'API Pfeifen fir dës Aufgab verfügbar op http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Als nächst hu mir e Choix a wéi enger Form fir d'Ausgab ze kréien. Loosst eis op XML konzentréieren, well d'API nëmmen an dësem Fall Filteren erlaabt.

Loosst d'probéieren just eng Lëscht vun all Aarbecht leeft ze kréien. Mir sinn nëmmen un den Numm vun der Versammlung interesséiert (Unzeigenumm) a säi Resultat (Resultat):

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

Huet et geschafft?

Loosst eis elo nëmmen déi Runen filteren déi mam Resultat ophalen SUCCESS. Loosst eis d'Argument benotzen & ausschléissen an als Parameter wäerte mir et de Wee op e Wäert passéieren, deen net gläich ass SUCCESS. Jo Jo. Eng duebel negativ ass eng Ausso. Mir ausschléissen alles wat eis net interesséiert:

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

Screenshot vun der Lëscht vun erfollegräich
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Gutt, just fir de Spaass, loosst eis sécherstellen datt de Filter eis net täuscht huet (Filtere léien ni!) a weisen eng Lëscht vun "net erfollegräichen":

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

Screenshot vun der Lëscht vun net erfollegräichen
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Lëscht vu Versiounen aus engem Dossier op engem Fernserver

Et gëtt en zweete Wee fir eng Lëscht vu Versiounen ze kréien. Ech hunn et nach méi gär wéi Zougang zu der Jenkins API. Gutt, well wann d'Applikatioun erfollegräich gebaut gouf, heescht et datt se verpackt an am Repository am passenden Dossier gesat gouf. Wéi, e Repository ass d'Standardspäicherung vun funktionnéierende Versioune vun Uwendungen. Wéi. Gutt, loosst eis him froen wéi eng Versiounen am Stockage sinn. Mir krullen, grepen an awk den Ferndopper. Wann een un den Oneliner interesséiert ass, dann steet en ënner dem Spoiler.

Eng Zeil Kommando
Notéiert w.e.g. zwou Saachen: Ech passéieren d'Verbindungsdetailer am Header an ech brauch net all Versiounen aus dem Dossier, an ech wielt nëmmen déi, déi bannent engem Mount erstallt goufen. Ännert de Kommando fir Är Realitéiten a Bedierfnesser ze passen:

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[^/]+' )

Ariichten Aarbechtsplazen an Aarbecht Configuratioun Fichier am Jenkins

Mir hunn d'Quell vun der Lëscht vun de Versiounen erausfonnt. Loosst eis elo déi resultéierend Lëscht an d'Aufgab integréieren. Fir mech war déi offensichtlech Léisung e Schrëtt an der Applikatiounsbautask derbäi ze ginn. De Schrëtt dee géif ausgefouert ginn wann d'Resultat "Erfolleg" wier.

Öffnen d'Assemblée Task Astellungen a scrollt bis ganz ënnen. Klickt op d'Knäppercher: Add Build Schrëtt -> Conditional Schrëtt (eenzel). An de Schrëtt Astellunge wielt d'Konditioun Aktuelle Baustatus, setzen de Wäert SUCCESS, d'Aktioun ze maachen wann et erfollegräich ass Run Shell Kommando.

An elo de Spaass Deel. Jenkins späichert Aarbechtskonfiguratiounen an Dateien. Am XML-Format. Laanscht de Wee http://путь-до-задания/config.xml Deementspriechend kënnt Dir d'Konfiguratiounsdatei eroflueden, se wéi néideg änneren an zréck setzen wou Dir se krut.

Denkt drun, mir hu uewen ausgemaach datt mir e Parameter fir d'Lëscht vun de Versiounen erstellen BUILD_VERSION?

Loosst eis d'Konfiguratiounsdatei eroflueden a kucken dobannen. Just fir sécher ze stellen datt de Parameter op der Plaz ass a vum gewënschten Typ.

Screenshot ënner Spoiler.

Är config.xml Fragment soll d'selwecht ausgesinn. Ausser datt d'Inhalter vum Choix-Element nach feelen
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Bass du secher? Dat ass et, loosst eis e Skript schreiwen dat ausgefouert gëtt wann de Bau erfollegräich ass.
De Skript kritt eng Lëscht vu Versiounen, luet d'Konfiguratiounsdatei erof, schreift d'Lëscht vun de Versiounen an der Plaz déi mir brauchen, a setzt se dann zréck. Jo. Dat ass richteg. Schreift eng Lëscht vu Versiounen am XML op der Plaz wou et schonn eng Lëscht vu Versioune gëtt (wäert an Zukunft sinn, nom éischte Start vum Skript). Ech weess, datt et nach ëmmer hefteg Fans vu reguläre Ausdréck op der Welt sinn. Ech gehéieren net zu hinnen. Weg installéieren xmlstarler op d'Maschinn wou d'Konfiguratioun geännert gëtt. Et schéngt mir datt dëst net sou e grousse Präis ass ze bezuelen fir XML z'änneren mat sed ze vermeiden.

Ënnert dem Spoiler presentéieren ech de Code deen déi uewe genannte Sequenz a senger Ganzheet ausféiert.

Schreift eng Lëscht vu Versiounen aus engem Dossier um Fernserver an d'Konfiguratioun

#!/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

Wann Dir léiwer d'Optioun fir Versioune vu Jenkins ze kréien an Dir sidd esou faul wéi ech, dann ass ënner dem Spoiler dee selwechte Code, awer eng Lëscht vu Jenkins:

Schreift eng Lëscht vu Versioune vu Jenkins op d'Konfiguratioun
Halt just dëst am Kapp: mäi Versammlungsnumm besteet aus enger Sequenznummer an enger Versiounsnummer, getrennt vun engem Colon. Deementspriechend schneit awk den onnéidege Deel of. Fir Iech selwer, ännert dës Linn fir Äre Besoinen ze passen.

#!/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

An der Theorie, wann Dir de Code getest hutt geschriwwen op Basis vun den Beispiller hei uewen, da sollt Dir an der Deployment Task schonn eng Dropdown-Lëscht mat Versiounen hunn. Et ass wéi am Screenshot ënner dem Spoiler.

Korrekt ofgeschloss Lëscht vun Versiounen
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Wann alles geschafft huet, kopéiert-paste de Skript an Run Shell Kommando a späichert Ännerungen.

Verbindung mat Cloud Shell

Mir hunn Sammler a Container. Mir benotzen Ansible als eisen Uwendungsliwwerungsinstrument a Konfiguratiounsmanager. Deementspriechend, wann et drëm geet Container ze bauen, kommen dräi Optiounen am Kapp: Installéiert Docker am Docker, installéiert Docker op enger Maschinn déi Ansible leeft, oder baut Container an enger Cloud Konsole. Mir hunn eis ausgemaach fir iwwer Plugins fir Jenkins an dësem Artikel ze bleiwen. Erënneren?

Ech hunn décidéiert: gutt, well Container "aus der Këscht" kënnen an der Wollekkonsole gesammelt ginn, firwat dann beméien? Halt et propper, richteg? Ech wëll Jenkins Container an der Wollek Konsol sammelen, an dann starten se an de Cuber vun do. Ausserdeem huet Google ganz räich Kanäl bannent senger Infrastruktur, déi e positiven Effekt op d'Geschwindegkeet vum Détachement hunn.

Fir mat der Cloud Konsole ze verbannen, braucht Dir zwou Saachen: gcloud an Zougang Rechter op Google Cloud API fir d'VM Instanz mat där déi selwecht Verbindung gemaach gëtt.

Fir déi, déi plangen ze verbannen guer net vu Google Cloud
Google erlaabt d'Méiglechkeet fir interaktiv Autorisatioun a senge Servicer auszeschalten. Dëst erlaabt Iech mat der Konsole souguer vun enger Kaffismaschinn ze verbannen, wann et *nix leeft an eng Konsole selwer huet.

Wann et néideg ass fir mech dëst Thema méi am Detail am Kader vun dëser Notiz ze decken, schreift an de Kommentaren. Wa mir genuch Stëmme kréien, schreiwen ech en Update iwwer dëst Thema.

Deen einfachste Wee fir Rechter ze ginn ass duerch de Webinterface.

  1. Stop d'VM Instanz vun där Dir duerno mat der Cloud Konsole verbënnt.
  2. Open Instanz Detailer a klickt ofstëmmt.
  3. Ganz ënnen op der Säit, wielt den Instanz Zougang Ëmfang Voll Zougang zu all Cloud APIen.

    Screenshot
    Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

  4. Späichert Är Ännerungen a lancéiert d'Instanz.

Wann de VM fäerdeg ass mat der Luede, verbënnt et iwwer SSH a gitt sécher datt d'Verbindung ouni Feeler geschitt. Benotzt de Kommando:

gcloud alpha cloud-shell ssh

Eng erfollegräich Verbindung gesäit sou eppes aus
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Deploy op GKE

Well mir probéieren op all méiglech Manéier komplett op IaC (Infrastruktur als Code) ze wiesselen, ginn eis Docker Dateien a Git gespäichert. Dëst ass op der enger Säit. An Deployment an kubernetes gëtt vun enger Yaml Datei beschriwwen, déi nëmme vun dëser Aufgab benotzt gëtt, déi selwer och wéi Code ass. Dëst ass vun der anerer Säit. Am Allgemengen, ech mengen, de Plang ass dëst:

  1. Mir huelen d'Wäerter vun de Variablen BUILD_VERSION an, optional, d'Wäerter vun de Variabelen déi duerchgefouert ginn ENV.
  2. Luet den Docker-Datei vum Git erof.
  3. Generéiere yaml fir Deployment.
  4. Mir lueden déi zwee Dateien iwwer scp op d'Cloudkonsole erop.
  5. Mir bauen do e Container an drécken en an d'Container Registry
  6. Mir applizéieren d'Laaschtdeploymentdatei op de Cuber.

Loosst eis méi spezifesch sinn. Eemol hu mir ugefaang iwwer ze schwätzen ENV, dann ugeholl mir mussen d'Wäerter vun zwee Parameteren passéieren: PARAM 1 и PARAM 2. Mir addéieren hir Aufgab fir d'Deployment, Typ - String Parameter.

Screenshot
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Mir generéieren yaml mat enger einfacher Viruleedung Echo ze Fichier. Et gëtt ugeholl, natierlech, datt Dir an Ärem Dockerfile hutt PARAM 1 и PARAM 2datt d'Laascht Numm gëtt genialapp, an de versammelt Container mat der Uwendung vun der spezifizéierter Versioun läit an Container Registry ënnerwee gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONwou $BUILD_VERSION gouf just aus der Dropdown-Lëscht ausgewielt.

Team Oplëschtung

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 no Verbindung benotzt gcloud Alpha Cloud-Shell ssh Den interaktive Modus ass net verfügbar, also schécken mir Kommandoen op d'Wollekkonsole mam Parameter -- Kommando.

Mir botzen den Heemdossier an der Cloud Konsole vun der aler Dockerfile:

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

Setzt déi frësch erofgeluede Dockerfile am Dossier doheem vun der Cloudkonsole mat scp:

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

Mir sammelen, taggen a drécken de Container an d'Container Registry:

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"

Mir maachen datselwecht mat der Deploymentdatei. Notéiert w.e.g. datt d'Befehle hei ënnen fiktiv Nimm vum Cluster benotzen, wou d'Deployment geschitt (awsm-cluster) a Projet Numm (genial-Projet), wou de Cluster läit.

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"

Mir lafen d'Aufgab, öffnen d'Konsolausgang an hoffen déi erfollegräich Versammlung vum Container ze gesinn.

Screenshot
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

An dann den erfollegräichen Asaz vum zesummegebaute Container

Screenshot
Mir kreéieren eng Deployment Task am GKE ouni Plugins, SMS oder Umeldung. Loosst eis e Bléck ënner dem Jenkins senger Jackett maachen

Ech hunn d'Astellung bewosst ignoréiert Ingress. Aus engem einfache Grond: eemol Dir et ageriicht Aarbechtspensum mat engem Virnumm, et bleift operationell, egal wéivill Détachementer mat dësem Numm Dir Leeschtung. Gutt, am Allgemengen ass dëst e bëssen iwwer d'Geschicht vun der Geschicht.

Amplaz vu Conclusiounen

All déi uewe genannte Schrëtt konnten wahrscheinlech net gemaach ginn, awer einfach e puer Plugin fir Jenkins installéiert, hir muuulion. Awer aus irgendege Grënn hunn ech Plugins net gär. Gutt, méi präzis, ech huelen se nëmmen aus Verzweiflung.

An ech wëll just en neit Thema fir mech ophuelen. Den Text hei uewen ass och e Wee fir d'Erkenntnisser ze deelen, déi ech gemaach hunn, während ech de Problem am Ufank beschriwwen léisen. Deelt mat deenen, déi, wéi hien, guer net e schreckleche Wollef an Devops sinn. Wann meng Erkenntnisser op d'mannst een hëllefen, wäert ech frou sinn.

Source: will.com

Setzt e Commentaire