共用方式為


安全地在管線中使用變數和參數

Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020

瞭解如何安全地利用變數和參數,從管線使用者收集輸入。 如需詳細資訊,請參閱下列文章:

請謹慎使用秘密變數。 設定秘密變數的建議方法包括使用UI、建立變數群組,或使用從 Azure 金鑰保存庫 來源的變數群組。 如需詳細資訊,請參閱 設定秘密變數

變數

變數可作為方便的方法,可事先收集使用者輸入,並協助在管線步驟之間傳輸數據。 不過,使用變數時請小心謹慎。 根據預設,新建立的變數,無論是在 YAML 或腳本中定義,都是讀寫的。 下游步驟可能會意外地修改變量值。

例如,請考慮下列文本代碼段:

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

如果上述步驟設定 MyConfigDebug & 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
}

參數

不同於變數,執行中的管線無法修改管線參數。 參數具有 和 等numberstring數據類型,而且可以限製為特定值子集。 當管線的用戶可設定層面只接受預先定義清單中的值時,這項限制會很有用,以確保管線不接受任意數據。

啟用殼層工作自變數參數驗證

管線可以參考管線內執行的工作。 某些工作包含 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

下一步