建立服務端點

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

服務端點是一種 Azure DevOps 連線到外部系統或服務的方式。 它們是 Azure DevOps 安全地儲存的屬性組合,其中包含但不限於下列屬性:

  • 服務名稱
  • 描述
  • 伺服器 URL
  • 憑證或權杖
  • 使用者名稱與密碼

擴充功能接著可以使用服務端點來取得儲存的詳細數據,以對該服務執行必要的作業。 請遵循本指南來建立新的服務端點貢獻,並在您的延伸模組中使用。

提示

請參閱使用 Azure DevOps 擴充功能 SDK 進行擴充功能開發的最新檔。

工作概觀

您可以建立 Azure DevOps 的範例延伸模組來開發服務端點,其中包含下列專案:

  • 具有數據源的自定義服務端點,可讓建置工作或儀錶板小工具在端點所定義的服務/伺服器上呼叫 REST 端點。
  • 建置工作,定義兩個屬性:服務端點和挑選清單,其中包含從 REST 端點數據源填入的值。

注意

當您建立服務端點時,其位於專案層級,而不是組織層級。

完成這項工作所涉及的步驟如下:

注意

本教學課程將專案的主目錄稱為「首頁」。

建立指令清單檔案: vss-extension.json

指令 清單檔案 會定義自定義端點,並連結至建置工作的task.json指令清單。

在本文中,指令清單檔案的建立會分成下列三個部分:

建立基本指令清單檔案

在延伸模組的目錄中建立 json 檔案(vss-extension.json例如)。home

{
"manifestVersion": 1,
  "id": "service-endpoint-tutorial",
  "version": "0.1.1",
  "name": "Sample extension that leverages a service endpoint",
  "description": "A sample Azure DevOps extension which shows how to create a custom endpoint and dynamic build task parameters taking value from a REST API.",
  "publisher": "francistotten",
  "targets": [
    {
      "id": "Microsoft.VisualStudio.Services"
    }
  ],  
  "files": [
    {
      "path": "BuildTaskFolder"
    }
  ]
}

注意

publisher更新屬性。 BuildTaskFolder是最終放置建置工作管線的路徑。

新增自定義端點貢獻

在基本指令清單內容的陣列底下targets新增下列contributions數位列數位。

重要

服務連線參數必須由服務連線標識符擷取。

  "contributions": [
    {
      "id": "service-endpoint",
      "description": "Service endpoint type for Fabrikam connections",
      "type": "ms.vss-endpoint.service-endpoint-type",
      "targets": [ "ms.vss-endpoint.endpoint-types" ],
      "properties": {
        "name": "fabrikam",
        "displayName": "Fabrikam server connection",
        "url": {
          "displayName": "Server Url",
          "helpText": "Url for the Fabrikam server to connect to."
        },
        "dataSources": [
          {
            "name": "Fabrikam Projects",
            "endpointUrl": "{{endpoint.url}}api/projects/index",
            "resultSelector": "jsonpath:$[*].nm"
          }

        ],
        "authenticationSchemes": [
          {
            "type": "ms.vss-endpoint.endpoint-auth-scheme-token"
          },
          {
            "type": "ms.vss-endpoint.endpoint-auth-scheme-basic",
            "inputDescriptors": [
              {
                "id": "username",
                "name": "Username",
                "description": "Username",
                "inputMode": "textbox",
                "validation": {
                  "isRequired": false,
                  "dataType": "string"
                }
              },
              {
                "id": "password",
                "name": "Password",
                "description": "Password",
                "inputMode": "passwordbox",
                "isConfidential": true,
                "validation": {
                  "isRequired": false,
                  "dataType": "string"
                }
              }
            ]
          }

        ],
        "helpMarkDown": "<a href=\"url-to-documentation\" target=\"_blank\"><b>Learn More</b></a>"
      }
    },
  ],

如果您已成功新增服務貢獻,當您嘗試將新的服務端點新增至組織時,您會看到 Fabrikam 端點。

使用 Fabrikam 端點建立服務端點。

設定服務端點的螢幕快照。

提示

您可以新增 inputDescriptors 而不使用 authenticationSchemes。 如需詳細資訊,請參閱 InputDescriptor 介面

