我正在尝试使用AWSCDK设置一个从github到AWSFargate应用程序的CI/CD。我试过使用“CDK管道”:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.pipelines-readme.html
我也尝试了另一个(代码管道?):https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline-readme.html
不知何故,这两个都没有我需要的功能。
我在构建操作中添加了一个步骤:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline_actions.CodeBuildAction.html
它工作正常并生成了一个工件。这是代码:
const buildArtifact = new Artifact();
pipeline.addStage({
stageName: "Build",
actions: [
new CodeBuildAction({
project: new PipelineProject(this, "Build", {
projectName: "Build",
buildSpec: BuildSpec.fromSourceFilename("./docker-compose.yml"),
}),
input: sources,
outputs: [buildArtifact],
}),
],
});
但后来我继续将构建结果部署到fargate,比如:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.FargateTaskDefinition.html
const fargateTaskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDef', {
memoryLimitMiB: 512,
cpu: 256,
});
const container = fargateTaskDefinition.addContainer("WebContainer", {
image: ecs.ContainerImage.from...??
});
而且,事实证明,绝对没有办法从工件创建这个容器映像:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecs.ContainerImage.html
可悲的是,这一切都是徒劳的。
如何制作一个实际工作并将C#项目部署到fargate服务的管道?我并没有试图实现复杂的事情——只是为了部署我的C#应用程序。所以,我一定做错了什么。
你基本上已经得到了所有的部分。由于addContainer
函数的image
prop需要ContainerImage类型,我们可以看到定义该图像的几个选项(AssetImage
和EcrImage
似乎是最相关的。)
如果你想走ECR镜像路线,你可以修改你添加的构建步骤,将构建的容器推送到ECR,然后使用EcrImage
提供任务定义(本文有一个有用的buildspec. yml来工作)。
或者,您可以使用AssetImage
,将其指向repo中的正确位置,并CDK处理构建。请注意,在这个用例中,AssetImage不是在接收预构建的工件,而是在生成工件本身。这显然要求您的Dockerfile和C#代码与CDK代码在同一个repo中。