我有驻留在Git存储库(GitHub)中的源代码。我有多个分支用于不同的环境(例如developproduction),我更喜欢使用 protected 分支来管理GitHub界面内的发布。

我想要推送到分支以触发测试和部署。

但是,我也使用CloudFormation以可重现的方式部署AWS服务。我的问题是将CloudFormation与我的Git流程接口(interface)。

例如,在CloudFormation模板中描述了AWS Lambda函数,如下所示:

{
  "Type" : "AWS::Lambda::Function",
  "Properties" : {
    "Code": "source code here"
  }
}

...,其中Code是“Amazon Simple Storage Service(Amazon S3)存储桶或将您的源代码指定为嵌入式文本。”(Docs)

这意味着我需要在部署CloudFormation模板后执行一个手动步骤:
  • $BRANCH上从$REPO checkout 最新的AWS Lambda代码
  • 运行任何测试
  • 运行我的构建和打包脚本
  • 将代码上传到AWS Lambda

  • (这可以在CI提供程序中完成,但随后我仍然必须在每个存储库上单击“重建”)

    我想做的是在CloudFormation模板中定义我的CI管道。使用EC2等应该可以,但是我不知道如何。然后,Git存储库URL将成为CloudFormation模板的参数。

    如何在CloudFormation模板中定义Git Hook ,构建步骤和部署? 这些步骤也应该作为全新CloudFormation部署的一部分运行。

    最佳答案

    通常,您不会将其作为CloudFormation部署的一部分进行构建。构建发生在CloudFormation部署发生之前。

    因此,作为Ci管道的一部分(不在CloudFormation中),您将:

  • 更新您的git仓库
  • 触发新代码
  • 的构建
  • 将您的工件(软件包)上传到S3,切勿覆盖旧的工件(例如,上传到/artifacts/{build number}/MyLambda.zip
  • 触发CloudFormation部署

  • 作为步骤4的一部分,您将在步骤3中创建的工件的位置作为参数传递到CloudFormation堆栈中,并使用这些参数来构建Lambda源代码位置。

    另外,您应该在CloudFormation模板中利用Lambda环境变量来指定dev/prod/staging参数,并且不要将它们硬编码到Lambda包中。这使您可以在dev/prod/staging之间重用相同的构建包。

    关于git - AWS CloudFormation如何从Git提取代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48099302/

    10-11 17:31