Дэд бүтцийг Пулуми код болгон турших. 2-р хэсэг

Сайн уу. Өнөөдөр бид нийтлэлийнхээ эцсийн хэсгийг та бүхэнтэй хуваалцаж байна. "Дэд бүтцийг Пулуми код болгон турших", орчуулгыг курсын оюутнуудад тусгайлан бэлтгэсэн "DevOps практик ба хэрэгслүүд".

Дэд бүтцийг Пулуми код болгон турших. 2-р хэсэг

Байршуулах туршилт

Энэхүү туршилтын хэв маяг нь хүчирхэг арга бөгөөд бидэнд дэд бүтцийн кодын дотоод ажиллагааг шалгахын тулд цагаан хайрцагны тест хийх боломжийг олгодог. Гэсэн хэдий ч энэ нь бидний туршиж болох зүйлийг тодорхой хэмжээгээр хязгаарладаг. Туршилтыг Пулумигийн бодит байршуулалтаас өмнө бүтээсэн санах ойд байршуулах төлөвлөгөөнд үндэслэн гүйцэтгэдэг тул байршуулалтыг өөрөө шалгах боломжгүй юм. Ийм тохиолдлын хувьд Пулуми нь интеграцийн тестийн тогтолцоотой байдаг. Мөн эдгээр хоёр арга нь хамтдаа маш сайн ажилладаг!

Пулуми интеграцийн тестийн хүрээ нь Go программ дээр бичигдсэн бөгөөд ингэснээр бид дотоод кодын ихэнх хэсгийг туршиж үздэг. Өмнө нь хэлэлцсэн нэгжийн туршилтын арга нь цагаан хайрцагны тесттэй адил байсан бол интеграцийн тест нь хар хайрцаг юм. (Мөн нарийн дотоод шалгалт хийх сонголтууд байдаг.) ​​Энэхүү хүрээ нь Пулуми программыг бүрэн авч, түүн дээр шинэ стекийг эхнээс нь байршуулах, өөрчлөлтөөр шинэчлэх, хэд хэдэн удаа устгах гэх мэт амьдралын мөчлөгийн янз бүрийн үйлдлүүдийг гүйцэтгэх зорилгоор бүтээгдсэн. . Бид тэдгээрийг тогтмол (жишээлбэл, шөнийн цагаар) болон стресс тест болгон ажиллуулдаг.

(Бид Бид үүн дээр ажиллаж байна, ингэснээр ижил төстэй интеграцийн туршилтын чадавхийг эх хэлний SDK-д ашиглах боломжтой. Та Pulumi програмаа бичсэн хэлээс үл хамааран Go интеграцийн тестийн хүрээг ашиглаж болно).

Энэ хүрээг ашиглан програмыг ажиллуулснаар та дараахь зүйлийг шалгаж болно.

  • Таны төслийн код синтаксийн хувьд зөв бөгөөд алдаагүй ажилладаг.
  • Стек болон нууцын тохиргооны тохиргоонууд ажиллаж, зөв ​​тайлбарлагддаг.
  • Таны төслийг таны сонгосон үүлэн үйлчилгээ үзүүлэгч дээр амжилттай байрлуулж болно.
  • Таны төслийг анхны төлөвөөс өөр N муж руу амжилттай сайжруулж болно.
  • Таны төслийг амжилттай устгаж, үүлэн үйлчилгээ үзүүлэгчээс устгаж болно.

Бидний удахгүй харах болно, энэ хүрээг мөн ажиллах цагийн баталгаажуулалтыг хийхэд ашиглаж болно.

Энгийн интеграцийн тест

Үүнийг ажил хэрэг болгохын тулд бид агуулахыг харна pulumi/examples, Манай баг болон Пулуми нийгэмлэг үүнийг өөрсдийн татах хүсэлт, үүрэг даалгавар, шөнийн бүтээн байгуулалтыг шалгахад ашигладаг.

Доорх нь бидний хялбаршуулсан тест юм жишээ нь S3 хувин болон бусад объектуудыг өгдөг:

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

Энэ тест нь фолдерт зориулсан стек үүсгэх, өөрчлөх, устгах үндсэн амьдралын мөчлөгийг дамждаг aws-js-s3-folder. Шалгалтад тэнцсэн тухай мэдээлэхэд нэг минут орчим болно:

$ go test .
PASS
ok      ... 43.993s

Эдгээр туршилтуудын зан төлөвийг өөрчлөх олон сонголт байдаг. Сонголтуудын бүрэн жагсаалтыг үзнэ үү. бүтцэд ProgramTestOptions. Жишээлбэл, та Jaeger төгсгөлийн цэгийг мөрдөхийн тулд тохируулж болно (Tracing), хэрэв тест сөрөг байвал тест амжилтгүй болно гэж найдаж байгаагаа илэрхийлнэ үү (ExpectFailure), төлөвүүдийг дараалан шилжүүлэх хөтөлбөрт хэд хэдэн "засвар" хийх (EditDirs) болон бусад олон. Аппликэйшний байршуулалтыг шалгахын тулд тэдгээрийг хэрхэн ашиглахыг харцгаая.

Нөөцийн шинж чанарыг шалгаж байна

Дээр дурдсан интеграци нь манай програмыг "ажиллах"-ыг баталгаажуулдаг - энэ нь гацахгүй. Гэхдээ бид үүссэн стекийн шинж чанарыг шалгахыг хүсвэл яах вэ? Жишээлбэл, тодорхой төрлийн нөөцийг хангасан (эсвэл хийгээгүй) ба тэдгээрт тодорхой шинж чанарууд байдаг.

Үзүүлэлт ExtraRuntimeValidation нь ProgramTestOptions Энэ нь Пулумигийн бичсэн байршуулалтын дараах төлөвийг харах боломжийг бидэнд олгодог бөгөөд ингэснээр бид нэмэлт шалгалт хийх боломжтой болно. Үүнд тохиргоо, экспортлогдсон гаралтын утгууд, бүх нөөц ба тэдгээрийн өмчийн үнэ цэнэ, нөөц хоорондын бүх хамаарал зэрэг үүссэн стекийн төлөвийн бүрэн агшин агшин багтана.

Үүний үндсэн жишээг харахын тулд манай программ үүсгэж байгаа эсэхийг шалгацгаая 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")
        },
    })

Одоо go test-г ажиллуулахад энэ нь зөвхөн амьдралын мөчлөгийн туршилтын батарейг даваад зогсохгүй стекийг амжилттай байрлуулсны дараа үүссэн төлөвт нэмэлт шалгалт хийх болно.

Ажиллах үеийн тестүүд

Одоогийн байдлаар бүх туршилтууд нь зөвхөн байршуулах зан төлөв болон Пулуми нөөцийн загвартай холбоотой байсан. Хэрэв та өөрийн бэлтгэсэн дэд бүтэц ажиллаж байгаа эсэхийг шалгахыг хүсвэл яах вэ? Жишээлбэл, виртуал машин ажиллаж байгаа, S3 хувин нь бидний хүлээж буй зүйлийг агуулдаг гэх мэт.

Үүнийг хэрхэн хийхийг та аль хэдийн таамагласан байж магадгүй: сонголт ExtraRuntimeValidation нь ProgramTestOptions - Энэ бол маш том боломж юм. Энэ үед та програмынхаа нөөцийн бүрэн төлөвт хандах эрх бүхий захиалгат Go тестийг ажиллуулна. Энэ төлөвт виртуал машины IP хаягууд, URL хаягууд болон үүдэн программууд болон дэд бүтэцтэй бодитоор ажиллахад шаардлагатай бүх зүйл багтана.

Жишээлбэл, манай туршилтын хөтөлбөр нь үл хөдлөх хөрөнгийг экспортолдог webEndpoint хувин дуудсан websiteUrl, энэ нь бидний тохируулсан URL-ыг бүрэн дүүрэн авч болно index document. Хэдийгээр бид олохын тулд улсын файлыг ухаж болох юм bucket мөн тэр өмчийг шууд унших боловч ихэнх тохиолдолд манай стекүүд шалгахад ашиглахад тохиромжтой гэж үзсэн ийм ашигтай шинж чанаруудыг экспортлодог:

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

Бидний өмнөх ажиллах үеийн шалгалтуудын нэгэн адил энэ шалгалт нь стекийг дээшлүүлсний дараа шууд хийгдэх бөгөөд бүгд энгийн дуудлагад хариу өгөх болно. go test. Мөн энэ бол мөсөн уулын зөвхөн орой нь бөгөөд кодоор бичиж болох Go тестийн функц бүр боломжтой.

