рдкреБрд▓реБрдореА рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдгред рднрд╛рдЧ реи

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдЖрдЬ рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде "рдкреБрд▓реБрдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ" рд▓реЗрдЦ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ "DevOps рдкреНрд░рдерд╛рдУрдВ рдФрд░ рдЙрдкрдХрд░рдг" ред



рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкрд░реАрдХреНрд╖рдг


рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рдкрд░реАрдХреНрд╖рдг рд╢реИрд▓реА рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдпрд╣ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдХреЛрдб рдХреЗ рдЕрдВрджрд░реВрдиреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдлреЗрдж рдмреЙрдХреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпрдХреНрд╖ рддреИрдирд╛рддреА рд╕реЗ рдкрд╣рд▓реЗ рдкреБрд▓реБрдореА рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдЗрди-рдореЗрдореЛрд░реА рддреИрдирд╛рддреА рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рддреИрдирд╛рддреА рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдкреБрд▓реБрдореА рдХрд╛ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪрд╛ рд╣реИред рдФрд░ рдпреЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рд╕рд╛рде рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ!

рдкреБрд▓реБрдореА рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЛ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдлреЗрдж рдмреЙрдХреНрд╕ рдкрд░реАрдХреНрд╖рдг рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рдерд╛, рддреЛ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рд╣реИред (рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рднреА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред) рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЛ рдкреВрд░реНрдг рдкреБрд▓реНрдореА рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЗрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЬреАрд╡рди рдЪрдХреНрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рдирдпрд╛ рдвреЗрд░ рддреИрдирд╛рдд рдХрд░рдирд╛, рдЗрд╕реЗ рд╡рд┐рд╡рд┐рдзрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдирд╛, рд╕рдВрднрд╡рддрдГ рдХрдИ рдмрд╛рд░ред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд╛рдд рдореЗрдВ) рдФрд░ рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВред

(рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕рдорд╛рди рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛рдПрдВ рдореВрд▓ рднрд╛рд╖рд╛ рдПрд╕рдбреАрдХреЗ рдореЗрдВ рд╣реИрдВред рдЖрдк рдЙрд╕ рдПрдХреАрдХрд░рдг рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдЖрдкрдХрд╛ рдкреБрд▓реБрдореА рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛ рд╣реИред

рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдХрд░, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдЖрдкрдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдвреЗрд░ рдФрд░ рд░рд╣рд╕реНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИрдВред
  • рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЖрдкрдХреЗ рдЪреБрдиреЗ рд╣реБрдП рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд╕реЗ рдПрди рдЕрдиреНрдп рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд╖реНрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд▓реНрдж рд╣реА рджреЗрдЦреЗрдВрдЧреЗ, рдЗрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рдирдЯрд╛рдЗрдо рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд░рд▓ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг


рдЗрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо 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 ) рдХреЗ рджреМрд░рд╛рди ExpectFailure рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдХреНрд░рдорд┐рдХ рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг ( EditDirs ) рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ "рд╕рдВрдкрд╛рджрди" рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

рд╕рдВрд╕рд╛рдзрди рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛


рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдПрдХреАрдХрд░рдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо "рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ" - рдпрд╣ рджреБрд░реНрдШрдЯрдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреИрдХ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрди рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП (рдпрд╛ рдирд╣реАрдВ рдереЗ) рдФрд░ рдЙрдирдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред

ProgramTestOptions рд▓рд┐рдП ExtraRuntimeValidation рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрдВ рддреИрдирд╛рддреА (рдкреЛрд╕реНрдЯ-рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реНрдерд┐рддрд┐) рдХреЗ рдмрд╛рдж рдкреБрд▓реБрдореА рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХреА рдЧрдИ рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХреЗрдВред рдЗрд╕рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреИрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдирд┐рд░реНрдпрд╛рддрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди, рд╕рднреА рд╕рдВрд╕рд╛рдзрди рдФрд░ рдЙрдирдХреА рд╕рдВрдкрддреНрддрд┐ рдорд╛рди, рд╕рд╛рде рд╣реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЗрд╕рдХрд╛ рдПрдХ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ 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 рдмрд╛рд▓реНрдЯреА рдореЗрдВ рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ: ProgramTestOptions рд▓рд┐рдП ExtraRuntimeValidation рд╡рд┐рдХрд▓реНрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЕрд╡рд╕рд░ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдПрдХ рдордирдорд╛рдирд╛ рдЧреЛ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди, рдпреВрдЖрд░рдПрд▓ рдФрд░ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдкреНрд░рд╛рдкреНрдд рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЖрдИрдкреА рдкрддреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо webEndpoint рдирд╛рдордХ рдПрдХ webEndpoint рдмрдХреЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкреВрд░реНрдг 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 рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрд▓ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд╣рд┐рдорд╢реИрд▓ рдХреЗ рдЯрд┐рдк рд╣реИ - рд╕рднреА рдЧреЛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛ рдЖрдк рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рд╡реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рд╕рддрдд рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдПрдХреАрдХрд░рдг


