8.7

Tazama kwa Kiingereza

8.7 Mifumo ya ujenzi na usimamizi wa mabaki

Muhtasari na msukumo

Ujenzi ni mahali msimbo wenu wa chanzo unapogeuka kuwa kitu unachoweza kusafirisha. Kila bomba katika sura ya 8.1 linaanzia hapa: kabla ya kujaribu, kuchanganua, kusambaza, au kupandisha chochote, mfumo wa ujenzi lazima ugeuze mti wa faili za chanzo kuwa mabaki halisi, binari iliyokusanywa, kifurushi, picha ya kontena, au kifungu cha mali tuli. Hatua hiyo ya kwanza ikiwa polepole, isiyotegemewa, au isiyozalishika upya, kila hatua inayofuata inarithi uharibifu. Ujenzi unaozalisha matokeo tofauti kwenye mashine mbili unadhoofisha kila jaribio mnaloendesha na kila idhini mnayokusanya, kwa sababu kitu mlichokithibitisha hakithibitiki kuwa ndicho mnachosafirisha.

Sura hii inahusu hatua hiyo ya kwanza na matokeo yake: mfumo wa ujenzi unaounda mabaki, na usimamizi wa mabaki unaoyahifadhi, kuyawekea matoleo, kuyalinda, na kuyapandisha. Ni finyu zaidi kwa makusudi kuliko sura ya 8.1, inayofunika bomba kamili la ujumuishaji endelevu na utoaji endelevu (CI/CD). Hapa mada ni ujenzi wenyewe na mabaki unayotoa. Inakamilisha sura ya 2.10 kuhusu usimamizi wa usanidi wa programu, inayotawala jinsi mnavyofuatilia na kudhibiti pembejeo, na sura ya 2.18 kuhusu usimamizi wa utegemezi na mnyororo wa ugavi, inayotawala msimbo wa watu wengine mnaouvuta. Ujenzi ndipo pembejeo hizo zinapokutana: chanzo chenu, utegemezi wenu, na usanidi wenu vyote vinakusanyika kuwa matokeo moja yasiyobadilika.

Kwa timu kubwa dau ni halisi. Mamia ya wahandisi wanaposubiri ujenzi wa dakika kadhaa mara nyingi kwa siku, jumla ya muda uliopotea inazidi karibu gharama nyingine yoyote ya kihandisi. Mabaki yanapobadilika, hayafuatiliwi, au yanajengwa upya kwa kila mazingira, mnapoteza uwezo wa kusema kwa uhakika nini kinaendesha kwenye uzalishaji. Katika mazingira ya mashirika makubwa na serikali, ufuatiliaji huo si wa hiari. Wakaguzi na maafisa wa usalama wanahitaji ushahidi kwamba binari iliyo kwenye uzalishaji ilitoka kwenye chanzo kilichopitiwa, ikajengwa na mfumo unaoaminika, kukiwa na mnyororo wa umiliki ulioandikwa. Mazoea ya nidhamu ya ujenzi na mabaki hugeuza ushahidi huo kuwa zao la pembeni la kazi ya kawaida badala ya haraka kabla ya kila ukaguzi.

Kanuni kuu

  • Ujenzi ni hatua ya kwanza ya utoaji: chukulia kasi na usahihi wake kama wasiwasi wa uzalishaji.
  • Lenga ujenzi unaozalishika upya na, inapowezekana, uliotengwa kabisa: pembejeo zilezile, matokeo yaleyale, kila mara.
  • Jenga mabaki mara moja, kisha pandisha mabaki hayohayo kuvuka mazingira.
  • Fanya mabaki yasiyobadilika na yenye anwani ya maudhui, na uyawekee matoleo yenye maana.
  • Hifadhi mabaki kwenye hazina inayosimamiwa yenye uhifadhi, udhibiti wa ufikiaji, na asili.
  • Tumia kache kwa nguvu, lakini chukulia kache kama mpaka wa usalama, si mbinu ya kasi tu.
  • Nasa asili, saini, na orodha ya vifaa wakati wa ujenzi, si baada ya tukio.

Mapendekezo

Chukulia ujenzi kama hatua ya kwanza ya utoaji

Mfumo wenu wa ujenzi ni miundombinu ya uzalishaji, na mnapaswa kuufadhili na kuudumisha hivyo. Uundaji wa haraka, sahihi wa mabaki ndio msingi ambao CI/CD (sura ya 8.1) inasimama juu yake. Timu zinapochukulia ujenzi kama wazo la baadaye, rundo la hati za ganda ambazo hakuna anayemiliki, zinalipa kwa mabomba yasiyotegemewa, kasoro za ajabu za “inafanya kazi kwenye mashine yangu”, na maoni ya polepole yanayomomonyoa mtiririko mzima wa kihandisi ulioelezwa katika Sehemu ya 11. Wape ujenzi mmiliki, fasili iliyohifadhiwa kwenye udhibiti wa matoleo pamoja na msimbo (sura ya 2.14 kuhusu muundo wa hazina), na nidhamu ileile ya mapitio kama mfumo mwingine wowote muhimu.

Fanya ujenzi uzalishike upya na, inapowezekana, ujitenge kabisa

Ujenzi unaozalishika upya hutoa matokeo yanayofanana bit kwa bit kutoka chanzo kimoja, ili yeyote aweze kujenga upya kwa uhuru na kuthibitisha kwamba mabaki yanalingana na chanzo chake. Hii ndiyo sifa inayokuruhusu kuamini kwamba binari haikuchezewa kati ya commit na usambazaji. Kufikia hapo kunamaanisha kuondoa vyanzo vya kutokuwa na uamuzi: mihuri ya wakati iliyopachikwa, njia kamili za faili, nasibu ya mpangilio wa ujenzi, na upakuaji wa mtandao ambao matokeo yake yanateleza kwa muda.