新增建置工作貢獻

在上一個步驟中的 contributions 陣列內,將下列物件新增至結尾。

{
      "id": "build-task",
      "description": "Task with a dynamic property getting data from an endpoint REST data source",
      "type": "ms.vss-distributed-task.task",
      "targets": [ "ms.vss-distributed-task.tasks" ],
      "properties": {
        "name": "BuildTaskFolder"
      }
    }

dataSource 端點 URL 會從端點的 URL 或固定 URL,以及其他一些值進行計算。 在本教學課程中,此 REST 呼叫不會傳回任何內容,而且應該由您想要對服務進行的任何 REST 呼叫取代。

您可以使用 REST URL 的端點 URL 以外的其他參數,例如某些端點屬性。 例如,假設我們在名為 subscriptionId 的端點中有屬性,REST URL 可以搭配下列語法使用:$(endpoint.subscription)。

建立建置工作

檔案 task.json 描述您的建置工作。

注意

如需詳細資訊,請參閱下列文章:

task.json如果您尚未建立此資料夾,請在目錄中BuildTaskFolder建立檔案,現在請執行此動作。

{
  "id": "6557a6d2-4caf-4247-99ea-5131286a8753",
  "name": "build-task",
  "friendlyName": "Build Task that uses the service endpoint",
  "description": "Task with a dynamic property getting data from an endpoint REST data source",
  "author": "francistotten",
  "helpMarkDown": "Replace with Markdown to show in help",
  "category": "Build",
  "visibility": [
    "Build",
    "Release"
  ],
  "demands": [],
  "version": {
    "Major": "0",
    "Minor": "1",
    "Patch": "1"
  },
  "minimumAgentVersion": "1.95.0",
  "instanceNameFormat": "Service Endpoint Build Task $(project)",
  "inputs": [
    {
      "name": "FabrikamService",
      "type": "connectedService:Fabrikam",
      "label": "Fabrikam service/server end point",
      "defaultValue": "",
      "required": true,
      "helpMarkDown": "Select the Fabrikam end point to use. If needed,selecton 'manage', and add a new service endpoint of type 'Fabrikam server connection'"
    },
    {
      "name": "project",
      "type": "pickList",
      "label": "Fabrikam Project",
      "required": true,
      "helpMarkDown": "Select the name of the Fabrikam Project to analyze.",
      "properties": {
        "EditableOptions": "True"
      }
    }
  ],
  "dataSourceBindings": [
    {
      "target": "project",
      "endpointId": "$(FabrikamService)",
      "dataSourceName": "Fabrikam Projects"
    }
  ],
  "execution": {
    "Node": {
      "target": "sample.js",
      "argumentFormat": ""
    },
    "PowerShell3": {
      "target": "sample.ps1"
    }
  }
}

task.json元件

FabrikamService輸入物件

此欄位是 connectedService:Fabrikam.connectedService 類型的第一個,表示它是端點類型,而 Fabrikam 是對象的名稱。

project輸入物件

此欄位為第二個。 這是一個選擇清單。

  • 此欄位會由 REST 呼叫填入。
  • “project” 字段的值取自自定義端點的 “Projects” REST 數據源。
  • dataSourceBindings 陣列表示。
    • 目標是要填入的建置工作字段名稱 (“project” )。
    • endpointId 是包含自定義端點類型的建置工作欄位名稱。
    • DATASourceName 會選擇 REST 呼叫。

如果您已成功新增建置工作,則現在應該會在您將工作新增至建置管線時看到建置工作。

服務端點建置工作選取器映像。

將建置工作新增至管線之後,請確認它可以看到您所建立的 Fabrikam 端點。 本教學課程中的專案下拉式清單是空白的,因為我們未使用實際服務。 將 Fabrikam 取代為服務之後,請將 Projects 呼叫取代為您自己的 REST API 呼叫,以在建置工作中使用動態數據。

服務端點建置工作設定映像。

驗證

服務端點中的驗證配置會決定用來連線到外部服務的認證。 如需詳細資訊,以及若要查看下列驗證配置,請參閱 驗證配置檔

  • 基本驗證
  • 權杖型驗證
  • 憑證型驗證
  • 無驗證

下一步