рд▓реИрдкрдЯреЙрдк рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдФрд░ рд╣рдорд╛рд░реЗ рдХрдИ рдЧреНрд░рд╛рд╣рдХ рд╡рд┐рдХрд╛рд╕ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЪрд░рдгреЛрдВ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  • рдкреНрд░рддреНрдпреЗрдХ рдЦреБрд▓реЗ рдкреВрд▓ рдореЗрдВ рд╡рд┐рд▓рдп рд╕реЗ рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзред
  • рдкреНрд░рддреНрдпреЗрдХ рдХрдорд┐рдЯ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдорд░реНрдЬ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
  • рд╕рдордп-рд╕рдордп рдкрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд╛рдд рдореЗрдВ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХред
  • рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдпрд╛ рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╕рдордп рдХреА рдПрдХ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдФрд░ / рдпрд╛ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХрдИ рдмрд╛рд░ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВред

рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рдкреБрд▓реБрдореА рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреЗ рд╕рд╛рде, рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рддрд░рд╣ рдХреА рдХрд╡рд░реЗрдЬ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред

рдкреБрд▓реБрдореА рдХреЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдп рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ:


рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдХрдВрдЯреАрдиреНрдпреВрдЕрд╕ рдбрд┐рд▓реАрд╡рд░реА рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рджреЗрдЦреЗрдВред

рдкрдВрдЪрд╛рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг


рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛ рдЦреБрд▓рддреА рд╣реИ, рд╡рд╣ рд╣реИ рдХреЗрд╡рд▓ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдкреБрд▓реБрдореА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╕реНрдЯреИрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рддреИрдирд╛рдд рдХрд░рдиреЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдХреБрдЫ рд╕рд░рд▓ рд╕реАрдПрд▓рдЖрдИ рдХрдорд╛рдВрдбреЛрдВ рдореЗрдВ рдпрд╛ рдПрдХ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред

рдпрджрд┐ рдЖрдк GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ Pulumi GitHub рдРрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рдЖрдкрдХреЗ CI рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рднреАрддрд░ рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреВрд▓ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдмрд╕ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рдкреБрд▓реБрдореА рдЖрдкрдХреЗ CI рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреВрд▓ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди, рдЕрдкрдбреЗрдЯ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝ рджреЗрдЧрд╛:



рдЕрдкрдиреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрд╡реАрдХреГрддрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрд▓реБрдореА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЗ рдкрд╛рд╕ рдирдИ рд╕реНрд╡рдЪрд╛рд▓рди рдХреНрд╖рдорддрд╛рдПрдВ рд╣реЛрдВрдЧреА рдЬреЛ рдЯреАрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреА рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рдПрдВрдЧреАред

рдкрд░рд┐рдгрд╛рдо


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХрдИ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдереАрдВ, рд╡реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рд╡реЗ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг, рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг, рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░рдирдЯрд╛рдЗрдо рдкрд░реАрдХреНрд╖рдг рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдмрд╛рддрдЪреАрдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЯреЗрд╕реНрдЯ рдорд╛рдВрдЧ рдкрд░ рдпрд╛ рдЖрдкрдХреЗ CI рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЪрд▓рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдкреБрд▓реБрдореА рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ, рдпрд╣ рдЖрдкрдХреА рдкрд╕рдВрджреАрджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдмрд╛рджрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ - рдЗрд╕реЗ рдЖрдЬ рд╣реА рдЖрдЬрдорд╛рдПрдБ !

тЖТ рдкрд╣рд▓рд╛ рднрд╛рдЧ

Source: https://habr.com/ru/post/hi463637/


All Articles