Lekéréses kérelem állapotkiszolgáló létrehozása Node.js
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
A lekéréses kérelem (PR) munkafolyamat lehetővé teszi a fejlesztők számára, hogy visszajelzést kérjenek a kódjukról a társviszonyban lévőktől és az automatizált eszközöktől. A külső eszközök és szolgáltatások a PR status API használatával vehetnek részt a PR-munkafolyamatban. Ez a cikk végigvezeti egy állapotkiszolgáló létrehozásának folyamatán az Azure DevOps Services Git-adattárban található PRS-ek ellenőrzéséhez. A lekéréses kérelmek állapotával kapcsolatos további információkért lásd a lekéréses kérelmek munkafolyamatainak testreszabását és kiterjesztését lekéréses kérelmek állapotával.
Előfeltételek
- Egy Szervezet az Azure DevOpsban Egy Git-adattárral. Ha nem rendelkezik szervezettel, regisztráljon a kód ingyenes korlátlan privát Git-adattárakban való feltöltésére és megosztására.
- Telepítse a VS Code-ot vagy más, ön által választott kódszerkesztőt. Az útmutató utasításai a VS Code-ot használják, de a többi kódszerkesztő lépései hasonlóak.
A Node.js telepítése
A Node.js telepítéséhez töltse le a platformnak megfelelő LTS-kiadást. A letöltés tartalmaz egy telepítőt, amelyet futtatva telepítheti a Node.js futtatókörnyezetet a helyi gépen. A Node.js telepítésekor mindenképpen tartsa meg a telepítés npm-csomagkezelő részét, amely alapértelmezés szerint ki van választva.
Alapszintű webkiszolgáló létrehozása az Express használatával
A jelen szakaszban szereplő lépések az Expresst használják, amely egy egyszerű webes keretrendszer Node.js, amely számos OLYAN HTTP-segédprogramot biztosít, amely leegyszerűsíti a webkiszolgáló létrehozását. Ez a keretrendszer biztosítja a PR-események figyeléséhez szükséges alapvető funkciókat.
A parancssorból hozzon létre egy új projektmappát a webkiszolgálóhoz.
mkdir pr-server cd pr-server
npm init
A paranccsal hozzon létre egy újpackage.json
fájlt a projekthez.npm init
Nyomja le az Enter billentyűt az összes beállítás alapértelmezett értékének elfogadásához, kivéve a belépési pontot. Módosítsa a következőre:
app.js
.entry point: (index.js) app.js
Telepítse az Expresst a pr-server könyvtárba az alábbi paranccsal. Ez telepíti az Expresst, és menti a függőségek listájára.
npm install express
Hozzon létre egy egyszerű Express-alkalmazást, amely a PR állapotkiszolgálóra épül. Az alábbi lépések az Express Hello világ példáján alapulnak. Nyissa meg a projektmappát a VS Code-ban a következő parancs futtatásával a
pr-server
mappából.code .
Hozzon létre egy új fájlt
(Ctrl + N)
, és illessze be a következő mintakódot.const express = require('express') const app = express() app.get('/', function (req, res) { res.send('Hello World!') }) app.listen(3000, function () { console.log('Example app listening on port 3000!') })
Mentse a fájlt
app.js
néven.Futtassa az alapszintű webkiszolgálót a következő paranccsal:
node app.js
Ellenőrizze, hogy a kiszolgáló fut-e. Ehhez tallózással ellenőrizze, hogy a kiszolgáló fut-e
http://localhost:3000/
.
HTTP POST-kérelmek figyelése
A webkiszolgáló kéréseket fog kapni POST
az Azure DevOps Servicestől, ezért ezeket a kéréseket a kiszolgálón kell kezelnie.
A fájl végén
app.js
adja hozzá a következő kódot, és mentse a fájlt.app.post('/', function (req, res) { res.send('Received the POST') })
Futtassa újra a webkiszolgálót a következő paranccsal:
node app.js
Szolgáltatáshook konfigurálása PR-eseményekhez
A szolgáltatáshookok egy Azure DevOps Services-szolgáltatás, amely riasztást küld a külső szolgáltatásoknak bizonyos események bekövetkezésekor. Ebben a példában két szolgáltatáshookot szeretne beállítani a PR-eseményekhez, hogy az állapotkiszolgáló értesítést kapjon. Az első a lekéréses kérelem által létrehozott eseményhez, a második pedig a lekéréses kérelem frissített eseményéhez lesz.
A szolgáltatáshook-értesítések fogadásához közzé kell tennie egy portot a nyilvános interneten. Az ngrok segédprogram nagyon hasznos, ha ezt fejlesztési környezetben végzi.
Töltse le és bontsa ki a platformhoz megfelelő ngrok-kiadást.
Az ngrok használatával ugyanazon a porton kezdheti el a figyeléseket, mint a mintakiszolgáló – 3000-as port. Futtassa a következő parancsot egy új parancsablakban.
ngrok http 3000
Az Ngrok létrehoz egy nyilvános URL-címet, amely a következőre továbbítja a következőt
localhost:3000
: . Vegye figyelembe, hogy a következő lépésben szükség lesz rá az URL-címre. A következőhöz hasonlóan fog kinézni:http://c3c1bffa.ngrok.io
Keresse meg a projektet az Azure DevOpsban, például:
https://dev.azure.com/<your account>/<your project name>
A navigációs menüben vigye az egérmutatót a fogaskerék fölé, és válassza a Service Hooks lehetőséget.
Ha ez az első szolgáltatáshook, válassza a + Előfizetés létrehozása lehetőséget.
Ha már konfigurálta a többi szolgáltatáshookot, válassza a zöld pluszt
(+)
egy új szolgáltatáshook-előfizetés létrehozásához.Az Új szolgáltatáshook-előfizetés párbeszédpanelen válassza a Web Hooks lehetőséget a szolgáltatások listájából, majd válassza a Tovább lehetőséget.
Válassza az eseményindítók listájából létrehozott lekéréses kérelmet, majd válassza a Tovább gombot.
A Művelet lapon írja be az ngrok URL-címét az URL-mezőbe . Válassza a Teszt lehetőséget, ha teszteseményt szeretne küldeni a kiszolgálónak.
Az ngrok konzolablakában egy bejövő üzenet
POST
jelenik meg, amely azt jelzi, hogy200 OK
a kiszolgáló megkapta a szolgáltatáshoom eseményt.HTTP Requests ------------- POST / 200 OK
A Tesztértesítés ablakban válassza a Válasz lapot a kiszolgáló válaszának részleteinek megtekintéséhez. 17-nek kell megjelennie, amely megegyezik a POST-kezelő sztringjének hosszával (azaz "Megkapta a POST-et").
Zárja be a Tesztértesítés ablakot, és válassza a Befejezés lehetőséget a szolgáltatáshook létrehozásához.
Folytassa újra a 3–9. lépést, de ezúttal konfigurálja a lekéréses kérelem frissített eseményét.
Fontos
Mindenképpen végezze el kétszer az előző lépéseket, és hozzon létre szolgáltatáshookokat mind a létrehozott lekéréses kérelemhez, mind a lekéréses kérelem frissített eseményeihez.
Állapot közzététele a PRS-eknek
Most, hogy a kiszolgáló fogadni tudja a szolgáltatáshohoom-eseményeket az új PRS-ek létrehozásakor, frissítse az állapotot a lekéréses kérelemre.
A szolgáltatáshook-kérelmek tartalmazzák az eseményt leíró JSON hasznos adatokat. A szolgáltatáshook által visszaadott JSON elemzéséhez telepítse a body-parser csomagot.
npm install body-parser
Frissítés
app.js
a body-parser for parsingapplication/json
használatára.var bodyParser = require('body-parser') app.use(bodyParser.json())
Az Azure Reposba irányuló REST API-hívások egyszerűbbé tételéhez telepítse az azure-devops-node-api csomagot.
npm install azure-devops-node-api
Frissítsen
app.js
az azure-devops-node-api csomag használatára, állítsa be a fiókhoz való kapcsolódás részleteit, és szerezze be a Git API egy példányát.const vsts = require("azure-devops-node-api") const collectionURL = process.env.COLLECTIONURL const token = process.env.TOKEN var authHandler = vsts.getPersonalAccessTokenHandler(token) var connection = new vsts.WebApi(collectionURL, authHandler) var vstsGit = connection.getGitApi().then( vstsGit => { vstsGit.createPullRequestStatus(prStatus, repoId, pullRequestId).then( result => { console.log(result); }, error => { console.log(error); }) }, error => { console.log(error); } );
Hozzon létre egy környezeti változót a gyűjtemény URL-címéhez az Azure DevOps-szervezet nevére cserélve
<your account>
.setx COLLECTIONURL "https://dev.azure.com/<your account>"
Hozzon létre egy személyes hitelesítési jogkivonatot (PAT) az alkalmazás számára az alábbi utasítások szerint: Hitelesítés személyes hozzáférési jogkivonatokkal. Minden olyan szolgáltatáshoz létre kell hoznia egy új PAT-t, amelyet a fiókjához való hozzáféréshez használ, és megfelelően elnevezi.
Hozzon létre egy környezeti változót a PAT számára.
setx TOKEN "yourtokengoeshere"
Frissítse a függvényt
post()
a szolgáltatáshook hasznos adatainak olvasásához. Ezekre az értékekre szüksége lesz a visszaküldött állapot közzétételéhez.var repoId = req.body.resource.repository.id var pullRequestId = req.body.resource.pullRequestId var title = req.body.resource.title
Hozza létre az állapotobjektumot, hogy közzétehesse a lekéréses kérelemben.
State
GitStatusState típusú szám. Annaksucceeded
jelzésére használható, hogy a lekéréses kérelem megfelelt az állapot-ellenőrzésnek, és készen áll az egyesítésre.Ez
description
egy sztringérték, amely az Állapot szakaszban és a tevékenységcsatornában jelenik meg a felhasználó számára a lekéréses kérelem részletei nézetben.Ez
targetUrl
az URL-cím az Állapot szakaszban és a tevékenységcsatornában található leírás szövegére mutató hivatkozás létrehozásához használható. Ez az a hely, ahol a felhasználók további információkat kaphatnak az állapotról, például egy buildjelentésről vagy egy tesztfuttatásról. Ha nincs megadva URL-cím, a leírás hivatkozás nélküli szövegként jelenik meg.A környezet
name
, amelygenre
az állapot kategorizálására és más szolgáltatások közzétételi állapotától való megkülönböztetésére szolgál.var prStatus = { "state": "succeeded", "description": "Ready for review", "targetUrl": "https://visualstudio.microsoft.com", "context": { "name": "wip-checker", "genre": "continuous-integration" } }
Ahelyett, hogy vakon közzétette volna az
succeeded
állapotot, vizsgálja meg a pr címet, és ellenőrizze, hogy a felhasználó jelezte-e, hogy a pr folyamatban lévő munka-e, ha wip-t ad hozzá a címhez. Ha igen, módosítsa a visszaküldött állapotot a lekéréses kérelemre.if (title.includes("WIP")) { prStatus.state = "pending" prStatus.description = "Work in progress" }
Végül tegye közzé az állapotot a
createPullRequestStatus()
metódus használatával. Ehhez szükség van az állapotobjektumra, az adattárazonosítóra és a lekéréses kérelem azonosítóra. Adja ki a csomópontkonzolra adott választ, hogy láthassa a bejegyzés eredményét.vstsGit.createPullRequestStatus(prStatus, repoId, pullRequestId).then( result => { console.log(result) })
Az eredményként kapott metódusnak a következőképpen kell kinéznie:
app.post("/", function (req, res) { // Get the details about the PR from the service hook payload var repoId = req.body.resource.repository.id var pullRequestId = req.body.resource.pullRequestId var title = req.body.resource.title // Build the status object that we want to post. // Assume that the PR is ready for review... var prStatus = { "state": "succeeded", "description": "Ready for review", "targetUrl": "https://visualstudio.microsoft.com", "context": { "name": "wip-checker", "genre": "continuous-integration" } } // Check the title to see if there is "WIP" in the title. if (title.includes("WIP")) { // If so, change the status to pending and change the description. prStatus.state = "pending" prStatus.description = "Work in progress" } // Post the status to the PR vstsGit.createPullRequestStatus(prStatus, repoId, pullRequestId).then( result => { console.log(result) }) res.send("Received the POST") })
Mentse
app.js
és indítsa újra a csomópontalkalmazást.node app.js
Új lekéréses kérelem létrehozása az állapotkiszolgáló teszteléséhez
Most, hogy a kiszolgáló fut és figyeli a szolgáltatáshoom-értesítéseket, hozzon létre egy lekéréses kérelmet a teszteléshez.
Kezdje a fájlnézetben. Szerkessze a readme.md fájlt az adattárban (vagy bármely más fájlban, ha nincs readme.md).
Szerkessze és véglegesítse az adattár módosításait.
Mindenképpen véglegesítse a módosításokat egy új ágra, hogy a következő lépésben létrehozhasson egy lekéréses kérelmet.
Válassza a Lekéréses kérelem létrehozása hivatkozást.
Adja hozzá a WIP-t a címhez az alkalmazás működésének teszteléséhez. Válassza a Létrehozás lehetőséget a lekéréses kérelem létrehozásához.
A lekéréses kérelem létrehozása után megjelenik az állapotszakasz a Folyamatban lévő munka bejegyzéssel, amely a hasznos adatban megadott URL-címre hivatkozik.
Frissítse a pr címet, és távolítsa el a WIP-szöveget, és vegye figyelembe, hogy az állapot a Folyamatban lévő munka állapotáról a Felülvizsgálatra kész állapotra változik.
Következő lépések
- Ebben a cikkben megismerkedett azzal, hogyan hozhat létre olyan szolgáltatást, amely szolgáltatáshookokon keresztül figyeli a PR-eseményeket, és állapotüzeneteket tehet közzé az állapot API használatával. A lekéréses kérelem állapotának API-járól további információt a REST API dokumentációjában talál.
- Fiókházirend konfigurálása külső szolgáltatáshoz.