Ujenzi uliotengwa kabisa huenda mbali zaidi kwa kutangaza kila pembejeo mapema na kuendesha katika mazingira yaliyotengwa yasiyoweza kufikia mtandao wala hali ya mazingira ya mwenyeji. Hakuna kinachoingia kwenye ujenzi isipokuwa ulichotangaza: matoleo ya zana yaliyobandikwa, utegemezi uliobandikwa, faili za chanzo wazi. Kutengwa kabisa ndiko kunakofanya uwezo wa kuzalisha upya uwe wa kutegemewa badala ya bahati. Kutengwa kamili kuna gharama halisi katika zana na nidhamu, kwa hiyo chukulia kama mwelekeo badala ya hali ya mbili. Hata maendeleo ya sehemu, kubandika toleo la kikusanyaji chenu, kuweka utegemezi ndani au kuufunga, kuondoa mihuri ya wakati, hununua uaminifu wake mwingi kwa sehemu ndogo ya juhudi.

Tatua utegemezi kwa uamuzi kwa faili za kufunga

Kila ujenzi huvuta msimbo wa watu wengine, na jinsi unavyoutatua huamua kama ujenzi wenu una uamuzi. Faili ya kufunga hurekodi toleo kamili lililotatuliwa na heshi ya kriptografia ya kila utegemezi wa moja kwa moja na wa mpito, ili ujenzi wa miezi ijayo utatue hasa kwenye grafu ileile. Weka faili ya kufunga kwenye hazina, chukulia mabadiliko yake kama matukio yanayopitiwa, na thibitisha heshi kwa kila upakuaji ili kifurushi cha chanzo kilichobadilishwa kisipenye bila kutambuliwa. Hii ni sura ya wakati wa ujenzi ya nidhamu ya mnyororo wa ugavi katika sura ya 2.18. Bila faili ya kufunga, “ilijengwa jana” haikuambii lolote kuhusu itakachojenga leo, kwa sababu safu ya matoleo inayoelea inaweza kuvuta toleo jipya kimyakimya, au mshambuliaji anaweza kuchapisha lenye madhara.

Tumia ujenzi wa nyongeza na kache, ndani na kwa mbali

Hakuna anayepaswa kujenga upya kisichobadilika. Ujenzi wa nyongeza hufuatilia pembejeo zipi zinalisha matokeo yapi na hujenga upya sehemu zilizoathiriwa na badiliko tu. Kache ya ujenzi huhifadhi matokeo ya kazi ya awali yaliyofungwa kwa heshi ya pembejeo zake, ili lengo lisilobadilika lichukuliwe badala ya kuhesabiwa upya. Kache ya ndani huharakisha mzunguko wa msanidi mmoja; kache ya mbali au iliyosambazwa ya ujenzi hushiriki matokeo kuvuka timu nzima na meli ya CI, ili mtu wa kwanza kujenga pembejeo fulani alipe gharama na kila mtu mwingine apate mafanikio ya kache. Kwenye monorepo kubwa hii ni tofauti kati ya ujenzi wa dakika kumi na wa sekunde kumi.

Faida ni kasi ya maoni ya msanidi, mojawapo ya uwekezaji wenye nguvu zaidi ya kunufaika unaoweza kufanya. Maoni ya haraka, sahihi huwaweka wahandisi kwenye mtiririko na kufupisha mzunguko kati ya kuandika msimbo na kujua kama unafanya kazi. Linda usahihi wa kache kwa uangalifu, hata hivyo: ufunguo wa kache unaokosa pembejeo halisi (kigeugeu cha mazingira, toleo la zana) huzalisha matokeo yaliyopitwa ambayo ni ya kuudhi kutatua. Kache ni ya kuaminika kadiri ukamilifu wa heshi ya pembejeo zake.

Chagua zana za ujenzi zinazolingana na ukubwa wenu

Zana za ujenzi ziko kwenye wigo. Upande mwepesi, Make na zana asili za lugha huunda grafu rahisi ya utegemezi na zinatosha kwa huduma moja au hazina ndogo. Katikati, zana za mfumo wa ikolojia kama Gradle na Maven kwa ulimwengu wa Java, au minyororo ya zana ya kawaida ya Go, Rust, na JavaScript, huongeza utatuzi wa utegemezi na mikataba. Upande mzito, mifumo ya msingi wa grafu kama Bazel na zana zinazofanana za ujenzi wa monorepo huunda ujenzi mzima kama grafu isiyo na mzunguko yenye mwelekeo ya malengo, iliyotengwa kabisa na ya chembechembe ndogo, inayowezesha nyongeza sahihi, kache ya mbali, na utekelezaji wa mbali kuvuka msingi mkubwa wa msimbo.

Zana nzito hulipa mnapokuwa na miradi mingi inayotegemeana, monorepo kubwa (sura ya 2.14), au nyakati za ujenzi zinazobana timu zenu. Zinagharimu uwekezaji halisi: mkondo mkali wa kujifunza, juhudi ya uhamishaji, na timu maalumu ya kudumisha fasili za ujenzi. Usipokee zana za daraja la Bazel kwa sababu ni za mtindo. Zipokee grafu yenu ya ujenzi inapokuwa kubwa vya kutosha hivi kwamba kache ya chembechembe ndogo na usambamba vinarejesha muda wa kihandisi zaidi kuliko gharama ya kuendesha zana. Kwa mifumo mingi midogo na ya kati, zana nzuri ya mfumo wa ikolojia yenye kache ya mbali ndiyo sehemu tamu.

Hifadhi mabaki kwenye hazina inayosimamiwa

