เชชเซเชฒเซเชฎเซ€ เชธเชพเชฅเซ‡ เช•เซ‹เชก เชคเชฐเซ€เช•เซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ. เชญเชพเช— 2

เช•เซ‡เชฎ เช›เซ‹ เชฌเชงเชพ. เช†เชœเซ‡ เช…เชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชธเชพเชฅเซ‡ เชฒเซ‡เช–เชจเซ‹ เช…เช‚เชคเชฟเชฎ เชญเชพเช— เชถเซ‡เชฐ เช•เชฐเซ€เช เช›เซ€เช. "เชชเซเชฒเซเชฎเซ€ เชธเชพเชฅเซ‡ เช•เซ‹เชก เชคเชฐเซ€เช•เซ‡ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเซเช‚", เชœเซ‡เชจเซ‹ เช…เชจเซเชตเชพเชฆ เช•เซ‹เชฐเซเชธเชจเชพ เชตเชฟเชฆเซเชฏเชพเชฐเซเชฅเซ€เช“ เชฎเชพเชŸเซ‡ เช–เชพเชธ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ "DevOps เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธ เช…เชจเซ‡ เชŸเซ‚เชฒเซเชธ".

เชชเซเชฒเซเชฎเซ€ เชธเชพเชฅเซ‡ เช•เซ‹เชก เชคเชฐเซ€เช•เซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ. เชญเชพเช— 2

เชœเชฎเชพเชตเชŸ เชชเชฐเซ€เช•เซเชทเชฃ

เชชเชฐเซ€เช•เซเชทเชฃเชจเซ€ เช† เชถเซˆเชฒเซ€ เชเช• เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เช…เชญเชฟเช—เชฎ เช›เซ‡ เช…เชจเซ‡ เช…เชฎเชจเซ‡ เช…เชฎเชพเชฐเชพ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เช•เซ‹เชกเชจเซ€ เช†เช‚เชคเชฐเชฟเช• เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‡ เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชตเซเชนเชพเช‡เชŸ เชฌเซ‹เช•เซเชธ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชคเซ‡ เช…เชฎเซเช• เช…เช‚เชถเซ‡ เช…เชฎเซ‡ เชถเซเช‚ เชšเช•เชพเชธเซ€ เชถเช•เซ€เช เชคเซ‡ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชตเชพเชธเซเชคเชตเชฟเช• เชœเชฎเชพเชตเชŸ เชชเชนเซ‡เชฒเชพเช‚ เชชเซเชฒเซเชฎเซ€ เชฆเซเชตเชพเชฐเชพ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เช‡เชจ-เชฎเซ‡เชฎเชฐเซ€ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชชเซเชฒเชพเชจเชจเชพ เช†เชงเชพเชฐเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฅเซ€ เชœเชฎเชพเชตเชŸเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ€ เชถเช•เชพเชคเซเช‚ เชจเชฅเซ€. เช†เชตเชพ เช•เชฟเชธเซเชธเชพเช“ เชฎเชพเชŸเซ‡, เชชเซเชฒเซเชฎเซ€ เชชเชพเชธเซ‡ เชเช•เซ€เช•เชฐเชฃ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชณเช–เซเช‚ เช›เซ‡. เช…เชจเซ‡ เช† เชฌเซ‡ เช…เชญเชฟเช—เชฎเซ‹ เชเช•เชธเชพเชฅเซ‡ เชฎเชนเชพเชจ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡!

เชชเซเชฒเซเชฎเซ€ เชเช•เซ€เช•เชฐเชฃ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชณเช–เซเช‚ 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 - เช† เชฎเชพเชŸเซ‡ เช† เชเช• เชฎเชนเชพเชจ เชคเช• เช›เซ‡. เช† เชฌเชฟเช‚เชฆเซเช, เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเชฅเชฟเชคเชฟเชจเซ€ เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡ เช•เชธเซเชŸเชฎ เช—เซ‹ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเซ‹ เช›เซ‹. เช† เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ 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. เช…เชจเซ‡ เชคเซ‡ เชฎเชพเชคเซเชฐ เช†เช‡เชธเชฌเชฐเซเช—เชจเซ€ เชŸเซ‹เชš เช›เซ‡ - เชคเชฎเซ‡ เช•เซ‹เชกเชฎเชพเช‚ เชฒเช–เซ€ เชถเช•เซ‹ เชคเซ‡ เชฆเชฐเซ‡เช• เช—เซ‹ เชŸเซ‡เชธเซเชŸ เชธเซเชตเชฟเชงเชพ เช‰เชชเชฒเชฌเซเชง เช›เซ‡.

เชธเชคเชค เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชเช•เซ€เช•เชฐเชฃ

เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชก เชฐเชฟเชตเซเชฏเซ‚ เชฎเชพเชŸเซ‡ เชธเชฌเชฎเชฟเชŸ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ เชคเซ‡เชจเซ‡ เชšเช•เชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเชพ เชฌเชงเชพ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชฒเซ‡เชชเชŸเซ‹เชช เชชเชฐ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เชธเช•เซเชทเชฎ เชฅเชตเซเช‚ เชธเชพเชฐเซเช‚ เช›เซ‡. เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เช…เชจเซ‡ เช…เชฎเชพเชฐเชพ เช˜เชฃเชพ เช—เซเชฐเชพเชนเช•เซ‹ เชตเชฟเช•เชพเชธเชจเชพ เชœเซ€เชตเชจเชšเช•เซเชฐเชจเชพ เชตเชฟเชตเชฟเชง เชคเชฌเช•เซเช•เชพเชฎเชพเช‚ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ€เช เช›เซ€เช:

  • เชฎเชฐเซเชœ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡ เชฆเชฐเซ‡เช• เช“เชชเชจ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚.
  • เชฆเชฐเซ‡เช• เชชเซเชฐเชคเชฟเชฌเชฆเซเชงเชคเชพเชจเชพ เชชเซเชฐเชคเชฟเชญเชพเชตเชฎเชพเช‚, เชฎเชฐเซเชœ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚ เช•เซ‡ เชจเชนเซ€เช‚ เชคเซ‡ เชฌเซ‡ เชตเชพเชฐ เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡.
  • เชธเชฎเชฏเชพเช‚เชคเชฐเซ‡, เชœเซ‡เชฎ เช•เซ‡ เชตเชงเชพเชฐเชพเชจเชพ เชชเชฐเซ€เช•เซเชทเชฃ เชฎเชพเชŸเซ‡ เชฐเชพเชคเซเชฐเซ‡ เช…เชฅเชตเชพ เชธเชพเชชเซเชคเชพเชนเชฟเช•.
  • เชชเซเชฐเชฆเชฐเซเชถเชจ เช…เชฅเชตเชพ เชคเชพเชฃ เชชเชฐเซ€เช•เซเชทเชฃเชจเชพ เชญเชพเช— เชฐเซ‚เชชเซ‡, เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏ เชธเซเชงเซ€ เชšเชพเชฒเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเชฎเชพเช‚เชคเชฐเชฎเชพเช‚ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชšเชฒเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡/เช…เชฅเชตเชพ เชธเชฎเชพเชจ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‡ เช˜เชฃเซ€ เชตเช–เชค เช—เซ‹เช เชตเซ‡ เช›เซ‡.

เช†เชฎเชพเช‚เชจเชพ เชฆเชฐเซ‡เช• เชฎเชพเชŸเซ‡, เชชเซเชฒเซเชฎเซ€ เชคเชฎเชพเชฐเซ€ เชฎเชจเชชเชธเช‚เชฆ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชธเชฟเชธเซเชŸเชฎ เชธเชพเชฅเซ‡ เชเช•เซ€เช•เชฐเชฃเชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡. เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชธเชพเชฅเซ‡, เช† เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเชพ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฐเชพ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชตเชฐเซ‡เชœ เช†เชชเซ‡ เช›เซ‡.

เชชเซเชฒเซเชฎเซ€เชฎเชพเช‚ เชธเชพเชฎเชพเชจเซเชฏ CI เชธเชฟเชธเซเชŸเชฎเซเชธ เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช›เซ‡. เช…เชนเซ€เช‚ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเชพเช• เช›เซ‡:

เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชฎเชพเชนเชฟเชคเซ€ เชฎเชพเชŸเซ‡, เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃเชจเซ‹ เชธเช‚เชฆเชฐเซเชญ เชฒเซ‹ เชธเชคเชค เชกเชฟเชฒเชฟเชตเชฐเซ€.

เช•เซเชทเชฃเชฟเช• เชชเชฐเซเชฏเชพเชตเชฐเชฃ

เชเช• เช–เซ‚เชฌ เชœ เชถเช•เซเชคเชฟเชถเชพเชณเซ€ เชคเช• เช•เซ‡ เชœเซ‡ เช–เซเชฒเซ‡ เช›เซ‡ เชคเซ‡ เชฎเชพเชคเซเชฐ เชธเซเชตเซ€เช•เซƒเชคเชฟ เชชเชฐเซ€เช•เซเชทเชฃ เชนเซ‡เชคเซเช“ เชฎเชพเชŸเซ‡ เช•เซเชทเชฃเชฟเช• เชตเชพเชคเชพเชตเชฐเชฃเชจเซ‡ เชœเชฎเชพเชตเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพ เช›เซ‡. เช–เซเชฏเชพเชฒ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เช…เชจเซ‡ เชธเซเชŸเซ‡เช•เซเชธ เชชเซเชฒเซเชฎเซ€เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฒเช— เช…เชจเซ‡ เชธเซเชตเชคเช‚เชคเซเชฐ เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช‚ เชธเชฐเชณเชคเชพเชฅเซ€ เชœเชฎเชพเชตเชŸ เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‹เชกเซ€ เชชเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชกเชฟเชเชพเช‡เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡, เชฌเชงเชพ เชฅเซ‹เชกเชพ เชธเชฐเชณ CLI เช†เชฆเซ‡เชถเซ‹เชฎเชพเช‚ เช…เชฅเชตเชพ เชเช•เซ€เช•เชฐเชฃ เชชเชฐเซ€เช•เซเชทเชฃ เชซเซเชฐเซ‡เชฎเชตเชฐเซเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡.

