成品是您可以新增至 Azure DevTest Labs VM 的工具、動作或軟體。 例如,工件可以執行腳本、安裝工具,或執行加入網域等操作。 DevTest Labs 的使用者可以 將工件加入他們的虛擬機,實驗室管理員也可以 指定必須在所有實驗室虛擬機中新增的工件。
本文說明如何建立用於實驗室虛擬機配置的工件。 產物由產物定義 JSON 檔案及其他腳本檔案組成,這些檔案存放在 Git 儲存庫資料夾中。 你可以將產物存放在私人或公開的 Git 倉庫中。 實驗室管理員可以 將工件儲存庫加入實驗室 ,讓所有實驗室使用者都能存取。
先決條件
- 要建立並處理工件定義檔案,你需要一個 JSON 編輯器。 Visual Studio Code 支援 Windows、Linux 和 macOS。
- 要儲存工件定義和腳本檔案,你需要一個 GitHub 帳號。
了解工件定義檔案
工件定義檔案由一個 JSON 表達式組成,用以指定要對虛擬機執行的動作。 該檔案定義了一個工件名稱、一個要執行的指令,以及該指令可用的參數。 如果工件包含其他腳本檔,你可以在工件定義檔中以名稱來引用這些檔案。
以下範例展示了 artifactfile.json 工件定義檔案的基本結構。
{
"$schema": "https://raw.githubusercontent.com/Azure/azure-devtestlab/master/schemas/2016-11-28/dtlArtifacts.json",
"title": "<title>",
"description": "<description>",
"iconUri": "",
"targetOsType": "<os>",
"parameters": {
"<paramName>": {
"type": "<type>",
"displayName": "<display name>",
"description": "<description>"
}
},
"runCommand": {
"commandToExecute": "<command>"
}
}
該定義包含以下必要及可選元素:
| 元素名稱 | Description |
|---|---|
$schema |
JSON 架構檔案的位置,這能幫助你測試定義檔案的有效性。 |
title |
必需顯示的 文物名稱。 |
description |
所需的 工件描述。 |
iconUri |
顯示工件圖示的 URI。 |
targetOsType |
安裝時必須 使用的作業系統。 支援的值為 Windows 或 Linux。 |
parameters |
安裝期間可用的成品自訂。 |
runCommand |
需要 指令才能在虛擬機上安裝該產物。 |
成品參數
定義檔案的 parameters 部分定義了使用者安裝工件時可指定的選項與值。 你可以在runCommand中參考這些參數。
以下結構定義了一個參數:
"parameters": {
"<name>": {
"type": "<type>",
"displayName": "<display name>",
"description": "<description>"
}
}
每個參數都需要名稱,參數定義則需要以下元素:
| 元素名稱 | Description |
|---|---|
type |
所需 參數值類型。 型別可以是任何有效的 JSON string、整數 int、布林值 bool或 array。 |
displayName |
必須 顯示給使用者的參數名稱。 |
description |
必要 參數描述。 |
安全字串參數
若要在工件定義中包含祕密,請使用 secureStringParam 定義檔案區段中的 parameters 語法,將祕密宣告為安全字串。 該 description 元素允許任何文字字串,包括空格,並在使用者介面中以遮罩字元呈現字串。
"securestringParam": {
"type": "securestring",
"displayName": "Secure String Parameter",
"description": "<any text string>",
"allowEmpty": false
},
以下 runCommand 使用 PowerShell 指令碼,其接受使用 ConvertTo-SecureString 命令建立的安全字串。 腳本會擷取輸出以便除錯,所以為了安全起見,不要把輸出記錄到主控台。
"runCommand": {
"commandToExecute": "[concat('powershell.exe -ExecutionPolicy bypass \"& ./artifact.ps1 -StringParam ''', parameters('stringParam'), ''' -SecureStringParam (ConvertTo-SecureString ''', parameters('securestringParam'), ''' -AsPlainText -Force) -IntParam ', parameters('intParam'), ' -BoolParam:$', parameters('boolParam'), ' -FileContentsParam ''', parameters('fileContentsParam'), ''' -ExtraLogLines ', parameters('extraLogLines'), ' -ForceFail:$', parameters('forceFail'), '\"')]"
}
工件表達式與函式
你可以用表達式和函式來建構 artifact 安裝指令。 運算式在成品安裝時進行評估。
表達式可以出現在 JSON 字串值的任何地方,並且總是回傳另一個 JSON 值。 用括號包住表達式。 [ ] 如果你需要用以括號開頭的字串,就用兩個括號 [[。
你通常會用帶有函數的表達式來構造一個值。 函式呼叫格式為 functionName(arg1, arg2, arg3)。
常見功能包括:
| 功能 | Description |
|---|---|
parameters(parameterName) |
回傳一個參數值,供當工件指令執行時使用。 |
concat(arg1, arg2, arg3, ...) |
結合多個字串值,並可接受多種參數。 |
以下範例使用帶有函數的 concat 表達式來構造一個值。
runCommand": {
"commandToExecute": "[concat('powershell.exe -ExecutionPolicy bypass \"& ./startChocolatey.ps1'
, ' -RawPackagesList ', parameters('packages')
, ' -Username ', parameters('installUsername')
, ' -Password ', parameters('installPassword'))]"
}
建立自訂工件
你可以從範例 artifactfile.json 定義檔案開始建立自訂工件。 公開的 DevTest Labs 產物庫 有一個產物函式庫。 你可以下載一個工件定義檔,並自訂它來創造你自己的工件。
下載 artifactfile.json 定義檔並 artifact.ps1 PowerShell 腳本。https://github.com/Azure/azure-devtestlab/tree/master/Artifacts/windows-test-paramtypes
編輯工件定義檔,對元素和值做一些有效的修改。 在 Visual Studio Code 中,你可以使用 IntelliSense 查看有效的元素和值選項。 例如,當你編輯
targetOsType元素時,IntelliSense 會顯示Windows或Linux選項。將你的產物存放在公開或私人的 Git 產物倉庫中。
- 將每個 artifactfile.json 工件定義檔案存放在與工件名稱相同的獨立目錄中。
- 將安裝指令所參考的腳本存放在與工件定義檔案相同的目錄中。
以下截圖展示了一個範例 artifact 資料夾:
備註
要將自訂產物加入公開的 DevTest Labs 產物庫,請對該倉庫開啟拉取請求。