Mara mnapojenga mabaki, yanahitaji makazi. Hazina ya mabaki (inayoitwa pia sajili) huhifadhi vifurushi, picha za kontena, na binari zenu kwa matoleo, udhibiti wa ufikiaji, na metadata. Ni mwenzake wa hazina yenu ya chanzo: chanzo ndani, mabaki nje, vyote vikisimamiwa. Hazina nzuri inakupa mahali pamoja panapoaminika pa kuchapisha na kupata mabaki ya ndani, hupitisha na kuhifadhi kache ya mabaki ya nje ili msifikie mtandao wa umma kwa kila ujenzi, na hurekodi nani alichapisha nini na lini. Picha za kontena zina kanuni zao za sajili, na aina nyingine za vifurushi zina zake, lakini nidhamu ni ileile: hakuna kinachoendesha kwenye uzalishaji kisichotoka kwenye hifadhi inayosimamiwa, inayodhibitiwa ufikiaji.

Weka matoleo kwenye mabaki na uyafanye yasiyobadilika na yenye anwani ya maudhui

Pa kila mabaki toleo lenye maana. Uwekaji matoleo wa kisemantiki (kuu.ndogo.kiraka) huwasilisha asili ya badiliko kwa watumiaji: ongezeko kuu linaashiria badiliko linalovunja, dogo linaongeza vipengele vinavyooana, kiraka kinarekebisha hitilafu. Kando ya toleo linalosomeka na binadamu, tambulisha kila mabaki kwa heshi ya kriptografia ya maudhui yake, ili yawe na anwani ya maudhui. Anwani ya maudhui, mara nyingi huitwa digesti, ni alama ya kidole inayobadilika baiti moja ikibadilika, inayokuruhusu kurejelea mabaki kamili bila utata na kugundua uchezewaji wowote.

Fanya mabaki yaliyochapishwa yasiyobadilika: toleo likishachapishwa, halibadiliki kamwe. Kuchapisha tena baiti tofauti chini ya toleo lilelile ni hatari ya mnyororo wa ugavi na ndoto mbaya ya utatuzi, kwa sababu watu wawili wanaweza kushikilia “toleo 1.4.2” na kuwa na programu tofauti. Lebo zinazobadilika kama “latest” ni rahisi kwa binadamu lakini lazima zitatuliwe daima, kwa chochote cha maana, kuwa digesti maalumu isiyobadilika mnayoirekodi. Sambaza kwa digesti, si kwa lebo inayoelea, ili mlichojaribu kithibitike kuwa ndicho mnachoendesha.

Jenga mara moja, pandisha kila mahali

Jenga mabaki mara moja, kisha hamisha mabaki hayohayo kupitia mazingira yenu: ukuzaji, maandalizi, uzalishaji. Kanuni hii ya “jenga mara moja, pandisha kila mahali” ndiyo mazoea muhimu zaidi moja ya usimamizi wa mabaki. Mkijenga upya kwa kila mazingira, mmetupa dhamana yenu kwamba mabaki yaliyojaribiwa ndiyo yaliyosambazwa, kwa sababu kila ujenzi upya unaweza kuvuta utegemezi tofauti au kuendeshwa kwenye mashine tofauti kidogo. Kupandisha ni shughuli ya metadata: mnaweka alama digesti iliyojengwa tayari, iliyojaribiwa tayari kama iliyoidhinishwa kwa mazingira yanayofuata, na mnaisanidi kwa mazingira hayo kupitia usanidi wa nje (sura ya 2.10) badala ya kujenga upya. Hili linaweka binari thabiti na usanidi unaobadilika, hasa utengano mnaoutaka kwa kutegemewa na uwezo wa kukaguliwa.

Nasa asili, saini mabaki, na zalisha SBOM

Wakati wa ujenzi, rekodi mabaki yalitoka wapi na uthibitishe hayajabadilishwa. Asili ni kauli iliyosainiwa ya jinsi mabaki yalivyojengwa: commit ipi ya chanzo, mjenzi yupi, pembejeo zipi. Kusaini mabaki kunawaruhusu watumiaji kuthibitisha uhalisi na uadilifu kabla ya kuyaendesha, na kuthibitisha saini wakati wa usambazaji kunafunga mzunguko. Orodha ya vifaa vya programu (SBOM), orodha kamili ya vijenzi na utegemezi ndani ya mabaki, inakuruhusu kujibu “tumeathirika?” ndani ya dakika udhaifu mpya unapotangazwa, badala ya kutumia siku nyingi kuchunguza kumbukumbu za ujenzi.

Mifumo kama SLSA (Supply-chain Levels for Software Artifacts) inakupa kielelezo chenye ngazi cha uadilifu wa wakati wa ujenzi: ngazi za juu zinahitaji ujenzi uliotengwa kabisa, wa pekee na asili isiyoweza kughushiwa. Zalisha yote haya kwenye ujenzi, ambapo taarifa ni ya mamlaka na nafuu kukusanya, si kujengwa upya baadaye inapokuwa ghali na isiyotegemewa. Kazi hii inahudumia moja kwa moja mzunguko salama wa maisha ya uundaji wa programu wa sura ya 4.9 na wasiwasi wa mnyororo wa ugavi wa sura ya 2.18.

Linda kache na simamia uhifadhi na gharama

Kache ya ujenzi ya pamoja ni mpaka wa uaminifu wa pamoja. Mshambuliaji akiweza kuandika kipengele chenye sumu, kila mtumiaji anayekipakua anaendesha msimbo ulioathirika, na faida ya kasi inakuwa uso wa shambulio. Linda kache kwa uthibitishaji, bana ufikiaji wa kuandika kwa finyu (mara nyingi CI inayoaminika tu, kamwe si kompyuta ndogo za wasanidi), na hakikisha funguo za kache zinahesabu heshi ya kila pembejeo halisi ili kipengele chenye sumu au kilichopitwa kisijifanye kuwa halali. Chukulia sumu ya kache kama kielelezo halisi cha tishio, hasa kwa kache za mbali zinazoshirikiwa kuvuka timu.

Mabaki pia hukusanya gharama. Picha za kontena na matokeo ya ujenzi ni makubwa, na sajili isiyo na mipaka hukua hadi bili za hifadhi na utafutaji wa polepole zilazimishe suala. Fafanua sera za uhifadhi: weka kila mabaki yaliyopandishwa hadi uzalishaji na kila kilichorejelewa na mfumo unaoendesha, maliza muda wa ujenzi wa zamani wa ukuzaji na wa maombi ya kuvuta kiotomatiki, na rekodi ulichofuta. Lengo ni hifadhi inayoweka mnachohitaji kwa kuzalisha upya na ukaguzi huku ikiondoa kelele, kwa gharama mnayochagua kwa makusudi badala ya inayowashtukiza.

Mabadilishano: faida na hasara

UamuziFaidaHasara
Zana nzito ya ujenzi wa grafu (daraja la Bazel)Nyongeza ya chembechembe ndogo, kache na utekelezaji wa mbali, inapanuka hadi monorepo kubwa sanaMkondo mkali wa kujifunza, gharama ya uhamishaji, inahitaji timu maalumu ya ujenzi
Zana nyepesi ya ujenzi (Make, asili)Rahisi, mzigo mdogo, haraka kupokeaNyongeza na kache duni kwa ukubwa, kutengwa dhaifu
Kache ya ujenzi ya mbali/iliyosambazwaMatokeo ya pamoja, ongezeko kubwa la kasi kuvuka meliUso wa sumu ya kache, usahihi unategemea ukamilifu wa heshi ya pembejeo
Ujenzi uliotengwa kabisaUwezo wa kutegemewa wa kuzalisha upya, asili imaraGharama halisi ya zana na nidhamu, mtiririko wa kazi wa ndani ni mgumu zaidi
Jenga mara moja, pandisha kila mahaliMabaki yaliyojaribiwa ni sawa na yaliyosafirishwa, nyayo safi ya ukaguziInahitaji usanidi wa nje na upandishaji wenye nidhamu
Mabaki yasiyobadilika, yenye anwani ya maudhuiYanaonyesha uchezewaji, marejeo yasiyo na utataSi rahisi kama lebo zinazoelea, hifadhi zaidi ya kusimamia
Uhifadhi mrefu wa mabakiUwezo kamili wa kuzalisha upya na historia ya ukaguziGharama ya hifadhi, utafutaji wa polepole bila sera ya kusafisha

Mvutano unaojirudia ni kati ya kasi na uaminifu. Kache, mashamba ya ujenzi ya pamoja, na lebo zinazoelea vyote hufanya ujenzi uwe wa haraka na rahisi zaidi, na kila kimoja, kikitumiwa kwa uzembe, kinadhoofisha uwezo wenu wa kusema hasa mlichojenga na kuthibitisha hakikuchezewa. Utatue kwa kufanya njia inayoaminika iwe njia ya haraka. Heshi kamili ya pembejeo hufanya kache iwe ya haraka na sahihi. Kusambaza kwa digesti ni haraka kama kwa lebo na salama zaidi sana. Kuzalisha SBOM kwenye ujenzi kunagharimu sekunde na kunaokoa siku. Mara chache sana unalazimika kuchagua kasi badala ya uadilifu ukiunda uadilifu kwenye njia ya haraka tangu mwanzo.

