Megosztás a következőn keresztül:


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.

  1. A parancssorból hozzon létre egy új projektmappát a webkiszolgálóhoz.

    mkdir pr-server
    cd pr-server
    
  2. A npm init paranccsal hozzon létre egy új package.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
    
  3. 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
    
  4. 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 .
    
  5. 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!')
    })
    
  6. Mentsd a fájlt app.js-ra!

  7. 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.

  1. 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')
    })
    
  2. 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.

  1. Töltse le és bontsa ki a platformhoz megfelelő ngrok-kiadást.

  2. 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
    
  3. Keresse meg a projektet az Azure DevOpsban, például https://dev.azure.com/<your account>/<your project name>

  4. 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.

    Képernyőkép a Felügyeleti menü Szolgáltatáshorgok kiválasztása parancsáról.

  5. Ha ez az első szolgáltatáshook, válassza a + Előfizetés létrehozásalehetőséget.

    Képernyőkép az eszköztár új előfizetés létrehozása elemének kiválasztásáról.

    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.

    A képernyőkép azt mutatja, hogy a plusz jel van kiválasztva egy új szolgáltatáshook-előfizetés létrehozásához.

  6. 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.

    Képernyőkép a szolgáltatások listájából kiválasztott webes horgokról.

  7. 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.

    Képernyőkép az eseményindítók listájából létrehozott kiválasztott lekéréses kérelemről.

  8. 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.

    A képernyőkép a beírt URL-címet és a szolgáltatás hook tesztelésére kiválasztott tesztet mutatja.

    Az ngrok konzolablakában egy bejövő POST egy 200 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").

    Képernyőkép a teszt eredményeihez kiválasztott válaszfülről.

  9. 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.

  1. 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
    
  2. A app.js frissítése a body-parser csomag használatával a application/jsonelemzéséhez.

    var bodyParser = require('body-parser')
    
    app.use(bodyParser.json())
    
  3. 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 
    
  4. 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);
        } 
    );
    
  5. 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>"
    
  6. 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.

  7. Hozzon létre egy környezeti változót a PAT számára.

    setx TOKEN "yourtokengoeshere"
    
  8. 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
    
  9. Hozza létre az állapotobjektumot a lekérési kérelem közzétételéhez.

    State a GitStatusState típusú szám. A succeeded 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 és genre 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"
            }
        }
    
  10. 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"
        }
    
  11. 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)
    })
    
  12. 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")
    })
    
  13. 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.

  1. 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).

    A képernyőkép a helyi menüben kiválasztott Szerkesztés gombot mutatja.

  2. Szerkessze és véglegesítse az adattár módosításait.

    Képernyőkép a fájl szerkesztéséről és az eszköztár Véglegesítés gombjának kiválasztásáról.

  3. 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.

    Képernyőkép, amelyen az új ág neve be van írva, és a Commit gomb ki van választva.

  4. Válassza a Lekéréses kérelem létrehozása hivatkozást.

    Képernyőkép a javaslatsávban kiválasztott

  5. 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.

    Képernyőkép azt mutatja, hogy hozzáadták a WIP-et az alapértelmezett PR címhez.

  6. 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.

    Képernyőkép az állapotszakaszról a Folyamatban lévő munka bejegyzéssel.

  7. 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.