Kujaribu Miundombinu kama Kanuni na Pulumi. Sehemu 2

Salaam wote. Leo tunashiriki nawe sehemu ya mwisho ya makala hiyo. "Kujaribu Miundombinu kama Kanuni na Pulumi", tafsiri yake ilitayarishwa mahsusi kwa wanafunzi wa kozi "Mazoea na zana za DevOps".

Kujaribu Miundombinu kama Kanuni na Pulumi. Sehemu 2

Mtihani wa kupeleka

Mtindo huu wa majaribio ni mbinu bora na huturuhusu kufanya majaribio ya kisanduku cheupe ili kujaribu utendakazi wa ndani wa msimbo wetu wa miundombinu. Walakini, inaweka mipaka kwa kile tunaweza kujaribu. Majaribio yanafanywa kulingana na mpango wa uwekaji wa kumbukumbu ulioundwa na Pulumi kabla ya uwekaji halisi na kwa hivyo uwekaji wenyewe hauwezi kujaribiwa. Kwa hali kama hizi, Pulumi ina mfumo wa mtihani wa ujumuishaji. Na njia hizi mbili zinafanya kazi vizuri pamoja!

Mfumo wa majaribio ya ujumuishaji wa Pulumi umeandikwa katika Go, ambayo ni jinsi tunavyojaribu misimbo yetu mingi ya ndani. Ingawa mbinu ya upimaji wa kitengo iliyojadiliwa hapo awali ilikuwa kama jaribio la kisanduku cheupe, jaribio la ujumuishaji ni kisanduku cheusi. (Pia kuna chaguo za majaribio makali ya ndani.) Mfumo huu uliundwa ili kuchukua programu kamili ya Pulumi na kufanya shughuli mbalimbali za mzunguko wa maisha juu yake, kama vile kupeleka rundo jipya kutoka mwanzo, kuisasisha kwa tofauti, na kuifuta, ikiwezekana mara kadhaa. . Tunaziendesha mara kwa mara (kwa mfano, usiku) na kama vipimo vya mkazo.

(Sisi tunalifanyia kazi, ili uwezo sawa wa majaribio ya ujumuishaji upatikane katika SDK asili ya lugha. Unaweza kutumia mfumo wa majaribio ya ujumuishaji wa Go bila kujali lugha ambayo programu yako ya Pulumi imeandikwa).

Kwa kuendesha programu kwa kutumia mfumo huu unaweza kuangalia zifuatazo:

  • Msimbo wako wa mradi ni sahihi kisintaksia na huendesha bila makosa.
  • Mipangilio ya usanidi wa stack na siri hufanya kazi na inafasiriwa kwa usahihi.
  • Mradi wako unaweza kutumwa kwa mafanikio katika mtoaji wa wingu unaopenda.
  • Mradi wako unaweza kuboreshwa kwa ufanisi kutoka hali ya awali hadi mataifa mengine N.
  • Mradi wako unaweza kuharibiwa na kuondolewa kutoka kwa mtoa huduma wako wa wingu.

Kama tutakavyoona hivi punde, mfumo huu unaweza pia kutumika kutekeleza uthibitishaji wa wakati wa utekelezaji.

Mtihani rahisi wa ujumuishaji

Ili kuona hili likifanya kazi, tutaangalia hazina pulumi/examples, kama timu yetu na jumuiya ya Pulumi inavyoitumia kujaribu maombi yetu wenyewe ya kuvuta, kujitolea na ujenzi wa kila usiku.

Chini ni mtihani rahisi wa yetu mfano ambao hutoa ndoo ya S3 na vitu vingine:

example_test.go:

package test
 
import (
    "os"
    "path"
    "testing"
 
    "github.com/pulumi/pulumi/pkg/testing/integration"
)
 
func TestExamples(t *testing.T) {
    awsRegion := os.Getenv("AWS_REGION")
    if awsRegion == "" {
        awsRegion = "us-west-1"
    }
    cwd, _ := os.Getwd()
    integration.ProgramTest(t, &integration.ProgramTestOptions{
        Quick:       true,
        SkipRefresh: true,
        Dir:         path.Join(cwd, "..", "..", "aws-js-s3-folder"),
        Config: map[string]string{
            "aws:region": awsRegion,
        },
    })
}

