Pagsulay sa Infrastruktura isip Code sa Pulumi. Bahin 2

Kumusta tanan. Karon among gipaambit kanimo ang katapusang bahin sa artikulo. "Pagsulay sa Infrastruktura isip Code sa Pulumi", ang paghubad niini giandam alang sa mga estudyante sa kurso "Mga gawi ug himan sa DevOps".

Pagsulay sa Infrastruktura isip Code sa Pulumi. Bahin 2

Pagsulay sa deployment

Kini nga istilo sa pagsulay usa ka kusgan nga pamaagi ug gitugotan kami sa paghimo sa pagsulay sa puti nga kahon aron masulayan ang mga internal nga pagtrabaho sa among code sa imprastraktura. Bisan pa, kini medyo naglimite sa kung unsa ang atong masulayan. Ang mga pagsulay gihimo base sa in-memory deployment plan nga gihimo ni Pulumi sa wala pa ang aktuwal nga deployment ug busa ang deployment mismo dili masulayan. Alang sa maong mga kaso, ang Pulumi adunay usa ka integration test framework. Ug kining duha ka mga pamaagi nagtinabangay nga maayo!

Ang Pulumi integration testing framework gisulat sa Go, nga mao ang paagi sa pagsulay sa kadaghanan sa atong internal nga code. Samtang ang una nga gihisgutan nga pamaagi sa pagsulay sa yunit labi ka sama sa pagsulay sa puti nga kahon, ang pagsulay sa panagsama usa ka itom nga kahon. (Adunay usab mga kapilian alang sa higpit nga internal nga pagsulay.) Kini nga balangkas gihimo aron makakuha usa ka kompleto nga programa sa Pulumi ug himuon ang lainlaing mga operasyon sa siklo sa kinabuhi niini, sama sa pag-deploy sa usa ka bag-ong stack gikan sa wala, pag-update niini nga adunay mga kalainan, ug pagtangtang niini, mahimo’g daghang beses. . Kanunay namong gipadagan kini (pananglitan, sa gabii) ug isip mga pagsulay sa stress.

(Kami ginabuhat namo kini, aron ang susamang mga kapabilidad sa pagsulay sa panagsama anaa sa lumad nga SDK sa mga pinulongan. Mahimo nimong gamiton ang Go integration testing framework bisan unsa pa ang pinulongan diin gisulat ang imong Pulumi program).

Pinaagi sa pagpadagan sa programa gamit kini nga balangkas mahimo nimong susihon ang mosunod:

  • Ang imong code sa proyekto kay syntactically husto ug nagdagan nga walay mga sayop.
  • Ang stack ug mga sekreto nga mga setting sa pag-configure nagtrabaho ug husto nga gihubad.
  • Ang imong proyekto mahimong malampuson nga ma-deploy sa cloud provider nga imong gipili.
  • Ang imong proyekto mahimong malampuson nga ma-upgrade gikan sa inisyal nga estado ngadto sa N ubang mga estado.
  • Ang imong proyekto mahimong malampuson nga malaglag ug matangtang gikan sa imong cloud provider.

Sama sa atong makita sa dili madugay, kini nga balangkas mahimo usab nga gamiton sa paghimo sa runtime validation.

Yano nga pagsulay sa panagsama

Aron makita kini nga aksyon, atong tan-awon ang repositoryo pulumi/examples, samtang gigamit kini sa among team ug sa komunidad sa Pulumi aron sulayan ang among kaugalingon nga mga hangyo sa pagbitad, pag-commit, ug matag gabii nga pagtukod.

Sa ubos usa ka gipasimple nga pagsulay sa among pananglitan nga naghatag ug S3 nga balde ug uban pang mga butang:

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,
        },
    })
}

Kini nga pagsulay moagi sa sukaranan nga siklo sa kinabuhi sa paghimo, pagbag-o, ug pagguba sa usa ka stack alang sa usa ka folder aws-js-s3-folder. Mokabat ug usa ka minuto ang pagreport sa usa ka nakapasar nga pagsulay:

