پلومی کے ساتھ کوڈ کے طور پر انفراسٹرکچر کی جانچ کرنا۔ حصہ 2

سب کو سلام. آج ہم آپ کے ساتھ مضمون کا آخری حصہ شیئر کر رہے ہیں۔ "پلومی کے ساتھ کوڈ کے طور پر بنیادی ڈھانچے کی جانچ کرنا"جس کا ترجمہ خاص طور پر کورس کے طلباء کے لیے تیار کیا گیا تھا۔ "DevOps طریقوں اور اوزار".

پلومی کے ساتھ کوڈ کے طور پر انفراسٹرکچر کی جانچ کرنا۔ حصہ 2

تعیناتی کی جانچ

جانچ کا یہ انداز ایک طاقتور طریقہ ہے اور ہمیں اپنے انفراسٹرکچر کوڈ کے اندرونی کام کو جانچنے کے لیے وائٹ باکس ٹیسٹنگ کرنے کی اجازت دیتا ہے۔ تاہم، یہ کسی حد تک محدود کرتا ہے جسے ہم جانچ سکتے ہیں۔ ٹیسٹ اصل تعیناتی سے پہلے پلومی کی طرف سے بنائے گئے میموری میں تعیناتی کے منصوبے کی بنیاد پر کیے جاتے ہیں اور اس لیے تعیناتی کو خود ٹیسٹ نہیں کیا جا سکتا۔ ایسے معاملات کے لیے، پلومی میں انضمام ٹیسٹ کا فریم ورک ہے۔ اور یہ دونوں نقطہ نظر ایک ساتھ بہت اچھا کام کرتے ہیں!

Pulumi انٹیگریشن ٹیسٹنگ فریم ورک Go میں لکھا گیا ہے، جس طرح ہم اپنے زیادہ تر اندرونی کوڈ کی جانچ کرتے ہیں۔ جبکہ پہلے زیر بحث یونٹ ٹیسٹنگ کا طریقہ زیادہ وائٹ باکس ٹیسٹنگ جیسا تھا، انٹیگریشن ٹیسٹنگ ایک بلیک باکس ہے۔ (سخت اندرونی جانچ کے اختیارات بھی موجود ہیں۔) یہ فریم ورک ایک مکمل پلومی پروگرام لینے اور اس پر مختلف لائف سائیکل آپریشنز کرنے کے لیے بنایا گیا تھا، جیسے شروع سے ایک نیا اسٹیک لگانا، اسے مختلف حالتوں کے ساتھ اپ ڈیٹ کرنا، اور اسے حذف کرنا، ممکنہ طور پر کئی بار۔ . ہم انہیں باقاعدگی سے چلاتے ہیں (مثال کے طور پر، رات کو) اور تناؤ کے ٹیسٹ کے طور پر۔

(ہم ہم اس پر کام کر رہے ہیں۔تاکہ انضمام کی جانچ کی اسی طرح کی صلاحیتیں مقامی زبانوں کے SDK میں دستیاب ہوں۔ آپ گو انٹیگریشن ٹیسٹنگ فریم ورک استعمال کر سکتے ہیں قطع نظر اس کے کہ آپ کا پلومی پروگرام جس زبان میں لکھا گیا ہے)۔

اس فریم ورک کا استعمال کرتے ہوئے پروگرام چلا کر آپ درج ذیل کو چیک کر سکتے ہیں۔

  • آپ کا پراجیکٹ کوڈ مصنوعی طور پر درست ہے اور بغیر کسی غلطی کے چلتا ہے۔
  • اسٹیک اور راز کی ترتیب کی ترتیبات کام کرتی ہیں اور ان کی صحیح تشریح کی جاتی ہے۔
  • آپ کے پروجیکٹ کو آپ کی پسند کے کلاؤڈ فراہم کنندہ میں کامیابی کے ساتھ تعینات کیا جا سکتا ہے۔
  • آپ کے پروجیکٹ کو کامیابی کے ساتھ ابتدائی حالت سے 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. مثال کے طور پر، آپ جیگر اینڈ پوائنٹ کو ٹریس کرنے کے لیے ترتیب دے سکتے ہیں (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")
        },
    })

اب، جب ہم گو ٹیسٹ چلاتے ہیں، تو یہ نہ صرف لائف سائیکل ٹیسٹ کی بیٹری سے گزرے گا، بلکہ اسٹیک کو کامیابی کے ساتھ تعینات کرنے کے بعد، یہ نتیجے میں آنے والی حالت پر ایک اضافی جانچ بھی کرے گا۔

رن ٹائم ٹیسٹ

اب تک، تمام ٹیسٹ خالصتاً تعیناتی کے رویے اور پلومی ریسورس ماڈل کے بارے میں ہیں۔ اگر آپ اس بات کی تصدیق کرنا چاہتے ہیں کہ آپ کا فراہم کردہ بنیادی ڈھانچہ حقیقت میں کام کر رہا ہے تو کیا ہوگا؟ مثال کے طور پر، کہ ورچوئل مشین چل رہی ہے، S3 بالٹی میں وہی ہے جس کی ہم توقع کرتے ہیں، وغیرہ۔

آپ نے پہلے ہی اندازہ لگایا ہوگا کہ یہ کیسے کریں: آپشن ExtraRuntimeValidation لیے ProgramTestOptions - یہ اس کے لیے ایک بہترین موقع ہے۔ اس مقام پر، آپ اپنے پروگرام کے وسائل کی مکمل حالت تک رسائی کے ساتھ ایک حسب ضرورت گو ٹیسٹ چلاتے ہیں۔ اس حالت میں ورچوئل مشین آئی پی ایڈریسز، یو آر ایل، اور ہر وہ چیز شامل ہے جو درحقیقت نتیجے میں آنے والی کلاؤڈ ایپلی کیشنز اور انفراسٹرکچر کے ساتھ تعامل کے لیے درکار ہے۔

