AWS Codepipeline不会更新我的ECS群集

问题描述 投票:1回答:1

我使用CloudFormation创建了两个堆栈。第一个堆栈创建一个包含其所需资源的Cluster:

  • 负载均衡器
  • 自动缩放组
  • 目标群体
  • 听众
  • EC2实例
  • 任务定义和服务
  • 等等...

第二个堆栈用于创建CodePipeline堆栈,以便配置连续的传递管道。

流程应如下:

  • 用户将代码推送到Github
  • 触发CodePipeline,执行以下阶段: Source Stage:从Github中提取代码 构建阶段:构建映像并将其推送到ECR 部署阶段:在上述第一个CloudFormation堆栈上触发STACK_UPDATE。
  • ECS群集服务通过CloudFormation堆栈更新进行更新

一切都很好,但我遇到了问题。我正在更新代码,应用程序似乎运行旧代码,我的意思是,管道运行绿色,但每当我访问负载均衡器URL时代码都不会更新。我想这是因为CloudFormation脚本没有改变,但我的代码确实改变了!

有什么办法可以强制CloudFormation堆栈更新吗?或者我应该在部署阶段部署到ECS群集而不是CloudFormation?

continuous-integration amazon-cloudformation devops continuous-delivery aws-codepipeline
1个回答
0
投票

据我所知,您缺少部署应用程序阶段。您似乎只是更新基础架构而不是在部署阶段部署应用程序代码?

我如何习惯于设置它:

  • 代码管道和基础架构模板与代码一起使用
  • 代码推送会触发codepipeline
  • 第一阶段:从codecommit(或你的情况下的github)中检出代码
  • (可选)codepipeline更新自身以处理codepipeline模板的更改
  • 构建阶段:构建映像并推送到ECR
  • 部署基础架构阶段:触发基础架构堆栈的云信息堆栈更新
  • 部署应用程序阶段:将应用程序代码部署到基础结构(您似乎缺少的内容)

在您的cloudformation模板中为ECS部署应用程序阶段将如下所示:

...
Stages:
    - Name: deploy-app
      Actions:
        - Name: Deploy
          ActionTypeId:
            Category: Deploy
            Owner: AWS
            Provider: ECS
            Version: 1
          InputArtifacts:
            - Name: build-output-artifact
          Configuration:
            ClusterName: 'my-cluster'
            ServiceName: 'my-service'
            FileName: 'imagedefinitions.json' (optional)

在构建阶段,将图像推送到ECR后,将ECR URL写入ECS imagedefinitions.json。 imagedefinitions.json必须是构建阶段的输出artefact和deploy-app阶段的输入artefact。

更多信息:

© www.soinside.com 2019 - 2024. All rights reserved.