$ go test .
PASS
ok      ... 43.993s

Adunay daghang mga kapilian aron ipasibo ang pamatasan sa kini nga mga pagsulay. Tan-awa ang tibuok listahan sa mga opsyon. sa istruktura ProgramTestOptions. Pananglitan, mahimo nimong i-configure ang Jaeger endpoint aron masubay (Tracing), ipakita nga imong gilauman nga mapakyas ang pagsulay kung negatibo ang pagsulay (ExpectFailure), i-apply ang usa ka serye sa "mga pag-edit" sa programa alang sa sunod-sunod nga transisyon sa mga estado (EditDirs) ug daghan pa. Atong tan-awon kon unsaon kini paggamit sa pagsulay sa imong pagdeploy sa aplikasyon.

Pagsusi sa mga kabtangan sa kapanguhaan

Ang panagsama nga gihisgutan sa ibabaw nagsiguro nga ang among programa "motrabaho" - dili kini maguba. Apan komosta kung gusto natong susihon ang mga kabtangan sa resulta nga stack? Pananglitan, nga ang pipila ka mga matang sa mga kapanguhaan adunay (o wala) gihatag ug nga sila adunay piho nga mga kinaiya.

Parameter ExtraRuntimeValidation alang sa ProgramTestOptions nagtugot kanamo sa pagtan-aw sa post-deployment nga estado nga natala ni Pulumi aron makahimo kami og dugang nga mga pagsusi. Naglakip kini sa usa ka kompleto nga snapshot sa kahimtang sa resulta nga stack, lakip ang pag-configure, gi-eksport nga mga kantidad sa output, tanan nga mga kapanguhaan ug mga kantidad sa ilang kabtangan, ug tanan nga mga dependency tali sa mga kapanguhaan.

Aron makita ang usa ka sukaranan nga pananglitan niini, atong susihon kung ang among programa nagmugna og usa S3 nga balde:

  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")
        },
    })

Karon, kung magpadagan kami sa pagsulay, dili lamang kini moagi sa usa ka baterya sa mga pagsulay sa lifecycle, apan usab, pagkahuman sa malampuson nga pag-deploy sa stack, maghimo kini usa ka dugang nga pagsusi sa sangputanan nga estado.

Mga pagsulay sa runtime

Hangtod karon, ang tanan nga mga pagsulay pulos bahin sa pamatasan sa pag-deploy ug ang modelo sa kapanguhaan sa Pulumi. Unsa kaha kung gusto nimong pamatud-an nga ang imong gihatag nga imprastraktura tinuod nga nagtrabaho? Pananglitan, nga ang virtual nga makina nagdagan, ang S3 nga balde naglangkob sa unsay atong gipaabut, ug uban pa.

Tingali nakatag-an na ka kung unsaon pagbuhat niini: kapilian ExtraRuntimeValidation alang sa ProgramTestOptions - Kini usa ka dako nga oportunidad alang niini. Niini nga punto, nagpadagan ka usa ka naandan nga pagsulay sa Go nga adunay access sa tibuuk nga kahimtang sa mga kapanguhaan sa imong programa. Kini nga estado naglakip sa impormasyon sama sa virtual machine nga mga IP address, URL, ug tanan nga gikinahanglan aron aktuwal nga makig-uban sa resulta nga cloud applications ug infrastructure.

Pananglitan, ang among test program nag-eksport sa kabtangan webEndpoint balde gitawag websiteUrl, nga mao ang bug-os nga URL diin atong makuha ang configured index document. Bisan kung mahimo namon magkalot sa file sa estado aron makit-an bucket ug direkta nga basahon kana nga kabtangan, apan sa daghang mga kaso ang among mga stack nag-eksport sa mapuslanon nga mga kabtangan nga sama niini nga nakit-an namon nga dali gamiton alang sa pagsusi:

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!")
        },
    })

Sama sa among nangaging runtime nga mga tseke, kini nga tseke ipatuman dayon pagkahuman sa pagpataas sa stack, tanan agig tubag sa usa ka yano nga tawag go test. Ug kana ra ang tumoy sa icebergβ€”ang matag bahin sa pagsulay sa Go nga mahimo nimong isulat sa code magamit.

