AWS Lambda for CodeCommit repo sync

时间:2017-07-10 13:37:01

标签: git amazon-web-services bitbucket aws-lambda

我希望将我的Bitbucket存储库镜像到CodeCommit并从中构建,而不会影响开发人员的工作流程。迁移很容易,现在的目标是将CodeCommit与Bitbucket同步,理想情况是通过推送到Bitbucket来触发,但基于时间的同步也是可以接受的。

我在https://aws.amazon.com/blogs/devops/replicating-and-automating-sync-ups-for-a-repository-with-aws-codecommit/

找到了这篇帖子:Mirror a Git Repo directly to AWS CodeCommit和未回答的问题

请分享您如何编写aws lambda函数以将CodeCommit存储库与Bitbucket同步的想法。

2 个答案:

答案 0 :(得分:1)

虽然我没有尝试过,但我怀疑以下工作流程可行。一般的想法是使用BitBucket webhooks功能通过使用API​​网关触发lambda函数。

  1. 编写一个Lambda函数,该函数反映了'从您的bitbucket存储库URL克隆并推送到您的CodeCommit存储库URL。您的功能可能需要包含自己的独立git客户端库。

  2. 使用调用lambda函数的API网关创建API。这里的潜在挑战可能是验证发送到您的API的POST请求来自Bitbucket,而不是来自其他来源。

  3. 为您的Bitbucket存储库创建一个新的webhook,其URL是您在步骤2中创建的API的网址。'存储库推送'触发器足以在每次推送后触发复制事件。

答案 1 :(得分:0)

一种选择是使用CodePipline。不幸的是,CodePipline目前有一个奇怪的过程,使Lambda函数作为管道的唯一过程。基本上它归结为:

  1. 使用AWS CodeCommit作为源代码来制作CodePipeline
  2. 使用其要求的设置创建一个所需的Build / Deploy阶段。请注意,您将在以后删除它们(除非您实际上计划使用给定的CodePipeline阶段),因此请创建一个新的CodeBuild项目或只是为了完成向导。
  3. 创建一个与BitBucket对话的Lambda函数,以同步您的更改。附加的角色必须具有与CodePipline和CodeCommit接口的权限。 Lambda函数还必须调用PubJobSuccessResultPutJobFailureResult中的任何一个,以便CodePipeline知道Lambda实际上做了什么,而不是等待函数完成。
  4. 现在返回CodePipeline并进行编辑。对于生成的任何阶段,删除现有操作。添加一个指向Lambda函数的新Invoke操作,并设置Role以访问CodePipeline以设置作业结果,并设置CodeCommit以读取repo。
  5. 另一种选择是使用CloudWatch scheduling以X间隔调用Lambda,如果您可以使用延迟更高的同步。从长远来看,这可能更容易设置,如果没有任何东西可以同步,可能会有空Lambda运行,这与你的分配相反。