เชœเซ‹ เชคเชฎเซ‡ GitHub เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชชเซเชฒเซเชฎเซ€ เช“เชซเชฐ เช•เชฐเซ‡ เช›เซ‡ GitHub เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ, เชœเซ‡ เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเซ€ CI เชชเชพเช‡เชชเชฒเชพเช‡เชจเชฎเชพเช‚ เชตเชฟเชจเช‚เชคเซ€เช“ เช–เซ‡เช‚เชšเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเชตเซ€เช•เซƒเชคเชฟ เชชเชฐเซ€เช•เซเชทเชฃเชจเซ‡ เชœเซ‹เชกเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡. เชซเช•เซเชค GitHub เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹, เช…เชจเซ‡ เชชเซเชฒเซเชฎเซ€ เชคเชฎเชพเชฐเชพ CI เช…เชจเซ‡ เชชเซ‚เชฒ เชตเชฟเชจเช‚เชคเซ€เช“เชฎเชพเช‚ เช‡เชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชชเซ‚เชฐเซเชตเชพเชตเชฒเซ‹เช•เชจเซ‹, เช…เชชเชกเซ‡เชŸเซเชธ เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช‰เชฎเซ‡เชฐเชถเซ‡:

เชชเซเชฒเซเชฎเซ€ เชธเชพเชฅเซ‡ เช•เซ‹เชก เชคเชฐเซ€เช•เซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซเช‚ เชชเชฐเซ€เช•เซเชทเชฃ. เชญเชพเช— 2

เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชคเชฎเชพเชฐเชพ เชฎเซเช–เซเชฏ เชธเซเชตเซ€เช•เซƒเชคเชฟ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชฎเชพเชŸเซ‡ เชชเซเชฒเซเชฎเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชจเชตเซ€ เช“เชŸเซ‹เชฎเซ‡เชถเชจ เช•เซเชทเชฎเชคเชพเช“ เชฎเซ‡เชณเชตเชถเซ‹ เชœเซ‡ เชŸเซ€เชฎเชจเซ€ เช‰เชคเซเชชเชพเชฆเช•เชคเชพเชฎเชพเช‚ เชธเซเชงเชพเชฐเซ‹ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เช—เซเชฃเชตเชคเซเชคเชพเชฎเชพเช‚ เชคเชฎเชจเซ‡ เชตเชฟเชถเซเชตเชพเชธ เช†เชชเชถเซ‡.

เชชเชฐเชฟเชฃเชพเชฎ

เช† เชฒเซ‡เช–เชฎเชพเช‚, เช…เชฎเซ‡ เชœเซ‹เชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชนเซ‡เชคเซเชจเซ€ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช˜เชฃเซ€ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชคเช•เชจเซ€เช•เซ‹ เช…เชฎเชจเซ‡ เช‰เชชเชฒเชฌเซเชง เชฅเชพเชฏ เช›เซ‡ เชœเซ‡ เช…เชฎเชพเชฐเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชตเชฟเช•เชธเชพเชตเชตเชพเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡. เชคเซ‡เชฎเชพเช‚ เชเช•เชฎ เชชเชฐเซ€เช•เซเชทเชฃ, เชเช•เซ€เช•เชฐเชฃ เชชเชฐเซ€เช•เซเชทเชฃ เช…เชจเซ‡ เชตเซเชฏเชพเชชเช• เชฐเชจเชŸเชพเช‡เชฎ เชชเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เช“ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเช•เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชฎเชพเช‚เช— เชชเซเชฐเชฎเชพเชฃเซ‡ เช…เชฅเชตเชพ เชคเชฎเชพเชฐเซ€ CI เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เชŸเซ‡เชธเซเชŸ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฐเชณ เช›เซ‡.

เชชเซเชฒเซเชฎเซ€ - เช“เชชเชจ เชธเซ‹เชฐเซเชธ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ, เชตเชพเชชเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชซเชค เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชฎเชจเชชเชธเช‚เชฆ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเช“ เช…เชจเซ‡ เช•เซเชฒเชพเช‰เชกเซเชธ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ - เช†เชœเซ‡ เชœ เช…เชœเชฎเชพเชตเซ€ เชœเซเช“!

โ†’ เชชเซเชฐเชฅเชฎ เชญเชพเช—

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