letztes Mal:
■ So erstellen Sie einen Mechanismus zum Schreiben von Kommentaren in das Backlog beim Pushen an GitHub (mit AWS Lambda) [Teil 1]
https://fourmix-blog.myshopify.com/blogs/aws/220118
Als Fortsetzung des letzten Mals möchte ich die Webhook-Funktion des GitHub-Repositorys und AWS Lambda verwenden, um die Funktion zum automatischen Schreiben von Kommentaren zu verwandten Problemen im Backlog zu realisieren.
<Inhalt>
(0) Dinge, die vorbereitet werden müssen (Teil 1)
(1) AWS Lambda und Amazon API Gateway konfigurieren (Teil 1)
(2) GitHub-Webhook-Einstellungen (Teil 1)
(3) GitHub-Authentifizierung mit AWS Lambda (Teil 1)
(6) Informationen zur AWS-Nutzungsgebühr
(4) Axios-Paket hochladen
Wir verwenden das Axios-Paket, um Anfragen an die Backlog-API zu senden.
Erstellen Sie in Ihrem lokalen Ordner einen „nodejs“-Ordner und öffnen Sie ihn in VS Code .
Führen Sie von der Konsole aus Folgendes aus
npm i -y npm i axios
Nach der Ausführung komprimieren Sie den NodeJS-Ordner selbst.
Klicken Sie anschließend in den Ebenen in der AWS Lambda-Konsole auf „Ebene erstellen“, um eine Ebene zu erstellen.
Fügen Sie abschließend die hinzugefügte Ebene zur Ebene der Funktion hinzu.
(5) Backlog-API aufrufen
Implementieren Sie abschließend den Prozess zum Aufrufen der Backlog-API.
■ Aufgabenkommentare hinzufügen
https://developer.nulab.com/ja/docs/backlog/api/2/add-comment/
Geben Sie zunächst einen API-Schlüssel aus den persönlichen Einstellungen auf der Backlog-Seite aus.
Fügen Sie als Nächstes Umgebungsvariablen aus der AWS Lambda-Konsole hinzu.
BACKLOG_APIKEY: API-Schlüssel, der zuvor ausgegeben wurde
BACKLOG_API_ENDPOINT: API-Endpunkt
BACKLOG_TASKKEY_PREFIX: Präfix des Zielaufgabenschlüssels korrigiert
// axiosの読み込みconst axios = require('axios').default; exports.handler = async (event) => { // ヘッダ取得 const headers = event.headers; // ボディ取得
const body = event.body;
// den Körper objektivieren
const bodyObj = JSON.parse(body);
// Validierung ausführen und Fehler behandeln
if (!isValid(body, headers)) {
// Fehler zurückgeben
const Antwort = {
Statuscode: 500,
body: 'Validierungsfehler',
};
Rückantwort;
}
// Commit-Informationen vom Body-Objekt abrufen
const commits = getCommits(bodyObj);
// Beenden, wenn keine Ziel-Commits vorhanden sind.
if(commits.length === 0){
const Antwort = {
Statuscode: 500,
body: „Es gab keinen Commit, dessen Commit-Nachricht mit „${process.env.BACKLOG_TASKKEY_PREFIX}“ begann“,
};
Rückantwort;
}
// Zweignamen abrufen (allen Commits gemeinsam)
const commit_ref = bodyObj.ref.replace('refs/heads/','');
// Zweig-URL abrufen (gemeinsam für alle Commits)
const branch_url = bodyObj.repository.url + '/tree/' + commit_ref;
// Verarbeitung für jedes Commit
for (const commit of commits) {
// Aufgabenschlüssel und Kommentar abrufen
const {taskkey, comment} = getComment(commit_ref, branch_url, commit);
// API-Aufruf
wait axios.post(`${process.env.BACKLOG_API_ENDPOINT}${taskkey}/comments?apiKey=${process.env.BACKLOG_APIKEY}`, {
Inhalt: Kommentar
});
}
// eine normale Antwort zurückgeben
const Antwort = {
Statuscode: 200,
body: „${commits.length}-Commits verarbeitet.“ `,
};
Rückantwort;
// validieren, ob die Anfrage von Github stammt
Funktion isValid(body, headers) {
const crypto = require('crypto');
const hmac = crypto.createHmac('sha1', process.env.GITHUB_SECRET);
hmac.update(body, 'utf8');
const Signatur = 'sha1=' + hmac.digest('hex');
Rückgabesignatur === headers['x-hub-signatur'];
}
// Ziel-Commit abrufen und zurückgeben
Funktion getCommits(bodyObj){
// Commits abrufen, deren Commit-Nachricht mit der Umgebungsvariablen BACKLOG_TASKKEY_PREFIX beginnt
let commits = bodyObj.commits.filter(function(i){
// Anzahl der Zeichen von BACKLOG_TASKKEY_PREFIX abrufen
const len =process.env.BACKLOG_TASKKEY_PREFIX.length;
return i.message.slice(0,len) === process.env.BACKLOG_TASKKEY_PREFIX;
})
Rückgabe-Commits;
}
// Den Kommentar zusammenstellen und zurückgeben
Funktion getComment(commit_ref, branch_url, commit){
// Issue-Schlüssel aus Commit-Nachricht abrufen
const commit_messages = commit.message.split(' ');
const taskkey = commit_messages[0];
// Kommentar erstellen
let comment = `
Der folgende Fix wurde auf Github übertragen.
[Zweig]: ${commit_ref}
[Branch-URL]: ${branch_url}
[Aufgabenschlüssel]: ${taskkey}
[Name des Committers]: ${commit.author.name}
[Commit-Nummer]: ${commit.id}
[Commit-URL]: ${commit.url}
[Nachricht festschreiben]:
${commit.message}
`;
return {taskkey, comment};
}
};
Wenn Sie nun auf GitHub pushen, wird der Kommentar automatisch zum „In der Commit-Nachricht beschriebenen Problem“ hinzugefügt, wie unten gezeigt.
(6) Informationen zur AWS-Nutzungsgebühr
Was die besorgniserregende AWS-Nutzungsgebühr betrifft, so lautet sie wie folgt.
*Der Preis ist der Preis zum Zeitpunkt der Erstellung dieses Artikels.
■ Amazon API Gateway
Bis zu 300 Millionen monatliche Anfragen, 1.000.000 Anfragen: 1,00 USD
* Während des kostenlosen Zeitraums ( ein Jahr nach Erstellung eines Kontos) sind jedoch bis zu 1 Million Anfragen kostenlos.
■ AWS Lambda
0,20 $ pro Million Anfragen
pro GB-Sek.: 0,0000166667 USD
*Während des kostenlosen Zeitraums sind jedoch 1 Million kostenlose Anfragen pro Monat und 400.000 GB Rechenzeit pro Monat kostenlos.
Mit anderen Worten: Während des Gratiszeitraums ist es kostenlos. Nach Ablauf des Gratiszeitraums wird mit ca. 1,20 USD gerechnet. (es sei denn, die Anzahl der Commits ist extrem hoch)
Daher habe ich die Verknüpfung mithilfe von AWS über den Webhook von GitHub zusammengefasst. Wenn Sie es anwenden, können Sie meiner Meinung nach bei jedem Push CI-Prüfungen durchführen, Nachrichten an Slack senden und viele andere Dinge.
Bitte nehmen Sie verschiedene Herausforderungen an.