Piv txwv tias koj tuaj rau qhov project tshiab, thiab lawv hais rau koj: βpeb muaj Infrastructure li Code". Hauv kev muaj tiag nws hloov tawm Infrastructure li bash keeb kwm los yog piv txwv Cov ntaub ntawv raws li keeb kwm bash. Qhov no yog qhov xwm txheej tiag tiag, piv txwv li, ib qho xwm txheej zoo sib xws tau piav qhia los ntawm Denis Lysenko hauv kev hais lus Yuav ua li cas hloov tag nrho cov infrastructure thiab pib pw tsaug zog, nws hais li cas lawv tau txais kev sib koom ua ke rau qhov project los ntawm keeb kwm bash.
Nrog qee qhov kev ntshaw, peb tuaj yeem hais qhov ntawd Infrastructure li bash keeb kwm qhov no yog li code:
kev yug dua tshiab: Koj tuaj yeem nqa keeb kwm bash, khiav cov lus txib los ntawm qhov ntawd, thiab koj tuaj yeem, los ntawm txoj kev, tau txais kev teeb tsa ua haujlwm raws li qhov tso tawm.
versioning: koj paub leej twg tuaj thiab lawv tau ua dab tsi, dua, nws tsis yog qhov tseeb tias qhov no yuav coj koj mus rau kev teeb tsa ua haujlwm ntawm qhov tawm.
keeb kwm: zaj dab neeg ntawm leej twg ua dab tsi. tsuas yog koj yuav tsis tuaj yeem siv nws yog tias koj poob lub server.
Kuv yuav ua li cas?
Infrastructure li Code
Txawm li cas los txawv txawv li Infrastructure li bash keeb kwm koj tuaj yeem rub nws los ntawm pob ntseg Infrastructure li Code, tab sis thaum peb xav ua ib yam dab tsi nyuaj dua li qhov zoo qub LAMP server, peb yuav los xaus tias cov cai no yuav tsum tau hloov kho, hloov pauv, txhim kho. Tom ntej no peb xav xav txog cov parallels ntawm Infrastructure li Code thiab kev txhim kho software.
Nws tsis zoo li raws li kev tso dag, tias admins haus npias, hloov passwords, thiab ib qho analogue ntawm khub programming. Cov. ob tug engineers zaum ntawm ib lub computer, ib lub keyboard thiab pib teeb tsa koj cov infrastructure ua ke: teeb tsa lub server, sau lub luag haujlwm Ansible, thiab lwm yam. Nws suab zoo, tab sis nws tsis ua haujlwm rau peb. Tab sis tshwj xeeb ntawm qhov kev coj ua no tau ua haujlwm. Ib tus neeg ua haujlwm tshiab tuaj, nws tus kws cob qhia yuav ua haujlwm tiag tiag nrog nws, ua haujlwm thiab hloov kev paub.
Lwm qhov tshwj xeeb yog qhov xwm txheej hu. Thaum muaj teeb meem, ib pab pawg ntawm cov neeg ua haujlwm thiab cov neeg koom nrog sib sau ua ke, ib tus thawj coj raug xaiv, uas qhia nws lub vijtsam thiab hais lub tsheb ciav hlau ntawm kev xav. Lwm tus neeg koom ua raws li tus thawj coj txoj kev xav, soj ntsuam ntawm kev dag ntxias los ntawm lub console, xyuas tias lawv tsis tau plam ib txoj kab hauv lub cav, thiab kawm txog yam tshiab ntawm lub kaw lus. Txoj kev no tau ua haujlwm ntau dua li tsis tau.
Saib Xyuas Cai
Subjectively, nws tau zoo dua los tshaj tawm kev paub txog kev tsim kho vaj tse thiab nws ua haujlwm li cas siv kev tshuaj xyuas cov cai:
Infrastructure yog piav qhia los ntawm code nyob rau hauv lub repository.
Qhov tseem ceeb ntawm no yog tias cov neeg tshuaj xyuas tau xaiv ib qho los ntawm ib qho, raws li lub sijhawm teem tseg, piv txwv li. nrog qee qhov kev tshwm sim koj yuav nce mus rau hauv ib qho tshiab ntawm cov txheej txheem.
code style
Thaum lub sij hawm, squabbles pib tshwm thaum lub sij hawm xyuas, vim hais tias ... Cov neeg tshuaj xyuas muaj lawv tus kheej style thiab kev sib hloov ntawm cov neeg tshuaj xyuas tau muab lawv sib txawv: 2 qhov chaw lossis 4, camelCase lossis snake_case. Nws tsis tuaj yeem ua qhov no tam sim ntawd.
Thawj lub tswv yim yog xav kom siv linter, tom qab tag nrho, txhua leej txhua tus yog engineer, txhua leej txhua tus yog ntse. Tab sis txawv editors, OS, tsis yooj yim
Qhov no tau hloov zuj zus mus rau hauv ib lub bot uas tau sau rau slack rau txhua qhov teeb meem ua txhaum cai thiab txuas cov khoom tso tawm. Tab sis feem ntau muaj ntau yam tseem ceeb uas yuav tsum tau ua thiab cov cai tseem tsis tau kho.
Green Build Master
Lub sij hawm dhau mus, thiab peb tau los txog qhov kev txiav txim siab uas tsis dhau qee qhov kev xeem tsis tuaj yeem tso cai rau tus tswv. Voila! Peb tau tsim Green Build Master, uas tau xyaum hauv kev txhim kho software rau lub sijhawm ntev:
Txoj kev loj hlob tab tom ua hauv ib ceg.
Cov kev ntsuam xyuas tau khiav ntawm kab lus no.
Yog tias qhov kev xeem tsis ua tiav, tus lej yuav tsis ua rau tus tswv.
Qhov kev txiav txim siab no mob heev, vim ... ua rau muaj kev sib cav ntau, tab sis nws tsim nyog nws, vim ... Kev tshuaj xyuas pib tau txais kev thov rau kev sib koom ua ke yam tsis muaj qhov sib txawv ntawm cov qauv, thiab lub sijhawm dhau los ntawm cov chaw teeb meem pib txo qis.
Kev xeem IaC
Ntxiv nrog rau kev txheeb xyuas cov qauv, koj tuaj yeem siv lwm yam, piv txwv li, los xyuas tias koj qhov kev tsim kho tuaj yeem siv tau. Lossis xyuas tias kev hloov pauv hauv cov txheej txheem yuav tsis ua rau poob nyiaj. Vim li cas qhov no yuav xav tau? Cov lus nug yog complex thiab philosophical, nws yog zoo dua los teb nrog ib zaj dab neeg hais tias cas muaj ib tug auto-scaler ntawm Powershell uas tsis tau xyuas cov ciam teb tej yam kev mob => ntau VMs tau tsim ntau tshaj qhov tsim nyog => tus neeg siv nyiaj ntau dua li kev npaj. Qhov no tsis yog qhov qab ntxiag heev, tab sis nws yuav ua tau heev kom ntes tau qhov kev ua yuam kev ntawm theem ua ntej.
Ib tug yuav nug, yog vim li cas ua complex infrastructure txawm complex? Kev ntsuam xyuas rau kev tsim kho vaj tse, ib yam li cov cai, tsis yog hais txog kev ua kom yooj yim, tab sis hais txog kev paub txog tias koj cov infrastructure yuav tsum ua haujlwm li cas.
IaC Test Pyramid
Kev Ntsuas IaC: Kev Ntsuam Xyuas Static
Yog tias koj xa tag nrho cov txheej txheem ib zaug thiab xyuas tias nws ua haujlwm, koj yuav pom tias nws siv sijhawm ntau thiab yuav tsum tau siv sijhawm ntau. Yog li ntawd, lub hauv paus yuav tsum yog ib yam dab tsi uas ua haujlwm sai, muaj ntau ntawm nws, thiab nws npog ntau qhov chaw qub.
Bash yog dag
Cia peb saib ib qho piv txwv tsis tseem ceeb. xaiv tag nrho cov ntaub ntawv hauv cov npe tam sim no thiab luam mus rau lwm qhov chaw. Thawj yam uas los rau hauv siab:
for i in * ; do
cp $i /some/path/$i.bak
done
Yuav ua li cas yog tias muaj qhov chaw nyob hauv cov ntaub ntawv npe? Zoo, ok, peb ntse, peb paub siv cov lus hais:
for i in * ; do cp "$i" "/some/path/$i.bak" ; done
Ua tau zoo? Tsis muaj! Yuav ua li cas yog tias tsis muaj dab tsi hauv phau ntawv qhia, i.e. globbing yuav tsis ua haujlwm.
find . -type f -exec mv -v {} dst/{}.bak ;
Ua tau zoo tam sim no? Tsis yog... Tsis nco qab dab tsi tuaj yeem ua rau hauv cov ntaub ntawv npe n.
touch x
mv x "$(printf "foonbar")"
find . -type f -print0 | xargs -0 mv -t /path/to/target-dir
Cov cuab yeej tsom xam zoo li qub
Qhov teeb meem los ntawm cov kauj ruam dhau los tuaj yeem raug ntes tau thaum peb tsis nco qab cov lus hais, rau qhov no muaj ntau yam kev kho mob Shellcheck, feem ntau muaj ntau ntawm lawv, thiab feem ntau koj tuaj yeem nrhiav tau ib lub linter rau koj pawg hauv qab koj IDE.
Cov lus nug tshwm sim: yuav ua li cas muab tag nrho ua ke thiab tso tawm? Ua tau coj nws thiab ua koj tus kheej yog tias muaj ntau tus engineers txaus. Lossis koj tuaj yeem npaj cov kev daws teeb meem, txawm tias tsis muaj ntau ntawm lawv:
Linting rau 40 lub luag haujlwm thiab kev sim rau lub kaum os pib siv sijhawm li 15 feeb.
Yuav xaiv dab tsi nyob ntawm ntau yam, xws li pawg siv, kev txawj ntse hauv pab pawg, thiab lwm yam. ntawm no txhua tus txiav txim siab rau lawv tus kheej yuav ua li cas kaw cov lus nug ntawm Chav Tsev
Kev xeem IaC: Kev xeem sib xyaw
Cov kauj ruam tom ntej hauv kev sim kev tsim vaj tsev pyramid yuav yog kev sib koom ua ke. Lawv zoo ib yam li Unit Tests:
Cov vaj tse tau muab faib ua cov cib me me, piv txwv li Ansible lub luag haujlwm.
Qee qhov chaw ib puag ncig raug xa mus, yog nws docker lossis VM.
Rau qhov kev xeem no siv tau coob leej Cov luag haujlwm tsis txaus ntseeg.
Peb xyuas tias txhua yam ua haujlwm raws li peb xav tau (peb khiav kev xeem).
Peb txiav txim siab ok los tsis ok.
Hais lus kwv yees, peb tsis kuaj xyuas qhov ua tau zoo ntawm ib tus neeg lub cev ntawm lub cev xws li hauv kev sim ntsuas, peb xyuas seb lub server tau teeb tsa li cas.
Kev xeem IaC: Xaus rau Kev Xeem Kawg
Nyob rau sab saum toj ntawm lub pyramid peb tau txais tos los ntawm End to End xeem. Cov. Peb tsis kuaj xyuas qhov ua tau zoo ntawm cov neeg rau zaub mov sib cais, cov ntawv cais, lossis ib qho cib cais ntawm peb cov txheej txheem. Peb xyuas tias ntau lub servers txuas nrog ua ke, peb cov txheej txheem ua haujlwm raws li peb xav kom nws. Hmoov tsis zoo, kuv tsis tau pom cov kev daws teeb meem npaj txhij, tej zaum vim ... Cov txheej txheem feem ntau yog tshwj xeeb thiab nyuaj rau cov qauv thiab tsim lub hauv paus rau kev sim. Yog li ntawd, txhua tus tsim lawv tus kheej cov kev daws teeb meem. Muaj kev thov, tab sis tsis muaj lus teb. Yog li ntawd, kuv mam li qhia rau koj paub tias muaj dab tsi thiaj li yuav thawb lwm tus mus rau lub suab xav lossis rub kuv lub qhov ntswg ntawm qhov tseeb tias txhua yam tau tsim los ntev dhau los ua ntej peb.
Ib qhov project nrog keeb kwm nplua nuj. Nws yog siv nyob rau hauv cov koom haum loj thiab tej zaum txhua tus ntawm koj tau indirectly hla txoj kev nrog nws. Daim ntawv thov txhawb ntau databases, kev koom ua ke, thiab lwm yam. Paub txog qhov kev tsim kho vaj tse yuav zoo li cas yog ntau cov ntaub ntawv docker-compose, thiab paub txog qhov kev xeem twg los khiav hauv qhov chaw twg yog Jenkins.
Cov txheej txheem no tau ua haujlwm ntev heev, mus txog rau hauv lub moj khaum kev tshawb fawb peb tsis tau sim hloov qhov no mus rau Openshift. Cov thawv ntim tau zoo ib yam, tab sis qhov chaw tso tawm tau hloov pauv (nyob zoo DRY dua).
Lub tswv yim tshawb fawb tau mus ntxiv, thiab hauv openshift lawv pom ib yam li APB (Ansible Playbook Bundle), uas tso cai rau koj ntim cov kev paub txog kev siv cov txheej txheem rau hauv lub thawv. Cov. muaj ib qho kev rov ua tau, sim ntsuas qhov kev paub txog yuav ua li cas siv cov txheej txheem.
Tag nrho cov no tau zoo mus txog thaum peb tau khiav mus rau hauv cov txheej txheem sib txawv: peb xav tau Windows rau kev sim. Yog li ntawd, kev paub txog dab tsi, qhov twg, yuav siv li cas, thiab kev sim yog nyob rau hauv jenkins.