我正在尝试为我们的一个应用程序设置一个仅由计划任务组成的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规则来运行名为"Workload"每天11:15 UTC。没有正在运行的服务被创建,只是一个任务开始,完成它的工作,然后优雅地结束。
它记录到CloudWatch的前缀是"MyWorkloadTask"使日志易于查找。
在这个例子中,任务定义本身是从Docker中提取的,但是指定ECR是很简单的。它假设您已经在其他地方创建了一个Cluster,并将其作为参数传递到这里。