Padayon nga Infrastructure Integration

Maayo nga makahimo sa pagpadagan sa mga pagsulay sa usa ka laptop kung daghang mga pagbag-o sa imprastraktura ang gihimo aron sulayan kini sa wala pa isumite kini alang sa pagrepaso sa code. Apan kami ug daghan sa among mga kliyente nagsulay sa imprastraktura sa lainlaing mga yugto sa siklo sa kinabuhi sa pag-uswag:

  • Sa matag bukas nga paghangyo sa pagbitad alang sa pagsulay sa dili pa maghiusa.
  • Agig tubag sa matag pasalig, pag-double check nga ang paghiusa nahimo sa husto.
  • Matag karon ug unya, sama sa gabii o kada semana alang sa dugang nga pagsulay.
  • Isip kabahin sa performance o stress testing, nga kasagarang modagan sulod sa taas nga yugto sa panahon ug magpadagan sa mga pagsulay nga magkaparehas ug/o mag-deploy sa samang programa sa makadaghang higayon.

Alang sa matag usa niini, gisuportahan sa Pulumi ang paghiusa sa imong paborito nga padayon nga sistema sa panagsama. Uban sa padayon nga panagsama, kini naghatag kanimo sa parehas nga pagsakup sa pagsulay alang sa imong imprastraktura sama sa imong software sa aplikasyon.

Ang Pulumi adunay suporta alang sa kasagaran nga mga sistema sa CI. Ania ang pipila niini:

Para sa mas detalyado nga impormasyon, palihog tan-awa ang dokumentasyon para sa Padayon nga Paghatud.

Ephemeral nga Kalibutan

Usa ka kusgan kaayo nga oportunidad nga nagbukas mao ang abilidad sa pag-deploy sa mga ephemeral nga palibot alang lamang sa mga katuyoan sa pagsulay sa pagdawat. Konsepto mga proyekto ug mga stack Ang Pulumi gidisenyo aron dali nga ma-deploy ug maguba ang hingpit nga nahimulag ug independente nga mga palibot, tanan sa pipila ka yano nga mga mando sa CLI o gamit ang usa ka balangkas sa pagsulay sa panagsama.

Kung mogamit ka sa GitHub, unya ang Pulumi nagtanyag GitHub App, nga makatabang kanimo sa pagkonektar sa pagsulay sa pagdawat aron makuha ang mga hangyo sulod sa imong pipeline sa CI. I-install lang ang aplikasyon sa GitHub repository, ug ang Pulumi magdugang og impormasyon bahin sa mga preview sa imprastraktura, mga update ug mga resulta sa pagsulay sa imong mga hangyo sa CI ug pool:

Pagsulay sa Infrastruktura isip Code sa Pulumi. Bahin 2

Kung gigamit nimo ang Pulumi alang sa imong panguna nga mga pagsulay sa pagdawat, makakuha ka bag-ong mga kapabilidad sa automation nga makapauswag sa produktibidad sa team ug maghatag kanimo pagsalig sa kalidad sa imong mga pagbag-o.

Ang resulta

Niini nga artikulo, among nakita nga pinaagi sa paggamit sa kinatibuk-ang katuyoan nga mga programming language, daghang mga teknik sa pagpalambo sa software ang magamit kanamo nga mapuslanon sa pagpalambo sa among mga aplikasyon. Naglakip kini sa pagsulay sa yunit, pagsulay sa panagsama, ug kung giunsa nila pagtinabangay aron mahimo ang daghang pagsulay sa runtime. Ang mga pagsulay dali nga ipadagan kung gipangayo o sa imong sistema sa CI.

Pulumi - bukas nga gigikanan nga software, libre nga magamit ug magamit sa imong paborito nga mga sinultian sa programming ug mga panganod - sulayi kini karon!

β†’ Una nga bahin

Source: www.habr.com

Idugang sa usa ka comment