Gan ddechrau o'r ail ymrwymiad, mae unrhyw god yn dod yn etifeddiaeth, oherwydd syniadau cychwynnol yn dechrau ymwahanu oddi wrth realiti llym. Nid yw hyn yn dda nac yn ddrwg, mae'n rhodd sy'n anodd dadlau ag ef ac y mae'n rhaid byw ag ef. Rhan o'r broses hon yw ailffactorio. Ailystyried Isadeiledd fel Cod. Gadewch i'r stori ddechrau ar sut i ailystyried Ansible mewn blwyddyn a pheidio â mynd yn wallgof.
Genedigaeth Etifeddiaeth
Diwrnod #1: Claf Sero
Un tro roedd prosiect amodol. Roedd ganddo dîm datblygu Dev a pheirianwyr Ops. Roeddent yn datrys yr un broblem: sut i ddefnyddio gweinyddwyr a rhedeg rhaglen. Y broblem oedd bod pob tîm wedi datrys y broblem hon yn ei ffordd ei hun. Yn y prosiect, penderfynwyd defnyddio Ansible i gydamseru gwybodaeth rhwng y timau Dev ac Ops.
Diwrnod #89: Genedigaeth Etifeddiaeth
Heb sylwi arno eu hunain, roeddent am ei wneud orau ag y bo modd, ond daeth yn etifeddiaeth. Sut mae hyn yn digwydd?
Mae gennym dasg frys yma, gadewch i ni wneud darn budr ac yna ei drwsio.
Nid oes rhaid i chi ysgrifennu dogfennaeth ac mae popeth yn glir beth sy'n digwydd yma.
Dwi'n nabod Ansible/Python/Bash/Terraform! Edrychwch sut y gallaf osgoi!
Rwy'n Ddatblygwr Gorlif Stack Llawn ac wedi copïo hwn o stackoverflow, nid wyf yn gwybod sut mae'n gweithio, ond mae'n edrych yn cŵl ac yn datrys y broblem.
O ganlyniad, gallwch gael math annealladwy o god nad oes dogfennaeth ar ei gyfer, nid yw'n glir beth mae'n ei wneud, a oes ei angen, ond y broblem yw bod angen ichi ei ddatblygu, ei addasu, ychwanegu baglau a chynhalwyr. , gan wneud y sefyllfa hyd yn oed yn waeth.
Nid yw'r model IaC a luniwyd yn wreiddiol ac a roddwyd ar waith bellach yn bodloni gofynion defnyddwyr / busnes / timau eraill, ac mae'r amser i wneud newidiadau i'r seilwaith yn peidio â bod yn dderbyniol. Ar hyn o bryd, daw'r ddealltwriaeth ei bod hi'n bryd gweithredu.
IaC ailffactorio
Diwrnod # 139: A oes gwir angen ailffactorio?
Cyn i chi ruthro i ailffactorio, rhaid i chi ateb nifer o gwestiynau pwysig:
Pam mae angen hyn i gyd arnoch chi?
Oes gennych chi amser?
Ydy gwybodaeth yn ddigon?
Os nad ydych yn gwybod sut i ateb y cwestiynau, yna bydd yr ailffactorio yn dod i ben cyn iddo ddechrau hyd yn oed, neu efallai y bydd yn gwaethygu. Achos wedi cael profiad ( Yr hyn a Ddysgais o Brofi 200 o Linellau o God Seilwaith), yna derbyniodd y prosiect gais am help i drwsio'r rolau a'u gorchuddio â phrofion.
Diwrnod # 149: Paratoi'r ailffactoreiddio
Y peth cyntaf yw paratoi. Penderfynwch beth fyddwn ni'n ei wneud. I wneud hyn, rydym yn cyfathrebu, yn dod o hyd i feysydd problem ac yn darganfod ffyrdd o'u datrys. Rydyn ni'n cofnodi'r cysyniadau sy'n deillio o hynny rywsut, er enghraifft erthygl mewn cydlifiad, fel pan fydd y cwestiwn yn codi "beth sydd orau?" neu "pa un sy'n gywir?" Nid ydym wedi colli ein ffordd. Yn ein hachos ni, fe wnaethon ni gadw at y syniad rhaniad a rheol: rydym yn rhannu'r seilwaith yn ddarnau bach/brics. Mae'r dull hwn yn caniatáu ichi gymryd darn ynysig o seilwaith, deall yr hyn y mae'n ei wneud, ei orchuddio â phrofion a'i newid heb ofni torri unrhyw beth.
Mae'n ymddangos bod profi seilwaith yn dod yn gonglfaen ac yma mae'n werth sôn am y pyramid profi seilwaith. Yr un syniad yn union sy'n cael ei ddatblygu, ond ar gyfer seilwaith: rydym yn symud o brofion cyflym rhad sy'n gwirio pethau syml, megis mewnoliad, i brofion llawn drud sy'n defnyddio'r seilwaith cyfan.
Ymdrechion profi aswy
Cyn i ni fynd i ddisgrifio sut y gwnaethom ymdrin â phrofion Ansible ar y prosiect, byddaf yn disgrifio'r ymdrechion a'r dulliau gweithredu y cefais gyfle i'w defnyddio'n gynharach er mwyn deall cyd-destun y penderfyniadau a wnaed.
Diwrnod Rhif -997: darpariaeth SDS
Y tro cyntaf i mi brofi Ansible oedd ar brosiect i ddatblygu SDS (Software Defined Storage). Mae erthygl ar wahân ar y pwnc hwn Sut i dorri beiciau dros faglau wrth brofi eich dosbarthiad, ond yn fyr, rydym yn dod i ben i fyny gyda byramid profi gwrthdro a phrofi rydym yn treulio 60-90 munud ar un rôl, sy'n amser hir. Y sail oedd profion e2e, h.y. gwnaethom ddefnyddio gosodiad llawn ac yna ei brofi. Yr hyn a oedd yn waeth fyth oedd dyfeisio ei feic ei hun. Ond mae'n rhaid i mi gyfaddef, roedd yr ateb hwn yn gweithio ac yn caniatáu rhyddhad sefydlog.
Diwrnod # -701: Cegin ansible a phrawf
Datblygiad y syniad profi Ansible oedd y defnydd o offer parod, sef cegin prawf / cegin-ci ac inspec. Pennwyd y dewis gan wybodaeth am Ruby (am ragor o fanylion, gweler yr erthygl ar Habré: A yw rhaglenwyr YML yn breuddwydio am brofi Ansible?) gweithio'n gyflymach, tua 40 munud ar gyfer 10 rôl. Fe wnaethon ni greu pecyn o beiriannau rhithwir a chynnal profion y tu mewn.
Yn gyffredinol, roedd yr ateb yn gweithio, ond roedd rhywfaint o waddod oherwydd heterogeneity. Pan gynyddwyd nifer y bobl a brofwyd i 13 rôl sylfaenol a 2 rôl meta gan gyfuno rolau llai, yna'n sydyn dechreuodd y profion redeg am 70 munud, sydd bron i 2 gwaith yn hirach. Roedd yn anodd siarad am arferion XP (rhaglenu eithafol) oherwydd... does neb eisiau aros 70 munud. Dyma oedd y rheswm dros newid y dull gweithredu
Diwrnod # -601: Ansible a moleciwl
Yn gysyniadol, mae hyn yn debyg i testkitchen, dim ond i ni symud profion rôl i docwr a newid y pentwr. O ganlyniad, gostyngwyd yr amser i 20-25 munud sefydlog ar gyfer 7 rôl.
Trwy gynyddu nifer y rolau a brofwyd i 17 a lintio 45 rôl, fe wnaethom redeg hyn mewn 28 munud ar 2 gaethweision jenkins.
Diwrnod #167: Ychwanegu profion Ansible i'r prosiect
Yn fwyaf tebygol, ni fydd yn bosibl gwneud y dasg ailffactorio ar frys. Rhaid i'r dasg fod yn fesuradwy fel y gallwch ei thorri'n ddarnau bach a bwyta'r eliffant fesul darn gyda llwy de. Rhaid deall a ydych yn symud i'r cyfeiriad cywir, pa mor hir i fynd.
Yn gyffredinol, nid oes ots sut y caiff ei wneud, gallwch ysgrifennu ar ddarn o bapur, gallwch roi sticeri ar y cwpwrdd, gallwch greu tasgau yn Jira, neu gallwch agor Google Docs ac ysgrifennu'r statws cyfredol yno. Mae coesau'n tyfu o'r ffaith nad yw'r broses yn syth, bydd yn hir ac yn ddiflas. Mae’n annhebygol bod unrhyw un eisiau ichi losgi allan o syniadau, blino, a chael eich llethu wrth ailffactorio.
Mae'r ailffactorio yn syml:
Bwyta.
Cwsg.
Côd.
prawf IaC.
Ailadrodd
ac ailadroddwn hyn nes cyrraedd y nod bwriadedig.
Efallai na fydd yn bosibl dechrau profi popeth ar unwaith, felly ein tasg gyntaf oedd dechrau gyda lintio a gwirio'r gystrawen.
Diwrnod #181: Green Build Master
Mae linting yn gam cyntaf bach tuag at Green Build Master. Ni fydd hyn yn torri bron unrhyw beth, ond bydd yn caniatáu ichi ddadfygio prosesau a gwneud adeiladau gwyrdd yn Jenkins. Y syniad yw datblygu arferion ymhlith y tîm:
Mae profion coch yn ddrwg.
Deuthum i drwsio rhywbeth ac ar yr un pryd gwneud y cod ychydig yn well nag yr oedd o'ch blaen chi.
Diwrnod #193: O leinin i brofion uned
Ar ôl adeiladu'r broses o gael y cod i mewn i'r meistr, gallwch chi ddechrau'r broses o welliant cam wrth gam - gan ddisodli lintin â rolau lansio, gallwch chi hyd yn oed ei wneud heb analluedd. Mae angen i chi ddeall sut i gymhwyso rolau a sut maent yn gweithio.
Diwrnod #211: O uned i brofion integreiddio
Pan fydd y rhan fwyaf o rolau wedi'u gorchuddio â phrofion uned a phopeth wedi'i leinio, gallwch symud ymlaen i ychwanegu profion integreiddio. Y rhai. profi nid bricsen unigol yn y seilwaith, ond cyfuniad ohonynt, er enghraifft, ffurfweddiad achos llawn.
Gan ddefnyddio jenkins, fe wnaethom gynhyrchu llawer o gamau a oedd yn leinio rolau / llyfrau chwarae ochr yn ochr, yna profion uned mewn cynwysyddion, ac yn olaf profion integreiddio.
Jenkins + Dociwr + Atebol = Profion
Desg dalu a chynhyrchu camau adeiladu.
Rhedeg camau llyfr chwarae lint ochr yn ochr.
Rhedeg camau rôl lint yn gyfochrog.
Rhedeg camau rôl gwirio cystrawen ochr yn ochr.
Rhedeg camau rôl prawf ochr yn ochr.
Rôl Lint.
Gwirio dibyniaeth ar rolau eraill.
Gwiriwch gystrawen.
Creu enghraifft docwr
Rhedeg moleciwl/default/playbook.yml.
Gwiriwch analluedd.
Rhedeg profion integreiddio
Gorffen
Diwrnod #271: Ffactor Bws
Ar y dechrau, roedd ailffactorio yn cael ei wneud gan grŵp bach o ddau neu dri o bobl. Maent yn adolygu'r cod yn y meistr. Dros amser, datblygodd y tîm wybodaeth am sut i ysgrifennu adolygiad cod a chyfrannodd at ledaenu gwybodaeth am y seilwaith a sut mae'n gweithio. Yr uchafbwynt yma oedd bod yr adolygwyr yn cael eu dewis fesul un, yn ôl amserlen, h.y. gyda rhywfaint o debygolrwydd y byddwch yn dringo i mewn i ddarn newydd o seilwaith.
A dylai fod yn gyfforddus yma. Mae’n gyfleus cynnal adolygiad, gweld o fewn fframwaith pa dasg a gyflawnwyd, a hanes trafodaethau. Rydym wedi integreiddio jenkins + bitbucket + jira.
Ond o'r herwydd, nid yw adolygiad yn ateb i bob problem; rhywsut, fe wnaethon ni fynd i mewn i'r prif god, a wnaeth i ni gynnal profion fflop:
Dros amser, bu mwy o brofion, rhedodd y gwaith adeiladu yn arafach, hyd at awr yn yr achos gwaethaf. Ar un o’r retros roedd ymadrodd fel “mae’n dda bod yna brofion, ond maen nhw’n araf.” O ganlyniad, fe wnaethom roi'r gorau i brofion integreiddio ar beiriannau rhithwir a'u haddasu ar gyfer Docker i'w gwneud yn gyflymach. Fe wnaethom hefyd ddisodli testinfra gyda dilysydd asible i leihau nifer yr offer a ddefnyddir.
A siarad yn fanwl gywir, roedd set o fesurau:
Newid i docwr.
Dileu profion rôl, sy'n cael eu dyblygu oherwydd dibyniaethau.
Cynyddu nifer y caethweision.
Gorchymyn rhedeg prawf.
Y gallu i lint I GYD yn lleol gydag un gorchymyn.
O ganlyniad, roedd Piblinell ar jenkins hefyd yn unedig
Cynhyrchu camau adeiladu.
Lint i gyd yn gyfochrog.
Rhedeg camau rôl prawf ochr yn ochr.
Gorffen.
gwersi a ddysgwyd
Osgoi newidynnau byd-eang
Mae Ansible yn defnyddio newidynnau byd-eang, mae datrysiad rhannol yn y ffurf preifat_rôl_vars, ond nid yw hyn yn ateb i bob problem.
Gadewch imi roi enghraifft ichi. Gadewch inni gael role_a и role_b
Y peth doniol yw y bydd canlyniad llyfrau chwarae yn dibynnu ar bethau nad ydynt bob amser yn amlwg, megis y drefn y mae rolau yn cael eu rhestru. Yn anffodus, dyma natur Ansible a'r peth gorau y gellir ei wneud yw defnyddio rhyw fath o gytundeb, er enghraifft, o fewn rôl, defnyddio'r newidyn a ddisgrifir yn y rôl hon yn unig.
DA: Mewn rolau ar gyfer newidynnau, defnyddiwch newidynnau sydd wedi’u rhagddodi ag enw’r rôl; bydd hyn, trwy edrych ar y rhestr eiddo, yn ei gwneud hi’n haws deall beth sy’n digwydd.
GWAEL: Defnyddiwch newidyn safonol mewn dolenni item, os yw'r dasg/llyfr chwarae hwn wedi'i gynnwys yn rhywle, gallai hyn arwain at ymddygiad annisgwyl
Fe wnaethom gytuno i ddefnyddio rhagddodiaid newidiol; ni fyddai’n ddiangen gwirio eu bod wedi’u diffinio fel y disgwyliwn ac, er enghraifft, na chawsant eu diystyru gan werth gwag
DA: Gwirio newidynnau.
- name: "Verify that required string variables are defined"
assert:
that: ahs_var is defined and ahs_var | length > 0 and ahs_var != None
fail_msg: "{{ ahs_var }} needs to be set for the role to work "
success_msg: "Required variables {{ ahs_var }} is defined"
loop_control:
loop_var: ahs_var
with_items:
- ahs_item1
- ahs_item2
- ahs_item3
Os yw rôl yn disgwyl hash / geiriadur yn un o'i baramedrau, yna os ydym am newid un o baramedrau'r plentyn, bydd angen i ni ddiystyru'r hash / geiriadur cyfan, a fydd yn cynyddu cymhlethdod cyfluniad.
Rhaid i rolau a llyfrau chwarae fod yn ddiamwys, oherwydd yn lleihau drifft cyfluniad ac ofn torri rhywbeth. Ond os ydych chi'n defnyddio moleciwl, yna dyma'r ymddygiad diofyn.
Ceisiwch osgoi defnyddio modiwlau cregyn gorchymyn
Mae defnyddio modiwl cragen yn arwain at baradeim disgrifio hanfodol, yn lle'r un datganiadol, sef craidd Ansible.
Profwch eich rolau trwy foleciwl
Mae moleciwl yn beth hyblyg iawn, gadewch i ni edrych ar ychydig o senarios.
Moleciwl Achosion lluosog
В molecule.yml yn adran platforms gallwch ddisgrifio llawer o westeion y gallwch eu defnyddio.
Mewn moleciwl mae'n bosibl defnyddio ansible i wirio bod yr enghraifft wedi'i ffurfweddu'n gywir, ar ben hynny, dyma'r rhagosodiad ers rhyddhau 3. Nid yw mor hyblyg â testinfra/inspec, ond gallwn wirio bod cynnwys y ffeil yn cyd-fynd â'n disgwyliadau:
Neu defnyddiwch y gwasanaeth, arhoswch iddo ddod ar gael a gwnewch brawf mwg:
---
- name: Verify
hosts: solr
tasks:
- command: /blah/solr/bin/solr start -s /solr_home -p 8983 -force
- uri:
url: http://127.0.0.1:8983/solr
method: GET
status_code: 200
register: uri_result
until: uri_result is not failed
retries: 12
delay: 10
- name: Post documents to solr
command: /blah/solr/bin/post -c master /exampledocs/books.csv
Rhowch resymeg gymhleth mewn modiwlau ac ategion
Mae Ansible yn argymell dull datganiadol, felly pan fyddwch chi'n gwneud canghennu cod, trawsnewid data, modiwlau cregyn, mae'r cod yn dod yn anodd ei ddarllen. Er mwyn mynd i'r afael â hyn a'i gadw'n syml i'w ddeall, ni fyddai'n ddiangen mynd i'r afael â'r cymhlethdod hwn trwy greu eich modiwlau eich hun.
Ceisiwch osgoi defnyddio modiwlau cregyn gorchymyn.
Profwch eich rolau trwy foleciwl.
Rhowch resymeg gymhleth mewn modiwlau ac ategion.
Casgliad
Ni allwch fynd i ail-ffactorio'r seilwaith ar brosiect, hyd yn oed os oes gennych IaC. Mae hon yn broses hir sy'n gofyn am amynedd, amser a gwybodaeth.
UPD1 2020.05.01 20:30 — Ar gyfer proffilio cynradd o lyfrau chwarae y gallwch eu defnyddio callback_whitelist = profile_tasks i ddeall beth yn union sy'n gweithio am amser hir. Yna rydym yn mynd drwy Clasuron cyflymu asible. Gallwch chi hefyd geisio mitogen UPD2 2020.05.03 16:34 - fersiwn Saesneg