مثال کے طور پر، ہمارا ٹیسٹ پروگرام پراپرٹی برآمد کرتا ہے۔ 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. اور یہ صرف آئس برگ کا سرہ ہے — ہر گو ٹیسٹ فیچر جسے آپ کوڈ میں لکھ سکتے ہیں دستیاب ہے۔

مسلسل انفراسٹرکچر انٹیگریشن

لیپ ٹاپ پر ٹیسٹ چلانے کے قابل ہونا اچھی بات ہے جب کوڈ کے جائزے کے لیے جمع کرنے سے پہلے ان کی جانچ کے لیے بنیادی ڈھانچے میں بہت سی تبدیلیاں کی جا رہی ہیں۔ لیکن ہم اور ہمارے بہت سے کلائنٹس ترقیاتی لائف سائیکل کے مختلف مراحل پر بنیادی ڈھانچے کی جانچ کرتے ہیں:

  • ضم کرنے سے پہلے جانچ کے لیے ہر کھلے پل کی درخواست میں۔
  • ہر کمٹ کے جواب میں، دو بار چیک کرنے کے لیے کہ انضمام صحیح طریقے سے ہوا ہے۔
  • وقتاً فوقتاً، جیسے کہ رات یا ہفتہ وار اضافی جانچ کے لیے۔
  • کارکردگی یا تناؤ کی جانچ کے حصے کے طور پر، جو عام طور پر ایک طویل عرصے تک چلتا ہے اور متوازی طور پر ٹیسٹ چلاتا ہے اور/یا ایک ہی پروگرام کو متعدد بار تعینات کرتا ہے۔

ان میں سے ہر ایک کے لیے، Pulumi آپ کے پسندیدہ مسلسل انضمام کے نظام کے ساتھ انضمام کی حمایت کرتا ہے۔ مسلسل انضمام کے ساتھ، یہ آپ کو آپ کے بنیادی ڈھانچے کے لیے وہی ٹیسٹ کوریج دیتا ہے جیسا کہ آپ کے ایپلیکیشن سافٹ ویئر کے لیے۔

پلومی کو عام سی آئی سسٹمز کی حمایت حاصل ہے۔ ان میں سے کچھ یہ ہیں:

مزید تفصیلی معلومات کے لیے، برائے مہربانی دستاویزات کا حوالہ دیں۔ مسلسل ترسیل.

عارضی ماحولیات

ایک بہت ہی طاقتور موقع جو کھلتا ہے وہ ہے عارضی ماحول کو صرف قبولیت کی جانچ کے مقاصد کے لیے تعینات کرنے کی صلاحیت۔ تصور منصوبوں اور ڈھیروں پلومی کو مکمل طور پر الگ تھلگ اور آزاد ماحول کو آسانی سے تعینات کرنے اور ختم کرنے کے لیے ڈیزائن کیا گیا ہے، یہ سب کچھ آسان CLI کمانڈز میں یا انٹیگریشن ٹیسٹنگ فریم ورک کا استعمال کرتے ہوئے ہے۔

اگر آپ GitHub استعمال کرتے ہیں، تو پلومی پیش کرتا ہے۔ GitHub ایپ، جو آپ کی CI پائپ لائن کے اندر درخواستوں کو کھینچنے کے لیے قبولیت کی جانچ کو مربوط کرنے میں آپ کی مدد کرے گا۔ صرف GitHub ریپوزٹری میں ایپلیکیشن انسٹال کریں، اور پلومی آپ کے CI اور پول کی درخواستوں میں بنیادی ڈھانچے کے پیش نظارہ، اپ ڈیٹس اور جانچ کے نتائج کے بارے میں معلومات شامل کرے گا:

پلومی کے ساتھ کوڈ کے طور پر انفراسٹرکچر کی جانچ کرنا۔ حصہ 2

جب آپ اپنے بنیادی قبولیت ٹیسٹوں کے لیے Pulumi استعمال کرتے ہیں، تو آپ کو آٹومیشن کی نئی صلاحیتیں حاصل ہوں گی جو ٹیم کی پیداواری صلاحیت کو بہتر بنائے گی اور آپ کو اپنی تبدیلیوں کے معیار پر اعتماد فراہم کرے گی۔

کل

اس مضمون میں، ہم نے دیکھا ہے کہ عام مقصد کی پروگرامنگ زبانوں کے استعمال سے، سافٹ ویئر کی ترقی کی بہت سی تکنیکیں ہمارے لیے دستیاب ہوتی ہیں جو ہماری ایپلی کیشنز کو تیار کرنے میں کارآمد ثابت ہوتی ہیں۔ ان میں یونٹ ٹیسٹنگ، انٹیگریشن ٹیسٹنگ، اور وسیع رن ٹائم ٹیسٹنگ کو انجام دینے کے لیے وہ مل کر کیسے کام کرتے ہیں۔ ٹیسٹ مانگ کے مطابق یا آپ کے CI سسٹم میں چلانے کے لیے آسان ہیں۔

پلومی - اوپن سورس سافٹ ویئر، استعمال کرنے کے لیے مفت اور آپ کی پسندیدہ پروگرامنگ زبانوں اور کلاؤڈز کے ساتھ کام کرتا ہے۔ آج اسے آزمائیں!

پہلا حصہ

ماخذ: www.habr.com

نیا تبصرہ شامل کریں