使用AWS CodePipeline或其他的复杂/协调CD

时间:2018-05-07 12:36:37

标签: circleci aws-code-deploy bitbucket-pipelines aws-codepipeline codeship

构建AWS无服务器解决方案(lambda,s3,cloudformation等)我需要一个自动构建解决方案。应用程序应存储在Git存储库(pref.Bitbucket或Codecommit)中。我查看了BitBucket管道,AWS CodePipeline,CodeDeploy,托管的CI / CD解决方案,但似乎所有这些都做了一些静态的事情,就像收到一个愚蠢的信号,改变了一些东西来重建整个环境....就像它是1个应用程序,不是分布式应用程序。

我想定义有序步骤,根据每次更改的文件类型进行操作。

E.g。 1.首先应使用包含lambda代码的每个更新的 .js文件来更新现有的lambda 2.之后,每个新的或更改的云形式文件/堆栈应该用于更新或创建现有的文件/堆栈,可能需要订单(从彼此导入值) 3.之后,应使用.js文件中 new lambda的代码来更新已创建的lambda(prev step)代码。

不应更新或重新创建未更新的资源! 似乎我的管道应该被排序并且能够过滤输入(例如,仅来自某个路径的.js文件)并且还接收所更改的资源的名称是什么的输入。

我似乎没有使用AWS或托管的git解决方案找到这种功能,如BitBucket或CI / CD管道,如CircleCI或Codeship,aws CodePipeline,CodeDeploy等。

为什么?没有人需要这个吗?似乎是我眼中的基本要求......

2 个答案:

答案 0 :(得分:1)

我再次查看可用的AWS工具并得出以下结论:

  1. 当将CodePipeline与CodeCommit重新连接时,每次提交都会将整个存储库包放在S3上作为CodeCommit的输入。所以不仅是变化,还有一切。
  2. 在CodePipeline中有我正在寻找的编排功能。您可以为每个组件执行操作,例如SAM组件的create-change-set和execute-chage-set等,并控制所有组件的顺序。 但:
    • 由于所有代码都是作为输入提供的,我假设CodeCommit中的所有操作都会被触发,即使代码中的一小段更改也不会影响99%的资源。水下SAM或CF将决定自己做了什么或没有改变。但效率不高。请参阅我的帖子here
    • 我无法在管道中看到最后一次运行哪一个及其状态......
    • 我无法使用自定义输入临时禁用管道或触发器
  3. 最后,我想创建一个带有自定义lambda代码的主管道,确定使用CodeCommit API实际更改的内容并拆分子管道中的所有操作。从主管道我将他们所需的输入推送到S3并执行它们。

答案 1 :(得分:0)

(我不允许发表评论,所以我会尝试提供答案 - 可能不是你希望的答案:))

肯定有需要,在Codeship,我们正在研究如何最好地支持FaaS /无服务器工作流程。在过去的几年里,它已经成为一个移动目标,但更常见的做法等开始出现/成熟到开始编纂它们更有意义的时候。

目前,似乎大多数在这个领域工作的人都采用脚本编写(无服务器框架,或者直接针对FaaS提供商),但是每个人都在努力解决只是部署变更而不是部署所有内容的问题。 。通过测序增加进一步的复杂性显然只是让事情变得更难。

大多数服务(包括Codeship)将允许您采用某种形式的顺序/步进式方法进行部署,但您必须完成所有重大工作以解决已发生的变化等问题。

关于你怎么来的问题?我认为这纯粹取决于工具最近变化的速度以及实际上很少有人这么做。对于大公司来说,转向K8并且我认为他们基本上只是淹没了FaaS采用者。并不是说它应该是那样,或者我们在Codeship不想改变它;这就是我亲眼看到的事情。