Jaribio hili hupitia mzunguko wa maisha wa kimsingi wa kuunda, kurekebisha, na kuharibu safu ya folda aws-js-s3-folder. Itachukua kama dakika moja kuripoti mtihani uliofaulu:

$ go test .
PASS
ok      ... 43.993s

Kuna chaguo nyingi za kubinafsisha tabia ya majaribio haya. Tazama orodha kamili ya chaguzi. katika muundo ProgramTestOptions. Kwa mfano, unaweza kusanidi mwisho wa Jaeger ili kufuatilia (Tracing), onyesha kuwa unatarajia mtihani kutofaulu ikiwa upimaji ni hasi (ExpectFailure), tumia msururu wa "maharirio" kwa programu kwa mpito mfuatano wa majimbo (EditDirs) na mengi zaidi. Hebu tuone jinsi ya kuzitumia ili kujaribu utumaji programu yako.

Kuangalia sifa za rasilimali

Ujumuishaji uliojadiliwa hapo juu unahakikisha kuwa programu yetu "inafanya kazi" -haivunji. Lakini vipi ikiwa tunataka kuangalia mali ya safu inayosababishwa? Kwa mfano, kwamba aina fulani za rasilimali zimetolewa (au hazijatolewa) na kwamba zina sifa fulani.

Parameter ExtraRuntimeValidation kwa ProgramTestOptions huturuhusu kuangalia hali ya baada ya kutumwa iliyorekodiwa na Pulumi ili tuweze kufanya ukaguzi wa ziada. Hii ni pamoja na muhtasari kamili wa hali ya mrundikano unaotokana, ikijumuisha usanidi, thamani za pato zilizohamishwa, rasilimali zote na thamani za mali zao, na tegemezi zote kati ya rasilimali.

Ili kuona mfano wa msingi wa hii, hebu tuangalie ikiwa programu yetu inaunda moja Ndoo ya S3:

  integration.ProgramTest(t, &integration.ProgramTestOptions{
        // as before...
        ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
            var foundBuckets int
            for _, res := range stack.Deployment.Resources {
                if res.Type == "aws:s3/bucket:Bucket" {
                    foundBuckets++
                }
            }
            assert.Equal(t, 1, foundBuckets, "Expected to find a single AWS S3 Bucket")
        },
    })

Sasa, tunapoendesha go test, haitapitia tu betri ya majaribio ya mzunguko wa maisha, lakini pia, baada ya kusambaza stack kwa ufanisi, itafanya ukaguzi wa ziada kwenye hali inayosababisha.

Vipimo vya wakati wa kukimbia

Kufikia sasa, majaribio yote yamekuwa kuhusu tabia ya kupeleka na modeli ya rasilimali ya Pulumi. Je, ikiwa ungependa kuthibitisha kuwa miundombinu yako uliyopewa inafanya kazi kweli? Kwa mfano, kwamba mashine ya kawaida inaendesha, ndoo ya S3 ina kile tunachotarajia, na kadhalika.

Huenda tayari umekisia jinsi ya kufanya hivi: chaguo ExtraRuntimeValidation kwa ProgramTestOptions - hii ni fursa nzuri kwa hili. Kwa wakati huu, unaendesha jaribio maalum la Go na ufikiaji wa hali kamili ya rasilimali za programu yako. Hali hii inajumuisha maelezo kama vile anwani za IP za mashine, URL, na kila kitu kinachohitajika ili kuingiliana na programu na miundombinu ya wingu.

Kwa mfano, programu yetu ya majaribio inasafirisha mali webEndpoint ndoo iliita websiteUrl, ambayo ni URL kamili ambapo tunaweza kupata usanidi index document. Ingawa tunaweza kuchimba faili ya serikali kupata bucket na usome mali hiyo moja kwa moja, lakini katika hali nyingi rafu zetu husafirisha mali muhimu kama hii ambayo tunaona inafaa kutumia kwa kuangalia:

