pup*_*eno 6 amazon-web-services aws-cdk
我很难找到正确的参考,因为当我搜索时,我想要的大部分是如何测试构造本身。我正在寻找的是如何运行我的应用程序测试,而不是基础设施/构造测试。这是我应该添加的测试阶段吗?
npm test我所指的测试是通常通过运行(或rake test在 Ruby/Rails 世界中,或./manage.py test在 Django 世界中)运行的测试。无论你称它们为集成还是单元测试都是有争议的。他们不一定运行整个网络服务器,但他们确实使用数据库。就我而言,这些测试可能使用 DynamoDB、SQS 和其他服务。正在测试的函数将是 Lambda 函数及其内部单元的混合。我不希望在 Lambda 环境中运行它们。我希望在开发过程中不断在我的机器上本地运行这些测试。这些测试将在来自 GitHub 的拉取请求上运行,作为阻止或允许合并拉取请求的内容之一。如果您熟悉的话,这是标准的 Heroku CI/CD 模型。
作为参考,我当前的管道堆栈如下所示(它从https://cdkworkshop.com/开始,我正在改进它,Example4Be 是我的应用程序):
import * as cdk from "aws-cdk-lib"
import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager"
import {Construct} from "constructs"
import {Example4BeDeployStage} from "./example4-be-deploy-stage"
import {CodeBuildStep, CodePipeline, CodePipelineSource} from "aws-cdk-lib/pipelines"
export class PipelineStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props)
const githubSecretId = "github-flexpointtech-token"
const secret = new secretsmanager.Secret(this, githubSecretId)
// The basic pipeline declaration. This sets the initial structure
// of our pipeline
const pipeline = new CodePipeline(this, "Example4BePipeline", {
synth: new CodeBuildStep("Synth", {
input: CodePipelineSource.gitHub("flexpointtech/example4-be", "main", {
authentication: cdk.SecretValue.secretsManager(githubSecretId)
}),
installCommands: [
"npm install -g aws-cdk"
],
commands: [
"npm ci",
"npm run build",
"npx cdk synth"
]
}
)
})
pipeline.node.addDependency(secret)
const deploy = new Example4BeDeployStage(this, "Deploy")
const deployStage = pipeline.addStage(deploy)
deployStage.addPost(
new CodeBuildStep("VerifyViewerEndpoint", {
envFromCfnOutputs: {
ENDPOINT_URL: deploy.hcViewerUrl
},
commands: [
"curl -Ssf $ENDPOINT_URL"
]
}),
new CodeBuildStep("VerifyAPIGatewayEndpoint", {
envFromCfnOutputs: {
ENDPOINT_URL: deploy.hcEndpoint
},
commands: [
"curl -Ssf $ENDPOINT_URL",
"curl -Ssf $ENDPOINT_URL/hello",
"curl -Ssf $ENDPOINT_URL/test"
]
})
)
}
}
Run Code Online (Sandbox Code Playgroud)
以下是一些 CDK 测试策略。不是一刀切的。
理想情况下,您的单元测试在您将 PR 提交到maingithub 之前就已通过(可能作为github 操作)。您没有理由不能将它们作为npm run test管道中的命令重新运行。
在许多情况下,遵循 AWS 的多账户最佳实践,在专用测试账户中添加测试部署阶段是有意义的。一种可能的流程是:
[Build] -> [Test Deploy Stage] -> [Prod Deploy Stage] -> [Destroy Test Deploy Stage]
Run Code Online (Sandbox Code Playgroud)
除了帐户之外,该Test Deploy阶段与其他相同。Prod Deploy您可以在测试部署阶段之后添加测试步骤(例如验证API 返回预期值)。管道在执行结束时会拆除测试环境。
您可以将任意测试代码步骤添加到任意管道阶段,以支持您首选的云端测试习惯。对于更高级的用例,您可以播种数据并使用自定义资源执行任意 API 调用。
AWS Amplify 为前端应用程序提供类似 Heroku/Netlify 的 CI/CD 功能,包括github PR 的可测试 Web 预览。CDK支持 Amplify。(重要:您想要一个 Amplify“前端”应用程序,忽略“后端”)
对于基于 lambda 的应用程序,CDK 具有带有codedeploy的内置蓝绿部署。AWS 将逐渐将流量提供给更新后的 lambda 版本,如果遇到错误则回滚。
| 归档时间: |
|
| 查看次数: |
3720 次 |
| 最近记录: |