Maswali ya kujadili na timu yako

  1. Tunaweza kujenga upya mabaki ya uzalishaji ya robo iliyopita leo na kupata baiti zilezile, na ikiwa sivyo, nini kinakosekana? Hili ndilo jaribio kali zaidi la nidhamu yenu ya ujenzi, kwa sababu uwezo wa kuzalisha upya unategemea minyororo ya zana iliyobandikwa, utegemezi uliofungwa, na kutokuwa na uamuzi kuondolewa vyote vikifanya kazi pamoja. Chagua mabaki maalumu yaliyosafirishwa miezi michache iliyopita na jaribu kweli kuyajenga upya kutoka commit ya chanzo iliyorekodiwa. Mnachojifunza kutokana na jaribio ni cha thamani zaidi kuliko waraka wowote wa sera: labda safu ya utegemezi iliyoelea, labda toleo la kikusanyaji halikubandikwa kamwe, labda muhuri wa wakati umepachikwa. Mapengo mtakayopata ndiyo mrundikano wenu wa kuzalisha upya, na kuyafunga ndiko kunakowaruhusu kuamini kwamba mlichokikagua ndicho mnachoendesha, jambo la umuhimu mkubwa katika mazingira ya serikali na yanayodhibitiwa ambapo mnyororo huo wa umiliki ni sharti la kisheria.

  2. Tunajenga kila mabaki mara moja na kuyapandisha, au tunajenga upya kwa kila mazingira, na tungethibitishaje lipi? Timu nyingi huamini zinapandisha mabaki moja lakini hugundua, zinapotazama kwa makini, kwamba maandalizi na uzalishaji kila moja huchochea ujenzi mpya wenye pembejeo tofauti kidogo. Fuatilia toleo moja halisi kutoka commit hadi uzalishaji na uthibitishe kama digesti ileile kamili ilihama kupitia kila mazingira au kama baiti mpya zilizalishwa njiani. Mkikuta ujenzi upya, mmepata mahali ambapo dhamana zenu za majaribio ni dhaifu kuliko mlivyofikiria, kwa sababu mabaki yaliyojaribiwa na yaliyosambazwa hayathibitiki kuwa yanafanana. Suluhisho, kutoa usanidi nje ili binari ibaki thabiti huku mipangilio ikibadilika, hulipa katika kutegemewa na hadithi safi zaidi ya ukaguzi.

  3. Udhaifu muhimu ukitangazwa kwenye maktaba ya kawaida kesho, tungeweza kuorodhesha kwa haraka kiasi gani kila mabaki yenye maktaba hiyo? Swali hili linajaribu kama mazoea yenu ya asili ya wakati wa ujenzi na SBOM ni halisi au ya matamanio. Kijenzi kinachotumika sana kinapogeuka kuwa kinachoweza kushambuliwa, mashirika yanayopona ndani ya masaa ni yale yanayozalisha orodha ya vifaa wakati wa ujenzi na kuihifadhi pamoja na kila mabaki; yale yanayopona ndani ya wiki yanatafuta kwenye kumbukumbu za ujenzi na kuwahoji wahandisi. Pitia hali hiyo kwa uhalisia na maktaba mnayoitegemea kweli na upime jibu lingechukua muda gani leo. Pengo kati ya muda huo na “dakika” ni kipimo cha moja kwa moja cha mfiduo wenu wa mnyororo wa ugavi, na linaunganishwa moja kwa moja na kazi ya mzunguko salama wa maisha ya uundaji katika sura ya 4.9.

  4. Ujenzi wetu unagharimu muda gani wa kihandisi kila siku, na kesi ya biashara ya kuufanya uwe wa haraka ni ipi? Ucheleweshaji wa ujenzi ni kodi inayolipwa kwa kila badiliko na kila mhandisi, na kwa ukubwa wa timu kubwa jumla ni rahisi kuidharau kwa sababu hakuna kusubiri kunakohisi ghali. Kukubaliana kupima kunageuza malalamiko hafifu kuwa namba mnayoweza kuipima dhidi ya gharama ya kache ya mbali, nyongeza bora, au zana nzito ya ujenzi. Leta nyakati zenu za wastani na mbaya zaidi za ujenzi wa ndani na CI, idadi ya ujenzi kwa siku, na makadirio ya uaminifu ya mara ngapi ujenzi wa polepole unamsukuma mtu kutoka kwenye mtiririko hadi ubadilishaji wa muktadha. Mazingatio yanayoshindana ni kwamba ujenzi wa haraka zaidi si bure: kache ya mbali na utekelezaji uliosambazwa huongeza miundombinu ya kuendesha na kulinda, na zana nzito huongeza timu ya matengenezo. Kwa shirika kubwa au wakala, hesabu gharama ya uzalishaji na ari ya maoni ya polepole kuvuka timu nyingi, ambayo kwa kawaida inazidi bili ya miundombinu na ndiyo hasa mfumo ambao uongozi tayari unafadhili.

  5. Nani anaweza kuandika kwenye kache yetu ya ujenzi ya pamoja, na nini kinazuia kipengele chenye sumu kufika uzalishaji? Kache ya pamoja hubadilisha ushindi wa kasi kwa mpaka mpya wa uaminifu, na utaratibu uleule unaoruhusu matokeo ya mhandisi mmoja kuhudumia meli nzima unaruhusu kipengele kimoja kilichoharibika au chenye nia mbaya kuathiri kila anayekipakua. Kwa timu kubwa eneo la mlipuko ni shirika zima, kwa hiyo hili linastahili uamuzi wa makusudi badala ya chochote chaguo-msingi za zana zinavyokuwa. Leta orodha ya nani na nini kinashikilia ufikiaji wa kuandika kwa kila kache, kama maandishi yamebanwa kwa CI inayoaminika badala ya kompyuta ndogo za wasanidi, na kama funguo zenu za kache zinahesabu heshi ya kila pembejeo halisi ili kipengele kilichopitwa au chenye sumu kisijifanye halali. Mvutano ni kwamba vidhibiti vikali zaidi hupunguza kasi njia rahisi ambapo wasanidi husukuma vipengele vya kache kutoka mashine zao wenyewe. Katika mazingira ya mashirika makubwa na serikali, chukulia sumu ya kache kama tishio wazi katika kielelezo chenu cha mnyororo wa ugavi na hitaji udhibiti wa ufikiaji, uandishi, na mapitio yaleyale mnayotumia kwa mfumo mwingine wowote wa uzalishaji unaoweza kuingiza msimbo kwenye toleo.

  6. Grafu yetu ya ujenzi inahalalisha zana nzito katika hatua gani, na tutajuaje tumevuka? Uchaguzi kati ya zana nyepesi ya mfumo wa ikolojia na mfumo wa msingi wa grafu kama Bazel ni mojawapo ya maamuzi ghali na magumu zaidi kutendua katika eneo hili, kwa sababu kuhamisha msingi mkubwa wa msimbo hadi fasili za ujenzi za chembechembe ndogo kunagharimu miezi na timu maalumu. Kuamua kizingiti mapema kunawazuia kupokea ugumu msiouhitaji kwa sababu ni wa mtindo, au kung’ang’ania zana nyepesi muda mrefu baada ya nyakati zenu za ujenzi kubana kila timu. Leta ukubwa na utegemeano wa grafu yenu ya ujenzi, vipimo vya sasa vya ujenzi na mafanikio ya kache, na makadirio halisi ya gharama ya uhamishaji na matengenezo endelevu dhidi ya muda wa kihandisi ambao zana ingerejesha. Mvuto unaoshindana ni kwamba zana nzito hutoa nyongeza sahihi na utekelezaji wa mbali ambao hakuna kingine kinachoulingana kwa ukubwa, lakini tu ikiwa grafu yenu ni kubwa kweli vya kutosha kuilipa. Kwa biashara kubwa au wakala, pima pia kama dhamana za kutengwa kabisa na asili za zana zinasaidia kutimiza mahitaji ya ukaguzi na mnyororo wa ugavi, jambo linaloweza kubadilisha hesabu zaidi ya kasi ghafi.

Mtazamo wa sekta

Kampuni changa. Ukiwa na timu ndogo na bila muda wa ziada kwa miundombinu ya ujenzi, iweke nyepesi: tumia zana asili za ujenzi za lugha, pokea faili za kufunga tangu siku ya kwanza, na sambaza picha za kontena kwa digesti badala ya lebo ya “latest”, kwa kuwa tabia hizo zinagharimu karibu hakuna na zinakuokoa daraja zima la maumivu ya “inafanya kazi kwenye mashine yangu” baadaye. Pinga zana nzito za ujenzi wa grafu; rasilimali yako adimu zaidi ni umakini wa kihandisi. Kache ya ujenzi ya mbali ndiyo uboreshaji mmoja unaostahili kuufikia ujenzi unapoanza kuteleza zaidi ya dakika chache.

Biashara ndogo. Bila mhandisi maalumu wa ujenzi, egemea huduma zinazosimamiwa badala ya kuendesha miundombinu yako ya mabaki: sajili iliyopangishwa na kache iliyojengwa ndani ya mtoa huduma wako wa CI zinakupa matoleo, uhifadhi, na udhibiti wa ufikiaji bila timu ya jukwaa. Weka uchaguzi kama kununua badala ya kujenga, weka sera ya kuisha kiotomatiki ili gharama za hifadhi zibaki zinazotabirika, na hakikisha misingi ipo, utegemezi uliofungwa na usambazaji usiobadilika uliobandikwa kwa digesti, kwa sababu hivyo vinakulinda hata kama hakuna anayetazama bomba muda wote.

Biashara kubwa. Kuvuka timu nyingi tatizo ni uthabiti: jukwaa la ujenzi la pamoja linalomilikiwa, hazina ya mabaki ya pamoja, na viwango vinavyotekelezwa kwa faili za kufunga, kusaini, SBOM, na jenga-mara-moja-pandisha ili hakuna kikundi kinachobuni upya bomba lisilotegemewa. Wekeza kwenye kache ya mbali na, pale grafu ya ujenzi inapohalalisha, zana za msingi wa grafu, na uchukulie kache kama mpaka wa uaminifu unaotawaliwa wenye ufikiaji wa kuandika uliobanwa na uandishi wa ukaguzi. Simamia mabaki kama eneo linalodhibitiwa lenye sera za uhifadhi na asili ili kijenzi chochote cha uzalishaji kifuatiliwe hadi chanzo kilichopitiwa kwa ombi.

Serikali. Kanuni za ununuzi, uwazi, na uwajibikaji wa umma hufanya uadilifu wa wakati wa ujenzi kuwa sharti la uzingatiaji, si pambo. Linganisha bomba na mfumo wenye ngazi kama SLSA, endesha ujenzi katika mazingira yaliyotengwa, yenye mtandao uliobanwa kutoka minyororo ya zana iliyobandikwa, na pitisha utegemezi wa watu wengine kupitia hazina ya ndani inayouchanganua na kuuidhinisha kabla ya matumizi. Hifadhi SBOM zilizosainiwa na asili bila kubadilika kwa miaka ambayo sheria ya uhifadhi wa rekodi inahitaji, sambaza mabaki yaliyosainiwa, yaliyotambulishwa kwa digesti tu, na kuwa tayari kuthibitisha kwa wakaguzi na umma kwamba programu iliyo kwenye uzalishaji ni hasa ile iliyopitiwa na kuidhinishwa.

Mifano

Kampuni changa. Kampuni changa ya watu kumi na watano inayoendesha monorepo ndogo inaanza na zana asili za ujenzi za lugha na maoni ya haraka, ambayo ni uamuzi sahihi kwa ukubwa wao. Wanapokua, nyakati za ujenzi zinateleza zaidi ya dakika tano na wahandisi wanaanza kubadilisha muktadha wakisubiri. Badala ya kuruka hadi zana nzito ya ujenzi wa grafu, wanaongeza kache ya ujenzi ya mbali inayoshirikiwa kati ya mashine za wasanidi na CI, inayopunguza ujenzi mwingi hadi sekunde kwa sababu malengo yasiyobadilika yanachukuliwa, hayajengwi upya. Wanapokea faili za kufunga kwa kila lugha, wanasambaza picha za kontena kwa digesti badala ya lebo ya “latest”, na wanawasha kuisha kiotomatiki kwa ujenzi wa picha za maombi ya kuvuta ili bili ya sajili yao ibaki thabiti. Juhudi nzima inachukua wiki kadhaa na inanunua tena masaa ya muda wa kihandisi kila siku.

Biashara kubwa. Kampuni ya huduma za kifedha ya kimataifa inaendesha monorepo kubwa kuvuka mamia ya wahandisi na inapokea mfumo wa ujenzi wa msingi wa grafu wenye kache ya mbali na utekelezaji wa mbali, kwa sababu kwa ukubwa wao nyongeza ya chembechembe ndogo inarejesha muda wa kihandisi mwingi zaidi kuliko timu ya ujenzi inavyogharimu. Kila mabaki yanajengwa kwa kutengwa kabisa katika mazingira ya pekee, yanasainiwa, na kuchapishwa kwenye sajili inayosimamiwa pamoja na SBOM na asili iliyosainiwa iliyoambatishwa. Usambazaji unafanyika kwa digesti ya maudhui, na injini ya sera inakataa kuendesha picha yoyote ambayo saini yake haithibitiki. Mabaki yanapandishwa, kamwe hayajengwi upya, kutoka maandalizi hadi uzalishaji, kwa hiyo binari iliyopita majaribio inathibitika kuwa ndiyo inayohudumia wateja. Wakaguzi wanapoomba kufuatilia kijenzi cha uzalishaji hadi chanzo kilichopitiwa, mnyororo wa umiliki ni swali, si uchunguzi.

Serikali. Wakala wa kitaifa wa kodi unaosasisha mifumo yake unachukulia uadilifu wa mnyororo wa ugavi wa wakati wa ujenzi kama sharti la uzingatiaji, ukilinganisha bomba lake na mfumo wenye ngazi kama SLSA. Ujenzi unaendeshwa katika mazingira ya pekee, yaliyobanwa mtandao kutoka minyororo ya zana iliyobandikwa na utegemezi uliofungwa, kwa hiyo matokeo yanazalishika upya na yanathibitika kwa uhuru. Kila mabaki yanabeba SBOM iliyosainiwa na asili, iliyohifadhiwa bila kubadilika kwa miaka kutimiza sheria ya uhifadhi wa rekodi. Utegemezi wa watu wengine unapitishwa kupitia hazina ya ndani inayouchanganua na kuuidhinisha kabla ujenzi wowote kuutumia, ikiweka msimbo ambao haujakaguliwa nje ya mtandao kabisa. Kwa sababu wakala unasambaza mabaki yaliyosainiwa, yaliyopandishwa, yaliyotambulishwa kwa digesti tu, unaweza kuthibitisha kwa wadhibiti na kwa umma kwamba programu inayochakata marejesho ya raia ni hasa ile iliyopitiwa na kuidhinishwa.

Kesi ya biashara: sababu, ROI, na TCO

Faida ya nidhamu ya ujenzi na mabaki inaonekana kwanza kama muda wa kihandisi uliorejeshwa. Ujenzi wa polepole hutoza kila mhandisi kwa kila badiliko, na gharama inajilimbikiza kuvuka shirika kubwa: kupunguza dakika kutoka ujenzi unaoendeshwa maelfu ya mara kwa siku kunarejesha miaka-mtu kwa mwaka na, jambo gumu kupima lakini la kweli vilevile, kunaweka wahandisi kwenye mtiririko badala ya kubadilisha muktadha. Kache ya mbali na nyongeza nzuri mara nyingi hujilipa ndani ya wiki. Mabaki yanayozalishika upya, ya kupandisha-mara-moja hupunguza daraja zima la matukio ya “ilifanya kazi kwenye maandalizi”, yakipunguza kiwango cha kushindwa kwa mabadiliko na muda wa wastani wa kupona, vipimo vya utoaji ambavyo viongozi tayari wanavitazama.

Faida kubwa zaidi, isiyoonekana sana, ni kupunguza hatari. Mabaki yaliyosainiwa, SBOM, na asili hugeuza tukio la mnyororo wa ugavi kutoka dharura ya wiki nyingi kuwa mwitikio wenye mipaka wa masaa, na hugeuza ukaguzi kutoka mazoezi ya dharura kuwa swali. Katika mazingira ya serikali na yanayodhibitiwa, ufuatiliaji huo ni sharti la kufanya kazi kabisa, kwa hiyo uwekezaji si wa hiari bali wa kimuundo. Jumla ya gharama ya umiliki inakwenda upande mwingine mkiliacha hili: mabaki yanayobadilika na ujenzi usiozalishika upya hujilimbikiza kuwa eneo ambalo hakuna anayeweza kulihesabu kikamilifu, hifadhi inakua bila mipaka bila sera ya uhifadhi, na kila ukaguzi na kila tukio kinagharimu zaidi ya inavyostahili. Kutoa hoja kwa uongozi, unganisha kasi ya ujenzi na mtiririko wa kihandisi na uunganishe uadilifu wa mabaki na gharama ya ukaguzi na mfiduo wa uvunjaji, vyote ambavyo tayari wanafadhili.

Mifumo mibaya na mitego

  • Kujenga upya kwa kila mazingira: kuzalisha baiti mpya kwa maandalizi na uzalishaji, kutupa dhamana kwamba mabaki yaliyojaribiwa ndiyo yaliyosambazwa.
  • Kusambaza kwa lebo inayoelea: kuendesha “latest” au lebo inayobadilika badala ya digesti isiyobadilika, kwa hiyo kinachoendesha hakitabiriki wala kufuatilika.
  • Hakuna faili ya kufunga: safu za matoleo zinazoelea zinazoruhusu ujenzi kuvuta kimyakimya utegemezi tofauti au wenye madhara kwa muda.
  • Funguo zisizokamilika za kache: kuacha pembejeo halisi kwenye ufunguo wa kache, kuzalisha matokeo yaliyopitwa yanayopoteza siku za utatuzi.
  • Kache ya pamoja isiyolindwa: kuwaacha waandishi wasioaminika kutia sumu kache ya mbali ili watumiaji wapakue na kuendesha matokeo yaliyoathirika.
  • Ujenzi usio na uamuzi: mihuri ya wakati iliyopachikwa, njia kamili za faili, na zana zisizobandikwa zinazofanya matokeo yatofautiane na kuzuia uthibitisho.
  • Kupokea zana nzito mapema: kuchukua ugumu wa daraja la Bazel kabla grafu ya ujenzi haijawa kubwa vya kutosha kuuhalalisha.
  • SBOM na asili kama wazo la baadaye: kujenga upya metadata ya mnyororo wa ugavi baada ya ujenzi, inapokuwa ghali na isiyotegemewa, badala ya kuizalisha kwenye ujenzi.
  • Uhifadhi usio na mipaka: kutomaliza muda wa mabaki ya zamani hadi gharama ya hifadhi na utafutaji wa polepole vilazimishe usafishaji wa haraka.