integration.ProgramTest(t, &integration.ProgramTestOptions{
            // as before ...
        ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
            url := "http://" + stack.Outputs["websiteUrl"].(string)
            resp, err := http.Get(url)
            if !assert.NoError(t, err) {
                return
            }
            if !assert.Equal(t, 200, resp.StatusCode) {
                return
            }
            defer resp.Body.Close()
            body, err := ioutil.ReadAll(resp.Body)
            if !assert.NoError(t, err) {
                return
            }
            assert.Contains(t, string(body), "Hello, Pulumi!")
        },
    })

Kama vile ukaguzi wetu wa awali wa wakati wa utekelezaji, hundi hii itatekelezwa mara tu baada ya kuongeza rafu, yote kwa kuitikia wito rahisi. go test. Na hiyo ni kidokezo tu cha barafu-kila kipengele cha jaribio la Go unachoweza kuandika kwa msimbo kinapatikana.

Muunganisho wa Miundombinu unaoendelea

Ni vyema kuwa na uwezo wa kufanya majaribio kwenye kompyuta ya mkononi wakati mabadiliko mengi ya miundombinu yanafanywa ili kuyajaribu kabla ya kuyawasilisha kwa ukaguzi wa msimbo. Lakini sisi na wateja wetu wengi tunajaribu miundombinu katika hatua mbalimbali za mzunguko wa maisha ya maendeleo:

  • Katika kila ombi la kuvuta wazi la majaribio kabla ya kuunganishwa.
  • Kujibu kila ahadi, angalia mara mbili ikiwa unganisho ulifanywa kwa usahihi.
  • Mara kwa mara, kama vile usiku au kila wiki kwa majaribio ya ziada.
  • Kama sehemu ya majaribio ya utendaji au mfadhaiko, ambayo kwa kawaida huchukua muda mrefu na hufanya majaribio sambamba na/au kutumia programu sawa mara kadhaa.

Kwa kila moja ya haya, Pulumi inasaidia ujumuishaji na mfumo wako unaopenda wa ujumuishaji endelevu. Kwa ujumuishaji unaoendelea, hii hukupa chanjo sawa ya jaribio la miundombinu yako kama ya programu yako ya programu.

Pulumi ina msaada kwa mifumo ya kawaida ya CI. Hapa kuna baadhi yao:

Kwa habari zaidi, tafadhali rejelea hati za Uwasilishaji unaoendelea.

Mazingira ya Ephemeral

Fursa yenye nguvu sana inayofunguliwa ni uwezo wa kupeleka mazingira ya muda mfupi kwa madhumuni ya majaribio ya kukubalika pekee. Dhana miradi na rundo Pulumi imeundwa kusambaza na kubomoa kwa urahisi mazingira yaliyotengwa na huru, yote katika amri chache rahisi za CLI au kutumia mfumo wa majaribio ya ujumuishaji.

Ikiwa unatumia GitHub, basi Pulumi inatoa Programu ya GitHub, ambayo itakusaidia kuunganisha majaribio ya kukubalika ili kuvuta maombi ndani ya bomba lako la CI. Sakinisha tu programu kwenye hazina ya GitHub, na Pulumi itaongeza maelezo kuhusu muhtasari wa miundomsingi, masasisho na matokeo ya majaribio kwenye CI na maombi yako ya hifadhi:

Kujaribu Miundombinu kama Kanuni na Pulumi. Sehemu 2

Unapotumia Pulumi kwa majaribio yako ya msingi ya kukubalika, utapata uwezo mpya wa kiotomatiki ambao utaboresha tija ya timu na kukupa imani katika ubora wa mabadiliko yako.

Jumla ya

Katika makala haya, tumeona kwamba kwa kutumia lugha za upangaji wa madhumuni ya jumla, mbinu nyingi za ukuzaji programu zinapatikana kwetu ambazo zimekuwa muhimu katika kutengeneza programu zetu. Ni pamoja na upimaji wa kitengo, majaribio ya ujumuishaji, na jinsi wanavyofanya kazi pamoja kufanya majaribio ya kina ya wakati wa utekelezaji. Majaribio ni rahisi kufanya kulingana na mahitaji au katika mfumo wako wa CI.

Pulumi - programu ya chanzo wazi, bure kutumia na inafanya kazi na lugha unazopenda za programu na mawingu - jaribu leo!

β†’ sehemu ya kwanza

Chanzo: mapenzi.com

Kuongeza maoni