Тасралтгүй дэд бүтцийн интеграцчлал

Дэд бүтцэд олон өөрчлөлт хийгдэж байгаа үед тэдгээрийг кодын шалгалтанд оруулахын өмнө тест хийх боломжтой байх нь сайн хэрэг. Гэхдээ бид болон манай олон үйлчлүүлэгчид хөгжлийн амьдралын мөчлөгийн янз бүрийн үе шатанд дэд бүтцийг туршиж үздэг.

  • Нээлттэй татах хүсэлт бүрт нэгтгэхээс өмнө туршилт хийх.
  • Амлалт бүрийн хариуд нийлүүлэлт зөв хийгдсэн эсэхийг дахин шалгана уу.
  • Шөнийн цагаар эсвэл долоо хоног бүр нэмэлт шинжилгээ хийлгэх гэх мэт үе үе.
  • Гүйцэтгэлийн эсвэл стресс тестийн нэг хэсэг бөгөөд энэ нь ихэвчлэн урт хугацаанд ажилладаг бөгөөд туршилтуудыг зэрэгцээ ажиллуулдаг ба/эсвэл нэг програмыг олон удаа ажиллуулдаг.

Эдгээрийн хувьд Пулуми нь таны дуртай тасралтгүй интеграцийн системтэй нэгдэхийг дэмждэг. Тасралтгүй интеграци хийснээр энэ нь таны хэрэглээний программ хангамжтай адил дэд бүтцийн туршилтын хамрах хүрээг танд олгоно.

Пулуми нь нийтлэг CI системийг дэмждэг. Тэдгээрийн заримыг энд харуулав.

Дэлгэрэнгүй мэдээллийг баримт бичигт хандана уу Тасралтгүй хүргэлт.

Түр зуурын орчин

Нээлттэй маш хүчтэй боломж бол түр зуурын орчныг зөвхөн хүлээн авах туршилтын зорилгоор ашиглах чадвар юм. Үзэл баримтлал төслүүд болон стекүүд Пулуми нь бүрэн тусгаарлагдсан, бие даасан орчныг хялбархан байрлуулж, устгахад зориулагдсан бөгөөд бүгдийг нь цөөн хэдэн энгийн CLI тушаалаар эсвэл интеграцийн тестийн хүрээ ашиглан хийсэн.

Хэрэв та GitHub ашигладаг бол Пулуми санал болгодог GitHub програм, энэ нь танд CI шугаман дахь хүсэлтийг татахын тулд хүлээн авах тестийг холбоход тусална. Зүгээр л програмыг GitHub репозиторт суулгаснаар Пулуми нь дэд бүтцийн урьдчилан харах, шинэчлэлт, туршилтын үр дүнгийн талаарх мэдээллийг таны CI болон усан сангийн хүсэлтүүдэд нэмнэ.

Дэд бүтцийг Пулуми код болгон турших. 2-р хэсэг

Та Пулуми-г үндсэн хүлээн авах шалгалтандаа ашиглах үед багийн бүтээмжийг дээшлүүлж, өөрчлөлтийн чанарт итгэх итгэлийг өгөх автоматжуулалтын шинэ чадавхийг олж авах болно.

Үр дүн

Энэ нийтлэлд бид ерөнхий зориулалтын програмчлалын хэлийг ашигласнаар программ хангамжийг хөгжүүлэхэд хэрэг болохуйц олон программ хангамж хөгжүүлэх арга техникийг ашиглах боломжтой болохыг олж харлаа. Эдгээрт нэгжийн туршилт, интеграцийн туршилт, өргөн хүрээтэй ажлын цагийг шалгахын тулд хэрхэн хамтран ажилладаг зэрэг орно. Туршилтыг хүсэлтээр эсвэл таны CI системд ажиллуулахад хялбар байдаг.

Пулуми - нээлттэй эхийн программ хангамж, ашиглахад үнэ төлбөргүй бөгөөд таны дуртай програмчлалын хэл, үүлтэй ажиллах боломжтой - өнөөдөр туршаад үзээрэй!

Нэгдүгээр хэсэг

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх