Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Dechreuodd y cyfan pan ofynnodd arweinydd tîm un o'n timau datblygu i ni brofi eu cais newydd, a oedd wedi'i amwys y diwrnod cynt. Fe'i postiais. Ar ôl tua 20 munud, derbyniwyd cais i ddiweddaru'r cais, oherwydd bod peth angenrheidiol iawn wedi'i ychwanegu yno. adnewyddais. Ar ôl cwpl o oriau arall... wel, gallwch chi ddyfalu beth ddechreuodd ddigwydd nesaf...

Rhaid i mi gyfaddef, rwy'n eithaf diog (wnes i ddim cyfaddef hyn yn gynharach? Na?), ac o ystyried y ffaith bod gan arweinwyr tîm fynediad i Jenkins, lle mae gennym ni i gyd CI/CD, meddyliais: gadewch iddo ddefnyddio fel cymaint ag y mae eisiau! Cofiais jôc: rho bysgodyn i ddyn, a bydd yn bwyta am ddiwrnod; ffoniwch berson yn Fed a bydd yn cael ei fwydo ar hyd ei oes. Ac aeth chwarae triciau yn y swydd, a fyddai'n gallu defnyddio cynhwysydd sy'n cynnwys cymhwyso unrhyw fersiwn a adeiladwyd yn llwyddiannus i Kuber a throsglwyddo unrhyw werthoedd iddo ENV (byddai fy nhaid, ieithegydd, athro Saesneg yn y gorffennol, yn awr yn troelli ei fys at ei deml ac yn edrych arnaf yn llawn mynegiant ar ôl darllen y frawddeg hon).

Felly, yn y nodyn hwn byddaf yn dweud wrthych sut y dysgais:

  1. Diweddaru swyddi yn Jenkins yn ddeinamig o'r swydd ei hun neu o swyddi eraill;
  2. Cysylltwch â'r consol cwmwl (Cloud shell) o nod gyda'r asiant Jenkins wedi'i osod;
  3. Defnyddio llwyth gwaith i Google Kubernetes Engine.


A dweud y gwir, rydw i, wrth gwrs, yn bod braidd yn annidwyll. Tybir bod gennych o leiaf ran o'r seilwaith yn y cwmwl Google, ac, felly, chi yw ei ddefnyddiwr ac, wrth gwrs, mae gennych gyfrif GCP. Ond nid dyna hanfod y nodyn hwn.

Dyma fy nhaflen dwyllo nesaf. Dim ond mewn un achos rydw i eisiau ysgrifennu nodiadau o'r fath: roeddwn i'n wynebu problem, i ddechrau doeddwn i ddim yn gwybod sut i'w datrys, nid oedd yr ateb yn barod gyda googled, felly fe wnes i ei googled mewn rhannau ac yn y pen draw datrys y broblem. Ac fel yn y dyfodol, pan fyddaf yn anghofio sut y gwnes i hynny, nid oes rhaid i mi google popeth eto fesul darn a'i lunio gyda'i gilydd, rwy'n ysgrifennu taflenni twyllo o'r fath i mi fy hun.

Ymwadiad: 1. Ysgrifennwyd y nodyn “i mi fy hun”, ar gyfer y rôl arfer gorau ddim yn berthnasol. Rwy’n hapus i ddarllen yr opsiynau “byddai wedi bod yn well ei wneud fel hyn” yn y sylwadau.
2. Os yw rhan gymhwysol y nodyn yn cael ei ystyried yn halen, yna, fel fy holl nodiadau blaenorol, mae'r un hwn yn doddiant halen gwan.

Diweddaru gosodiadau swyddi yn Jenkins yn ddeinamig

Rwy'n rhagweld eich cwestiwn: beth sydd gan ddiweddaru swyddi deinamig i'w wneud ag ef? Rhowch werth y paramedr llinyn â llaw ac i ffwrdd â chi!

Rwy'n ateb: Rwy'n ddiog iawn, nid wyf yn ei hoffi pan fyddant yn cwyno: Misha, mae'r lleoliad yn chwalu, mae popeth wedi diflannu! Rydych chi'n dechrau edrych, ac mae teipio yng ngwerth rhyw baramedr lansio tasg. Felly, mae'n well gennyf wneud popeth mor effeithlon â phosibl. Os yw'n bosibl atal y defnyddiwr rhag mewnbynnu data yn uniongyrchol trwy roi yn lle hynny restr o werthoedd i ddewis ohonynt, yna rwy'n trefnu'r dewis.

