2017-10-18 57 views
1

我是AWS CodeCommit中的新成员,我想在每次推送远程存储库后在我的电子邮件中获得git diff。推动AWS CodeCommit后的Git diff

我已经设置触发器接收通过SNS推送电子邮件,但是有没有可能使用lambda函数从上次提交得到纯粹的git diff?

回答

0
  1. 让CodeCommit触发一个Lambda函数。
  2. 包装git与Lambda函数。最简单的方法可能是使用this library,但这需要您在NodeJS中编写函数。如果您想使用Python等其他语言,您可以从该NodeJS库下载git tar文件,并将其用于Python函数中。
  3. 您的Lambda函数是否从触发它的消息中提取了git commit ID。
  4. 让您的Lambda函数执行git diff以获取该提交的差异。
  5. 让您的Lambda函数通过AWS SES向diff发送电子邮件。
+0

谢谢,我会努力做到实现与Node.js的 – user821738

0

如果您将Lambda函数配置为使用CodeCommit作为触发器,您将在您的Lambda event中获得提交ID。

使用提交ID,然后可以使用aws-sdkgetCommit()和/或甚至getDifferences()检索该提交的差异并将其发送到AWS SES。

+0

拉姆达的功能,但如果你使用getDifferences()是你不会响应某些信息是不一样的git的差异得到JSON? – user821738

+0

@ user821738你是什么意思?你可以发表你正在用'getCommit()'和'getDifferences()'获得什么吗? – dashmug

0

所以我没有测试过这个工作流程,但我怀疑你可以让它为你的用例工作。

步骤:

  1. 配置一个CodeCommit触发你的资料库通知lambda函数。这个有效负载将包含每次推送时分支尖端的新提交ID。

  2. 在您的lambda函数中,使用CodeCommit的GetCommit API来获取您希望与之区分的父承诺ID的列表。除非提交是合并,否则应该只有一个父代。

  3. 对于每个父提交,使用CodeCommit的GetDifferences API来获取其中添加,修改或删除每个文件的列表。

  4. 对于每一组已更改的文件,请使用CodeCommit的GetBlob API将文件的内容作为Base64编码的字符串返回。将这些字符串传递给diff库以将diff显示为HTML。我怀疑像viranch/Diffy可以工作(虽然我还没有尝试过自己)。

  5. 一旦你有HTML差异有效载荷,将它们发送到SNS或SES发送电子邮件。