scheduled-tasks - 将 codedeploy 用于 Fargate 计划任务
问题描述
我正在尝试为我们的一个仅包含计划任务的应用程序设置 CI/CD 管道。似乎无法弄清楚这些建议的 CI/CD 工作流程。据我所知,所有在线文档和示例都与服务一起使用。
目前,我的任务配置为使用“最新”标签,但是,我希望能够在特定版本上运行它们,并且随着新版本的发布,使用命名版本。
如果这有所不同,我将使用 CDK 进行所有配置。
任何指针都非常感谢。
解决方案
我认为构建、测试和部署到 ECR 或 Docker 的 CodePipeline 堆栈将负责 CI/CD 部分。就计划任务部分而言,也许这提供了一些启发:
public class MyWorkloadTaskStack extends Stack {
public MyWorkloadTaskStack(@Nullable Construct scope, @Nullable String id, @Nullable StackProps props, @NotNull Cluster cluster) {
super(scope, id, props);
FargateTaskDefinition task = FargateTaskDefinition.Builder.create(this, "MyWorkloadTask")
.memoryLimitMiB(1024)
.cpu(256)
.build();
task.addContainer("Workload", ContainerDefinitionOptions.builder()
.image(fromRegistry("zsquare/my-workload"))
.logging(AwsLogDriver.Builder.create()
.logGroup(LogGroup.Builder.create(this, "LogGroup")
.logGroupName("MyWorkloadTaskLogGroup")
.removalPolicy(RETAIN)
.retention(ONE_MONTH)
.build())
.streamPrefix("MyWorkloadTask")
.build())
.build());
Rule rule = Rule.Builder.create(this, "MyWorkloadRule")
.schedule(cron(CronOptions.builder()
.hour("11")
.minute("15")
.build()))
.build();
rule.addTarget(EcsTask.Builder.create()
.cluster(cluster)
.subnetSelection(SubnetSelection.builder()
.subnetType(PUBLIC)
.build())
.taskDefinition(task)
.taskCount(1)
.containerOverrides(asList(ContainerOverride.builder()
.containerName("Workload")
.build()))
.build());
}
}
这将创建一个 EventBridge 规则,以在每天 11:15 UTC 运行名为“工作负载”的任务定义。没有创建正在运行的服务,只是一个启动、完成工作、然后优雅结束的任务。
它使用前缀“MyWorkloadTask”记录到 CloudWatch,以便于查找日志。
在此示例中,任务定义本身从 Docker 中提取,但指定 ECR 是微不足道的。它假设您已经在其他地方创建了一个集群,并将其作为参数传入这里。
推荐阅读
- ios - 无法识别的选择器发送到实例 0x7fb0cd214f40'
- angular - 如何在agGrid中隐藏单元格工具提示?
- c++ - 如何在 C++ 中以这种方式返回一行文本?
- bash - 根据 SSID 更改 MacOS 位置 - 无法让脚本自动运行
- ios - 在连接的设备上构建和运行带有 Firebase 框架错误的 swiftUI ios 应用程序的修复方法是什么?
- python - Flask-Uploads:如何按内容强制文件类型(不仅仅是扩展名)
- c++ - 从 cin 读取不会返回整个输入字符串
- python - Pygame 显示不更新
- c# - 如何在 Fact 测试方法中获取 xUnit Fact Attribute 'DisplayName' 参数
- sass - 如何使用汇总从 @material 导入 scss 文件?