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

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

    mkdir pr-server
    cd pr-server
    
  2. npm init A paranccsal hozzon létre egy új package.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
    
  3. 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
    
  4. 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 .
    
  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. Mentse a fájlt app.js néven.

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

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

  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 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
    
  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 Service Hooks lehetőséget.

    Válassza a Szolgáltatáshohook lehetőséget a rendszergazdai menüből

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

    Válassza az Új előfizetés létrehozása lehetőséget az eszköztárról

    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.

    Válassza a zöld pluszt egy új szolgáltatáshook-előfizetés létrehozásához.

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

    Webes horgok kiválasztása a szolgáltatások listájából

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

    Válassza ki az eseményindítók listájából létrehozott lekéréses kérelmet

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

    Adja meg az URL-címet, és válassza a Teszt lehetőséget a szolgáltatáshook teszteléséhez

    Az ngrok konzolablakában egy bejövő üzenet POST jelenik meg, amely azt jelzi, hogy 200 OKa 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").

    Válassza a válasz fület a teszt eredményeinek megtekintéséhez

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

  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. Frissítés app.js a body-parser for parsing application/jsonhasználatára.

    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í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);
        } 
    );
    
  5. 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>"
    
  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 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
    
  9. Hozza létre az állapotobjektumot, hogy közzétehesse a lekéréses kérelemben.

    StateGitStatusState típusú szám. Annak succeeded 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 , amely 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ál.

        var prStatus = {
            "state": "succeeded",
            "description": "Ready for review",
            "targetUrl": "https://visualstudio.microsoft.com",
            "context": {
                "name": "wip-checker",
                "genre": "continuous-integration"
            }
        }
    
  10. 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"
        }
    
  11. 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)
    })
    
  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
    

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

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

    Válassza a Szerkesztés lehetőséget a helyi menüből

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

    Szerkessze a fájlt, és válassza a Véglegesítés lehetőséget az eszköztáron

  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.

    Adjon meg egy új ágnevet, és válassza a Véglegesítés lehetőséget

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

    Válassza a Lekéréses kérelem létrehozása lehetőséget a javaslati sávon

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

    WiP hozzáadása az alapértelmezett pr-címhez

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

    Állapotszakasz a Folyamatban lévő munka bejegyzéssel.

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