Kielelezo cha ukomavu

  • Ngazi ya 1, Kuanzisha: Ujenzi ni hati za papo hapo ambazo hakuna anayemiliki, mara nyingi zinaendeshwa kutoka mashine za wasanidi. Matokeo hayana uamuzi, utegemezi unaelea bila faili za kufunga, mabaki yanajengwa upya kwa kila mazingira na kusambazwa kwa lebo inayobadilika, na hakuna kache ya pamoja, kusaini, wala orodha ya vifaa.
  • Ngazi ya 2, Kuendeleza: Baadhi ya timu zimehamisha ujenzi hadi CI kutoka fasili iliyohifadhiwa na kupokea faili za kufunga, lakini mazoea hayana uthabiti kuvuka shirika. Mabaki yanaweza kutua kwenye hazina inayosimamiwa yenye matoleo ya msingi, na kache ya ndani au rahisi ya mbali huharakisha ujenzi wa kawaida, lakini ujenzi upya kwa kila mazingira bado unatokea na asili ina mapengo.
  • Ngazi ya 3, Kusawazisha: Ujenzi unaozalishika upya, ulio na kutengwa kwa kiasi kikubwa umeandikwa na kutekelezwa kote shirikani, ukiwa na minyororo ya zana iliyobandikwa na kache ya mbali ya pamoja ambayo funguo zake zinahesabu heshi ya pembejeo zote halisi. Mabaki ni yasiyobadilika, yenye anwani ya maudhui, yenye matoleo ya kisemantiki, yanajengwa mara moja na kupandishwa kila mahali, yanasainiwa, na kusafirishwa pamoja na SBOM. Ufikiaji wa kache unadhibitiwa na sera za uhifadhi zinatumika kwa uthabiti kuvuka timu.
  • Ngazi ya 4, Kusimamia: Eneo la ujenzi linapimwa na kudhibitiwa dhidi ya vipimo vya msingi. Nyakati za ujenzi, viwango vya mafanikio ya kache, muda wa maoni ya msanidi, na gharama ya hifadhi vinafuatiliwa kwa malengo wazi, kurudi nyuma kunachochea hatua, na uthibitisho wa saini na asili unatekelezwa wakati wa usambazaji ili ukaguzi ulioshindwa uzuie toleo. Uadilifu wa mnyororo wa ugavi wa wakati wa ujenzi unatathminiwa dhidi ya mfumo wenye ngazi kama SLSA, na namba zinaendesha mahali pa kuwekeza baadaye.
  • Ngazi ya 5, Kuratibu: Mazoea ya ujenzi, kache, mabaki, na mnyororo wa ugavi yanaboreshwa mfululizo na kuunganishwa kuvuka shirika. Zana, uhifadhi, na msimamo wa usalama vinajirekebisha mnapojifunza kutokana na matukio na ukaguzi, utekelezaji wa mbali na kache vinarekebishwa msingi wa msimbo unavyobadilika, na uadilifu wa wakati wa ujenzi umefumwa kwenye mzunguko salama wa maisha ya uundaji kwa upana badala ya kubandikwa baadaye.

Mawazo ya kujadili

  1. Wastani na mbaya zaidi wa muda wenu wa sasa wa ujenzi wa ndani ni upi, na kache ya mbali ingefanya nini kwa kila mmoja?
  2. Mabaki yenu yapi yanasambazwa kwa lebo inayobadilika leo, na ingechukua nini kusambaza kila moja kwa digesti?
  3. Grafu yenu ya ujenzi inahalalisha zana nzito wapi, na wapi zana hiyo ingegharimu zaidi ya inavyookoa?
  4. Nani anaweza kuandika kwenye kache yenu ya ujenzi ya pamoja, na nini kinazuia kipengele chenye sumu kufika uzalishaji?
  5. Mnaweza kuzalisha SBOM iliyosainiwa kwa kitu cha mwisho mlichosafirisha, na ikiwa sivyo, hatua ndogo zaidi kuelekea hilo ni ipi?
  6. Sera yenu ya uhifadhi wa mabaki ya ujenzi ni ipi, na hifadhi inawagharimu nini leo dhidi ya inavyopaswa?

Mambo muhimu ya kukumbuka

  • Ujenzi ni hatua ya kwanza ya utoaji: fadhili kasi na usahihi wake kama wasiwasi wa uzalishaji, kwa sababu kila kitu cha chini ya mkondo kinarithi kasoro zake.
  • Fanya ujenzi uzalishike upya na, inapowezekana, uliotengwa kabisa, kwa minyororo ya zana iliyobandikwa na faili za kufunga, ili mabaki mnayokagua yathibitike kuwa ndiyo mnayosafirisha.
  • Tumia kache na jenga kwa nyongeza, ndani na kwa mbali, lakini hesabu heshi ya kila pembejeo halisi na ulinde kache, kwa sababu kache ya pamoja ni mpaka wa uaminifu wa pamoja.
  • Jenga kila mabaki mara moja, yafanye yasiyobadilika na yenye anwani ya maudhui, yawekee matoleo yenye maana, na pandisha mabaki hayohayo kuvuka mazingira.
  • Zalisha asili, saini, na SBOM wakati wa ujenzi na uhifadhi mabaki kwa uhifadhi na udhibiti wa ufikiaji, ukigeuza uadilifu wa mnyororo wa ugavi na utayari wa ukaguzi kuwa zao la pembeni la kazi ya kawaida.

Marejeo na usomaji zaidi

  • Jez Humble and David Farley, Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
  • Nicole Forsgren, Jez Humble, and Gene Kim, Accelerate: The Science of Lean Software and DevOps
  • Titus Winters, Tom Manshreck, and Hyrum Wright (eds.), Software Engineering at Google: Lessons Learned from Programming Over Time
  • Betsy Beyer, Chris Jones, Jennifer Petoff, and Niall Richard Murphy (eds.), Site Reliability Engineering: How Google Runs Production Systems
  • Peter Smith, Software Build Systems: Principles and Experience
  • The Open Source Security Foundation, SLSA: Supply-chain Levels for Software Artifacts (specification)
  • National Institute of Standards and Technology, Secure Software Development Framework (SSDF), SP 800-218
  • Tom Preston-Werner, Semantic Versioning Specification (SemVer)