如何在 AWS CodeCommit 推送触发器通知中包含 Git 提交信息?

6
我有一个CodeCommit代码仓库。
我设置了一个推送触发器,"发送到"为"Amazon SNS"。
在SNS上,我将一些电子邮件订阅者连接到通知事件。
因此,每当任何开发人员对该仓库执行git push操作时,项目开发人员都会收到一封电子邮件。
该电子邮件类似于:

enter image description here


有没有办法在通知中添加git push或commit消息?


有一个设置选项可以执行 AWS Lambda 脚本 - 我想知道是否有一些方法将消息传递到 Lambda,如果不是 SNS。 - Brian Webster
Git消息是一个重要的字段。我需要它来检测WIP提交。亚马逊真可惜:(。Github、Bitbucket和Gitlab都支持它。 - JRichardsz
2个回答

6
虽然触发器负载未直接提供该信息,但它提供了参考更新列表。每个新/更新的参考(通常是一个分支)都包含提交 ID。如果您配置了 AWS Lambda 触发器,可以从触发器负载中获取这些提交 ID,然后使用 CodeCommit 的“GetCommit”api检索提交消息。然后,您可以将新的负载发送到 SNS 进行电子邮件发送。
关于GetCommit的信息:http://docs.aws.amazon.com/codecommit/latest/APIReference/API_GetCommit.html AWS CodeCommit示例Lambda触发器设置:http://docs.aws.amazon.com/codecommit/latest/userguide/how-to-notify-lambda.html

1
有人尝试过这个吗?在Lambda函数中给定的记录中,即使推送包含多个提交,我似乎只得到了一个引用,因此我的通知只有最新的提交。在CodeCommit控制台中使用“测试触发器”按钮会发送3个引用,我能够列出所有3个提交。我错过了什么吗? - Michael Rush
1
我找到了答案...... "如果您对'master'分支进行了5次提交并推送,则触发器负载应包含新'master'顶部的提交ID和更新引用的名称(在本例中为' master '分支)。尽管有5个新提交,但只会有一个触发事件通知,因为只更新了1个引用(分支master)。 推送的4个非顶端提交的ID不包括在有效负载中。"请参见https://forums.aws.amazon.com/thread.jspa?messageID=756611&#756611 - Michael Rush

0

如果您正在从 AWS 负载中接收连续集成服务器(Jenkins、Travis 等)的负载,并且能够克隆存储库(如果要构建应用程序),则可以使用已安装的 git 工具获取消息。

这是来自 AWS 代码提交触发器到我的 CI 服务器的通知负载:

{
  "Type": "Notification",
  "MessageId": "296892a1a77b",
  "TopicArn": "arn:aws:sns:us-bar-1:123456:TopicFoo",
  "Subject": "UPDATE: AWS CodeCommit us-bar-1 push: my-awesome-repo",
  "Message": ".....",
  "Timestamp": "2021-06-23T20:57:15.040Z",
  "SignatureVersion": "1",
  "SigningCertURL": "https://sns.us-bar-1.amazonaws.com/SimpleNotificationService-foo-.pem",
  "UnsubscribeURL": "https://foo.bar"
}

Message 字段被字符串化了 :s

{\"Records\":[{\"awsRegion\":\"us-bar-1\",\"codecommit\":{\"references\":[{\"commit\":\"fb28ebbec522cc403\",\"ref\":\"refs/heads/mybranch\"}]},\"customData\":null,\"eventId\":\"d1dab883\",\"eventName\":\"ReferenceChanges\",\"eventPartNumber\":1,\"eventSource\":\"aws:codecommit\",\"eventSourceARN\":\"arn:aws:codecommit:us-bar-1:123456:my-awesome-repo\",\"eventTime\":\"2021-06-23T20:57:15.005+0000\",\"eventTotalParts\":1,\"eventTriggerConfigId\":\"e4ea5f3bec6c\",\"eventTriggerName\":\"my_ci_server_notification\",\"eventVersion\":\"1.0\",\"userIdentityARN\":\"arn:aws:iam::123456:user/jane_doe\"}]}

但是如果我们将\"替换为",就可以得到一个可读的JSON。

{
  "Records": [{
    "awsRegion": "us-bar-1",
    "codecommit": {
      "references": [{
        "commit": "fb28ebbec522cc403",
        "ref": "refs/heads/mybranch"
      }]
    },
    "customData": null,
    "eventId": "d1dab883",
    "eventName": "ReferenceChanges",
    "eventPartNumber": 1,
    "eventSource": "aws:codecommit",
    "eventSourceARN": "arn:aws:codecommit:us-bar-1:123456:my-awesome-repo",
    "eventTime": "2021-06-23T20:57:15.005+0000",
    "eventTotalParts": 1,
    "eventTriggerConfigId": "e4ea5f3bec6c",
    "eventTriggerName": "my_ci_server_notification",
    "eventVersion": "1.0",
    "userIdentityARN": "arn:aws:iam::123456:user/jane_doe"
  }]
}

我们可以从以下部分提取提交 ID:references.commit
"references": [{
  "commit": "fb28ebbec522cc403",
  "ref": "refs/heads/mybranch"
}]

最后,使用Git Shell工具获取消息:S
git log --format=%B -n 1 fb28ebbec522cc403

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接