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 nem Microsoft-eszközök és -szolgáltatások a PR-munkafolyamatban a PR Status APIhasználatával vehetnek részt. 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 kérésállapotokról további információkért lásd: A kérésmunkafolyamatok testreszabása és kiterjesztése a kérésállapotokkal.
Előfeltételek
- Egy szervezet az Azure DevOpsban egy Git-repozitóriummal. Ha nem rendelkezik szervezettel, regisztráljon a kód ingyenes korlátlan privát Git-adattárakban való feltöltéséhez és megosztásához.
- Telepítse VS Code vagy más tetszőleges 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.
Node.js telepítése
A Node.jstelepítéséhez töltse le az ön platformjának 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.jstelepítésekor ügyeljen arra, hogy az npm-csomagkezelő a telepítés alapértelmezés szerint kijelölt részét.
Alapszintű webkiszolgáló létrehozása az Express használatával
Az ebben a szakaszban ismertetett lépések a Express-et használják, ami egy egyszerű webes keretrendszer Node.js-hez, és számos HTTP segédfüggvényt biztosít, amelyek leegyszerűsítik a webkiszolgálók 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
A
npm init
paranccsal hozzon létre egy újpackage.json
fájlt a projekthez.npm init
Válassza az Enter lehetőséget az összes beállítás alapértelmezett értékének elfogadásához, kivéve a belépési pontot. Módosítsd
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 elmenti a függőségek listájára.npm install express
Hozzon létre egy Express-alkalmazást, amely a PR-állapotkiszolgálóra épül. Az alábbi lépések az Express Hello World példaalapulnak. Nyissa meg a projektmappát a VS Code-ban az alábbi 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!') })
Mentsd a fájlt
app.js
-ra!Futtassa az alapszintű webkiszolgálót a következő paranccsal:
node app.js
Ellenőrizze a böngészőben a
http://localhost:3000/
-t, hogy a kiszolgáló fut-e.
HTTP POST-kérelmek figyelése
A webkiszolgáló POST
kéréseket fog kapni az Azure DevOps Servicestől, ezért ezeket a kéréseket a kiszolgálón kell kezelnie.
A
app.js
fájl végén 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. Ehhez a mintához állítson be két szolgáltatáshookot a PR-eseményekhez, hogy az állapotkiszolgáló értesítést kapjon. Az első a lekéréses kérelem létrehozási eseményhez tartozik, a második pedig a lekéréses kérelem frissítési eseményhez.
A szolgáltatáskampók értesítéseinek fogadásához tegye elérhetővé a portot a nyilvános interneten. Az ngrok segédprogram fejlesztési környezetben hasznos.
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
localhost:3000
-hoz továbbítja. Jegyezze fel az URL-címet, ahogy a következő lépésben szüksége lesz rá. A következő példához hasonlóan néz ki: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 Szolgáltatáskapcsolóklehetőséget.
Ha ez az első szolgáltatáshook, válassza a + Előfizetés létrehozásalehetőséget.
Ha már konfigurált más szolgáltatáshookokat, válassza a plusz
(+)
egy új szolgáltatáshook-előfizetés létrehozásához.Az Új szolgáltatáshook-előfizetés párbeszédablakban válassza a Web Hooks lehetőséget a szolgáltatások listájából, majd válassza a Továbblehetőséget.
Válassza létrehozott lekéréses kérelmet az eseményindítók listájából, majd válassza Továbblehetőséget.
A Művelet lapon írja be az ngrok URL-címét a 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ő
POST
egy200 OK
-t eredményez, amely azt jelzi, hogy a kiszolgáló megkapta a szolgáltatáshook 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. Egy 17-es tartalomhosszt kell látnia, amely megegyezik a POST-kezelő sztringjének hosszával (például "Kapta meg a POST").
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éseket, de ezúttal konfigurálja a lekéréses kérelem frissítésének eseményét.
Fontos
Győződjön meg arról, hogy kétszer hajtja végre az előző lépéseket, és hozzon létre szervizhorgokat mind a létrehozott lekérési kérelem, mind a frissített lekérési kérelem eseményekhez.
Állapot közzététele a PRS-eknek
Most, hogy a kiszolgáló fogadni tudja a szolgáltatáshorog-eseményeket az új lekéréses kérelmek létrehozásakor, frissítse úgy, hogy küldjön vissza állapotjelentést 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
A
app.js
frissítése a body-parser csomag használatával aapplication/json
elemzéséhez.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ítse a(z)
app.js
-t az azure-devops-node-api csomag használatára, állítsa be a fiókjához való kapcsolódás részleteit, és szerezze be a Git API 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, és cserélje le a
<your account>
az Azure DevOps-szervezet nevére.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
post()
függvényt, hogy beolvassa a szolgáltatáshorg hasznos adataiból a PR részleteit. Szüksége van ezekre az értékekre az állapot visszaküldésé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 a lekérési kérelem közzétételéhez.
State
a GitStatusState típusú szám. Asucceeded
használatával jelezheti, hogy a pull kérés megfelelt az állapotellenőrzésnek, és készen áll az egyesítésre.A
description
egy sztringérték, amely az Állapot szakaszban és a tevékenységcsatornában jelenik meg a felhasználó számára a PR-részletek nézetben.A
targetUrl
egy URL-cím, amellyel hivatkozást hozhat létre az Állapot szakaszban és a tevékenységcsatornában található leírásszöveghez, ahol a felhasználók további információkat kaphatnak az állapotról, például buildjelentésről vagy 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
ésgenre
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álnak.var prStatus = { "state": "succeeded", "description": "Ready for review", "targetUrl": "https://visualstudio.microsoft.com", "context": { "name": "wip-checker", "genre": "continuous-integration" } }
Ahelyett, hogy azonnal közzétenné a
succeeded
állapotot, vizsgálja meg a PR címét, hogy a felhasználó jelezte-e, hogy a PR munka folyamatban van-e, ha WIP a címhez ad hozzá. 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ódussal. 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
Hozzon létre egy új PR-t az állapotkiszolgáló teszteléséhez
Most, hogy a kiszolgáló fut és figyeli a szolgáltatáshook-értesítéseket, hozzon létre egy pull kérést a teszteléshez.
Kezdje a fájlnézetben. Szerkessze a readme.md fájlt a tárolójában (vagy egy másik fájlt, 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á WIP- a címhez az alkalmazás működésének teszteléséhez. Válassza a Létrehozás gombot a PR létrehozásához.
Miután a PR létrejön, az állapotszakasz a Folyamatban lévő munka bejegyzéssel jelenik meg, amely a payloadban megadott URL-címre hivatkozik.
Frissítse a PR címét, és távolítsa el a WIP szöveget, és vegye figyelembe, hogy az állapot Folyamatban lévő munka állapotról Áttekintésre készállapotra változik.