Y cynllun yw hyn: rydym yn creu swydd yn Jenkins, lle gallem, cyn ei lansio, ddewis fersiwn o'r rhestr, nodi gwerthoedd ar gyfer paramedrau a drosglwyddir i'r cynhwysydd trwy ENV, yna mae'n casglu'r cynhwysydd ac yn ei wthio i mewn i'r Gofrestrfa Cynhwysydd. Yna oddi yno y cynhwysydd yn cael ei lansio mewn ciwb fel llwyth gwaith gyda'r paramedrau a nodir yn y swydd.

Ni fyddwn yn ystyried y broses o greu a sefydlu swydd yn Jenkins, nid yw hyn yn bwnc llosg. Byddwn yn cymryd yn ganiataol bod y dasg yn barod. I weithredu rhestr wedi'i diweddaru gyda fersiynau, mae angen dau beth arnom: rhestr ffynonellau sy'n bodoli eisoes gyda rhifau fersiwn dilys a priori a newidyn tebyg Paramedr dewis yn y dasg. Yn ein hesiampl, gadewch i'r newidyn gael ei enwi BUILD_VERSION, ni a drigwn arno yn fanwl. Ond gadewch i ni edrych yn agosach ar y rhestr ffynonellau.

Nid oes cymaint â hynny o opsiynau. Daeth dau beth i’r meddwl ar unwaith:

  • Defnyddiwch yr API Mynediad o Bell y mae Jenkins yn ei gynnig i'w ddefnyddwyr;
  • Gofynnwch am gynnwys y ffolder ystorfa bell (yn ein hachos ni dyma JFrog Artifactory, nad yw'n bwysig).

Jenkins API mynediad o bell

Yn ôl y traddodiad rhagorol sefydledig, byddai'n well gennyf osgoi esboniadau hirfaith.
Dim ond cyfieithiad rhad ac am ddim o ddarn o'r paragraff cyntaf a ganiateir i mi fy hun tudalen gyntaf dogfennaeth API:

Mae Jenkins yn darparu API ar gyfer mynediad o bell y gellir ei ddarllen gan beiriant i'w ymarferoldeb. <…> Cynigir mynediad o bell mewn arddull tebyg i REST. Mae hyn yn golygu nad oes un pwynt mynediad i'r holl nodweddion, ond yn hytrach URL fel ".../api/", Ble"..." yn golygu'r gwrthrych y mae galluoedd API yn cael eu cymhwyso iddo.

Mewn geiriau eraill, os yw'r dasg lleoli yr ydym yn sôn amdani ar hyn o bryd ar gael yn http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, yna mae'r chwibanau API ar gyfer y dasg hon ar gael yn http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Nesaf, mae gennym ddewis ym mha ffurf i dderbyn yr allbwn. Gadewch i ni ganolbwyntio ar XML, gan fod yr API yn caniatáu hidlo yn yr achos hwn yn unig.

Gadewch i ni geisio cael rhestr o'r holl rediadau swyddi. Dim ond enw'r cynulliad sydd gennym ni ddiddordeb (arddangosEnw) a'i ganlyniad (arwain):

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

A wnaeth hyn weithio allan?

Nawr gadewch i ni hidlo dim ond y rhediadau hynny sy'n arwain at y canlyniad LLWYDDIANT. Gadewch i ni ddefnyddio'r ddadl &eithrio ac fel paramedr byddwn yn ei basio y llwybr i werth nad yw'n hafal i LLWYDDIANT. Ydy Ydy. Mae negydd dwbl yn ddatganiad. Rydym yn eithrio popeth nad yw o ddiddordeb i ni:

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

Ciplun o'r rhestr o rai llwyddiannus
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Wel, dim ond am hwyl, gadewch i ni sicrhau na wnaeth yr hidlydd ein twyllo (nid yw hidlwyr byth yn dweud celwydd!) Ac arddangos rhestr o rai “aflwyddiannus”:

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

Ciplun o'r rhestr o rai nad ydynt yn llwyddiannus
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Rhestr o fersiynau o ffolder ar weinydd pell

Mae yna ail ffordd i gael rhestr o fersiynau. Rwy'n ei hoffi hyd yn oed yn fwy na chyrchu API Jenkins. Wel, oherwydd os cafodd y cais ei adeiladu'n llwyddiannus, mae'n golygu ei fod wedi'i becynnu a'i roi yn y storfa yn y ffolder priodol. Fel, storfa yw storfa ddiofyn fersiynau gweithio o gymwysiadau. Hoffi. Wel, gadewch i ni ofyn iddo pa fersiynau sydd yn y storfa. Byddwn yn cyrlio, grep a deffro'r ffolder anghysbell. Os oes gan unrhyw un ddiddordeb yn yr oneliner, yna mae o dan y spoiler.

Gorchymyn un llinell
Sylwch ar ddau beth: Rwy'n pasio'r manylion cysylltiad yn y pennawd ac nid oes angen yr holl fersiynau o'r ffolder arnaf, a dewisaf y rhai a grëwyd o fewn mis yn unig. Golygwch y gorchymyn i weddu i'ch realiti a'ch anghenion:

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

Sefydlu swyddi a ffeil ffurfweddu swyddi yn Jenkins

Fe wnaethom gyfrifo ffynhonnell y rhestr o fersiynau. Gadewch i ni nawr ymgorffori'r rhestr ganlyniadol yn y dasg. I mi, yr ateb amlwg oedd ychwanegu cam yn y dasg adeiladu cais. Y cam a fyddai'n cael ei weithredu pe bai'r canlyniad yn "llwyddiant".

Agorwch y gosodiadau tasg cydosod a sgroliwch i'r gwaelod iawn. Cliciwch ar y botymau: Ychwanegu cam adeiladu -> Cam amodol (sengl). Yn y gosodiadau cam, dewiswch y cyflwr Statws adeiladu presennol, gosodwch y gwerth LLWYDDIANT, y weithred i'w chyflawni os bydd yn llwyddiannus Rhedeg gorchymyn cragen.

Ac yn awr y rhan hwyliog. Mae Jenkins yn storio ffurfweddiadau swyddi mewn ffeiliau. Mewn fformat XML. Ar hyd y ffordd http://путь-до-задания/config.xml Yn unol â hynny, gallwch chi lawrlwytho'r ffeil ffurfweddu, ei golygu yn ôl yr angen a'i rhoi yn ôl lle cawsoch chi.

Cofiwch, fe wnaethom gytuno uchod y byddwn yn creu paramedr ar gyfer y rhestr o fersiynau BUILD_VERSION?

Gadewch i ni lawrlwytho'r ffeil ffurfweddu ac edrych y tu mewn iddo. Dim ond i wneud yn siŵr bod y paramedr yn ei le ac o'r math a ddymunir.

Sgrinlun o dan spoiler.

Dylai eich darn config.xml edrych yr un peth. Ac eithrio bod cynnwys yr elfen dewisiadau ar goll eto
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Wyt ti'n siwr? Dyna ni, gadewch i ni ysgrifennu sgript a fydd yn cael ei gweithredu os bydd y gwaith adeiladu yn llwyddiannus.
Bydd y sgript yn derbyn rhestr o fersiynau, yn lawrlwytho'r ffeil ffurfweddu, yn ysgrifennu'r rhestr o fersiynau ynddo yn y lle sydd ei angen arnom, ac yna'n ei roi yn ôl. Oes. Mae hynny'n iawn. Ysgrifennwch restr o fersiynau yn XML yn y man lle mae rhestr o fersiynau eisoes (bydd yn y dyfodol, ar ôl lansiad cyntaf y sgript). Rwy'n gwybod bod yna gefnogwyr ffyrnig o ymadroddion rheolaidd yn y byd o hyd. Nid wyf yn perthyn iddynt. Os gwelwch yn dda gosod xmlstarler i'r peiriant lle bydd y ffurfwedd yn cael ei olygu. Mae'n ymddangos i mi nad yw hwn yn bris mor fawr i'w dalu i osgoi golygu XML gan ddefnyddio sed.

O dan y sbwyliwr, rwy'n cyflwyno'r cod sy'n perfformio'r dilyniant uchod yn ei gyfanrwydd.

Ysgrifennwch restr o fersiynau o ffolder ar y gweinydd pell i'r ffurfwedd

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

Os yw'n well gennych yr opsiwn o gael fersiynau gan Jenkins a'ch bod mor ddiog â mi, yna o dan y spoiler yr un cod, ond rhestr gan Jenkins:

Ysgrifennwch restr o fersiynau o Jenkins i'r ffurfwedd
Cadwch hyn mewn cof: mae fy enw cynulliad yn cynnwys rhif dilyniant a rhif fersiwn, wedi'u gwahanu gan colon. Yn unol â hynny, mae awk yn torri'r rhan ddiangen i ffwrdd. I chi'ch hun, newidiwch y llinell hon i weddu i'ch anghenion.

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

Mewn theori, os ydych wedi profi'r cod a ysgrifennwyd yn seiliedig ar yr enghreifftiau uchod, yna yn y dasg lleoli dylai fod gennych eisoes gwymplen gyda fersiynau. Mae fel yn y screenshot o dan y spoiler.

Rhestr o fersiynau wedi'u cwblhau'n gywir
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Os oedd popeth yn gweithio, yna copïwch a gludwch y sgript i mewn Rhedeg gorchymyn cragen ac arbed newidiadau.

Cysylltu â chragen Cloud

Mae gennym gasglwyr mewn cynwysyddion. Rydym yn defnyddio Ansible fel ein hofferyn cyflwyno cais a rheolwr cyfluniad. Yn unol â hynny, o ran adeiladu cynwysyddion, mae tri opsiwn yn dod i'r meddwl: gosod Docker in Docker, gosod Docker ar beiriant sy'n rhedeg Ansible, neu adeiladu cynwysyddion mewn consol cwmwl. Fe wnaethom gytuno i aros yn dawel am ategion i Jenkins yn yr erthygl hon. Cofiwch?

Penderfynais: wel, gan y gellir casglu cynwysyddion “allan o'r bocs” yn y consol cwmwl, yna pam trafferthu? Cadwch hi'n lân, iawn? Rwyf am gasglu cynwysyddion Jenkins yn y consol cwmwl, ac yna eu lansio i'r ciwb o'r fan honno. Ar ben hynny, mae gan Google sianeli cyfoethog iawn o fewn ei seilwaith, a fydd yn cael effaith fuddiol ar gyflymder y defnydd.

I gysylltu â'r consol cwmwl, mae angen dau beth arnoch chi: cloud a hawliau mynediad i Google Cloud API ar gyfer yr enghraifft VM y bydd yr un cysylltiad yn cael ei wneud ohono.

I'r rhai sy'n bwriadu cysylltu nid o Google cwmwl o gwbl
Mae Google yn caniatáu'r posibilrwydd o analluogi awdurdodiad rhyngweithiol yn ei wasanaethau. Bydd hyn yn caniatáu ichi gysylltu â'r consol hyd yn oed o beiriant coffi, os yw'n rhedeg * nix a bod ganddo gonsol ei hun.

Os oes angen imi ymdrin â'r mater hwn yn fanylach o fewn fframwaith y nodyn hwn, ysgrifennwch y sylwadau. Os cawn ddigon o bleidleisiau, ysgrifennaf ddiweddariad ar y pwnc hwn.

Y ffordd hawsaf o roi hawliau yw trwy'r rhyngwyneb gwe.

  1. Stopiwch yr enghraifft VM y byddwch wedyn yn cysylltu â'r consol cwmwl ohono.
  2. Agor Manylion Enghreifftiol a chliciwch diwygio.
  3. Ar waelod y dudalen, dewiswch y cwmpas mynediad enghreifftiol Mynediad llawn i bob API Cloud.

    Ciplun
    Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

  4. Arbedwch eich newidiadau a lansiwch yr enghraifft.

Unwaith y bydd y VM wedi gorffen llwytho, cysylltwch ag ef trwy SSH a gwnewch yn siŵr bod y cysylltiad yn digwydd heb wall. Defnyddiwch y gorchymyn:

gcloud alpha cloud-shell ssh

Mae cysylltiad llwyddiannus yn edrych rhywbeth fel hyn
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Anfon i GKE

Gan ein bod yn ymdrechu ym mhob ffordd bosibl i newid yn llwyr i IaC (Isadeiledd fel Cod), mae ein ffeiliau docwyr yn cael eu storio yn Git. Mae hyn ar y naill law. A disgrifir lleoli mewn kubernetes gan ffeil yaml, a ddefnyddir gan y dasg hon yn unig, sydd ei hun hefyd fel cod. Mae hyn o'r ochr arall. Yn gyffredinol, yr wyf yn golygu, y cynllun yw hyn:

  1. Rydym yn cymryd gwerthoedd y newidynnau BUILD_VERSION ac, yn ddewisol, gwerthoedd y newidynnau a drosglwyddir drwodd ENV.
  2. Dadlwythwch y dockerfile o Git.
  3. Cynhyrchu yaml i'w ddefnyddio.
  4. Rydyn ni'n uwchlwytho'r ddwy ffeil hyn trwy scp i'r consol cwmwl.
  5. Rydyn ni'n adeiladu cynhwysydd yno ac yn ei wthio i mewn i'r gofrestr Cynhwysydd
  6. Rydym yn cymhwyso'r ffeil lleoli llwyth i'r ciwb.

Gadewch i ni fod yn fwy penodol. Unwaith i ni ddechrau siarad am ENV, yna mae'n debyg bod angen i ni basio gwerthoedd dau baramedr: PARAM1 и PARAM2. Rydym yn ychwanegu eu tasg ar gyfer defnyddio, math - Paramedr Llinynnol.

Ciplun
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Byddwn yn cynhyrchu yaml gydag ailgyfeirio syml colli i ffeilio. Tybir, wrth gwrs, fod gennych chi yn eich dockerfile PARAM1 и PARAM2mai enw'r llwyth fydd app anhygoel, ac mae'r cynhwysydd sydd wedi'i ymgynnull gyda chymhwysiad y fersiwn benodedig yn gorwedd ynddo Cofrestrfa cynhwysydd ar y ffordd gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONlle $BUILD_VERSION newydd ei ddewis o'r gwymplen.

Rhestr tîm

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

Asiant Jenkins ar ôl cysylltu gan ddefnyddio gcloud alffa cwmwl-cragen ssh nid yw modd rhyngweithiol ar gael, felly rydym yn anfon gorchmynion i'r consol cwmwl gan ddefnyddio'r paramedr --gorchymyn.

Rydyn ni'n glanhau'r ffolder cartref yn y consol cwmwl o'r hen dockerfile:

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

Rhowch y dockerfile sydd newydd ei lawrlwytho yn ffolder cartref consol y cwmwl gan ddefnyddio scp:

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

Rydym yn casglu, tagio a gwthio'r cynhwysydd i'r gofrestr Cynhwysydd:

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"

Rydym yn gwneud yr un peth gyda'r ffeil lleoli. Sylwch fod y gorchmynion isod yn defnyddio enwau ffug y clwstwr lle mae'r gosodiad yn digwydd (awsm-clwstwr) ac enw'r prosiect (anhygoel-prosiect), lle mae'r clwstwr wedi'i leoli.

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"

Rydyn ni'n rhedeg y dasg, yn agor allbwn y consol ac yn gobeithio gweld y cynhwysydd yn cael ei gydosod yn llwyddiannus.

Ciplun
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Ac yna defnyddio'r cynhwysydd wedi'i ymgynnull yn llwyddiannus

Ciplun
Rydym yn creu tasg lleoli yn GKE heb ategion, SMS na chofrestriad. Gadewch i ni gael cipolwg o dan siaced Jenkins

Anwybyddais y gosodiad yn fwriadol Mynd i mewn. Am un rheswm syml: ar ôl i chi ei sefydlu llwyth gwaith gydag enw penodol, bydd yn parhau i fod yn weithredol, ni waeth faint o leoliadau gyda'r enw hwn rydych chi'n eu perfformio. Wel, yn gyffredinol, mae hyn ychydig y tu hwnt i gwmpas hanes.

Yn lle casgliadau

Mae'n debyg na allai'r holl gamau uchod fod wedi'u gwneud, ond yn syml wedi gosod rhywfaint o ategyn ar gyfer Jenkins, eu muuulion. Ond am ryw reswm dydw i ddim yn hoffi ategion. Wel, yn fwy manwl gywir, dim ond allan o anobaith yr wyf yn troi atynt.

Ac rydw i'n hoffi codi pwnc newydd i mi. Mae'r testun uchod hefyd yn ffordd o rannu'r canfyddiadau a wneuthum wrth ddatrys y broblem a ddisgrifiwyd ar y cychwyn cyntaf. Rhannwch gyda'r rhai nad ydyn nhw, fel yntau, yn flaidd enbyd o gwbl mewn devops. Os bydd fy nghanfyddiadau yn helpu rhywun o leiaf, byddaf yn hapus.

Ffynhonnell: hab.com

Ychwanegu sylw