安全地在管線中使用變數和參數
Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020
瞭解如何安全地利用變數和參數,從管線使用者收集輸入。 如需詳細資訊,請參閱下列文章:
請謹慎使用秘密變數。 設定秘密變數的建議方法包括使用UI、建立變數群組,或使用從 Azure 金鑰保存庫 來源的變數群組。 如需詳細資訊,請參閱 設定秘密變數。
變數
變數可作為方便的方法,可事先收集使用者輸入,並協助在管線步驟之間傳輸數據。 不過,使用變數時請小心謹慎。 根據預設,新建立的變數,無論是在 YAML 或腳本中定義,都是讀寫的。 下游步驟可能會意外地修改變量值。
例如,請考慮下列文本代碼段:
msbuild.exe myproj.proj -property:Configuration=$(MyConfig)
如果上述步驟設定 MyConfig
為 Debug & deltree /y c:
,可能會導致非預期的結果。 雖然此範例只會刪除組建代理程序的內容,但它會醒目提示這類設定的潛在危險。
您可以將變數設為唯讀。
、工作輸出變數和佇列時間變數等 Build.SourcesDirectory
系統變數一律為唯讀。
在 YAML 中建立或由腳本在運行時間建立的變數可以指定為唯讀。
當腳本或工作建立新的變數時,它可以在其記錄命令中傳遞 isReadonly=true
旗標,讓變數成為只讀的。
在 YAML 中,您可以使用下列特定索引鍵來指定唯讀變數:
variables:
- name: myReadOnlyVar
value: myValue
readonly: true
佇列時間變數
在 Pipelines UI 編輯器中定義變數時,您可以允許使用者在管線執行期間覆寫其值。 這些變數稱為佇列時間變數,且一律定義於 Pipelines UI 編輯器內。
佇列時間變數會在使用者手動執行管線時公開給終端使用者,而且可以變更其值。
使用者需要在 管線上編輯佇列組建組態 許可權,以指定佇列時間設定的變數。
限制可在佇列時間設定的變數
用來執行管線的UI和REST API提供方法,讓使用者在佇列時定義新的變數。
在 Azure Pipelines 的早期,這項功能有下列問題:
- 它可讓使用者定義定義中尚未由管線作者定義的新變數。
- 其允許使用者覆寫系統變數。
為了解決這些問題,我們定義了一個設定來 限制可在佇列時間設定的變數。 開啟此設定後,只能設定明確標示為「在佇列時間設定可設定」的變數。 換句話說,除非開啟此設定,否則您可以在佇列時間設定任何變數。
此設定的設計目的是在組織和專案層級工作。
- 組織層級:
- 當設定開啟時,它會強制只有明確標示為「在佇列時設定」的變數,才能針對組織內所有專案的所有管線進行修改。
- 專案集合系統管理員可以啟用或停用此設定。
- 在 [組織設定>管線設定>] 底下存取此設定。
- 專案層級:
- 與組織層級類似,啟用此設定可確保只有標示為「在佇列時間設定」的變數可以針對特定專案內的所有管線進行修改。
- 如果已啟用組織層級設定,則會套用至所有專案,且無法關閉。
- 專案管理員可以啟用或停用此設定。
- 在 [項目設定>管線設定>] 底下存取此設定。
下列範例顯示設定開啟,而您的管線會定義在佇列時間無法設定的變數 my_variable
。
接下來,假設您想要執行管線。 [ 變數 ] 面板不會顯示任何變數,而且遺漏 [ 新增變數] 按鈕。
使用組建 - 佇列和執行 - 執行管線 REST API 呼叫來將管線執行排入佇列,並設定 新變數的值my_variable
失敗,並出現類似下列的錯誤。
{
"$id": "1",
"innerException": null,
"message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
"typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
"typeKey": "PipelineValidationException",
"errorCode": 0,
"eventId": 3000
}
參數
不同於變數,執行中的管線無法修改管線參數。
參數具有 和 等number
string
數據類型,而且可以限製為特定值子集。 當管線的用戶可設定層面只接受預先定義清單中的值時,這項限制會很有用,以確保管線不接受任意數據。
啟用殼層工作自變數參數驗證
管線可以參考管線內執行的工作。 某些工作包含 arguments
參數,可讓您指定更多任務選項。
啟用 [啟用殼層工作] 自變數參數驗證設定時,自變數參數會接受檢閱,以確保殼層正確地執行分號、引號和括號等字元。 與 [在佇列時間設定時可以設定的限制變數] 選項類似,您可以在 [設定管線>設定] 下>,於組織或專案層級設定 [啟用殼層工作] 自變數參數驗證。
當此功能開啟時,與參數相關的 arguments
任何驗證問題會觸發錯誤訊息,如下所示:
Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).
若要解決此問題,請逸出錯誤訊息中所述的特殊字元來調整自變數。 此驗證適用於 arguments
下列特定工作中的參數:
- PowerShell
- BatchScript
- Bash
- Ssh
- AzureFileCopy
- WindowsMachineFileCopy