2017-10-18 158 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發送電子郵件。