設定秘密變數
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
祕密變數是可在管線中使用的加密變數,而不需要公開其值。 秘密變數可用於私人資訊,例如密碼、標識符,以及您不想在管線中公開的其他識別數據。 祕密變數會以 2048 位元 RSA 金鑰待用加密,而且可在代理程式上供工作和指令碼使用。
設定秘密變數的建議方式位於UI、變數群組中,以及來自 Azure 金鑰保存庫的變數群組中。 您也可以 使用記錄命令 在腳本中設定秘密變數,但不建議使用此方法,因為任何可以存取管線的人也可以看到秘密。
在管線的管線設定 UI 中設定的祕密變數,其範圍會限定於設定所在的管線。 您可以使用變數群組跨管線共用祕密變數。
UI 中的祕密變數
編輯個別管線時,您可以在管線編輯器中設定秘密變數。 您可以選取鎖定圖示來加密並建立管線變數秘密。
您可以設定 YAML 和傳統密碼變數的相同方式。
若要在 Web 介面中設定祕密,請遵循下列步驟:
- 前往 [管線] 頁面,選取適當的管線,然後選取 [編輯]。
- 找出此管線的 [變數]。
- 新增或更新變數。
- 選取 [保留此值秘密] 選項,以加密方式儲存變數。
- 儲存管線。
祕密變數會以 2048 位元 RSA 金鑰待用加密。 代理程式上有祕密可供工作和指令碼使用。 留意誰可以存取並變更您的管線。
重要
我們努力遮罩秘密,使其無法出現在 Azure Pipelines 輸出中,但您仍然需要採取預防措施。 永遠不要將祕密回應為輸出。 某些作業系統會記錄命令列引數。 永遠不要在命令列上傳遞祕密。 相反地,我們建議您將祕密對應至環境變數。
我們絕不會遮罩秘密的子字串。 例如,如果 「abc123」 設定為秘密,則 「abc」 不會從記錄中遮罩。 這是為了避免在層級太細微時遮罩處理祕密,使記錄無法讀取。 因此,祕密不應包含結構化資料。 例如,如果「{ "foo": "bar" }」設定為祕密,則「bar」不會從記錄中遮罩處理。
不同於一般變數,它們不會自動解密為腳本的環境變數。 您必須明確對應秘密變數。
在UI中使用秘密變數
您必須將秘密變數對應為環境變數,以在 YAML 管線中參考它們。 在此範例中,UI SecretOne
SecretTwo
和 中定義了兩個秘密變數。 的值 SecretOne
是 foo
,且 的值 SecretTwo
是 bar
。
steps:
- powershell: |
Write-Host "My first secret variable is $env:FOO_ONE"
$env:FOO_ONE -eq "foo"
env:
FOO_ONE: $(SecretOne)
- bash: |
echo "My second secret variable: $FOO_TWO"
if [ "$FOO_TWO" = "bar" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
env:
FOO_TWO: $(SecretTwo)
管線會輸出:
My first secret variable is ***
True
My second secret variable: ***
Strings are equal.
注意
Azure Pipelines 會在將數據發出至管線記錄時,努力遮罩秘密,因此您可能會在未設定為秘密的輸出和記錄中看到其他變數和數據遮罩。
如需更詳細的範例,請參閱 定義變數。
在變數群組中設定秘密變數
您可以將秘密新增至變數群組,或從現有的 Azure 金鑰保存庫 連結秘密。
建立新的變數群組
選取 [管線連結>庫>+ 變數] 群組。
輸入群組的名稱和描述。
選擇性:移動切換開關以將秘密從 Azure 金鑰保存庫連結為變數。 如需詳細資訊,請參閱使用 Azure 金鑰保存庫 秘密。
輸入要包含在群組中的每個變數的名稱和值 ,併為每個變數 選擇 [+ 新增 ]。
若要保護您的變數,請選擇資料列結尾的 「鎖定」圖示。
當您完成新增變數時,請選取 [ 儲存]。
變數群組會遵循連結 庫安全性模型。
從 Azure Key Vault 連結祕密
您可以建立變數群組,並將其連結至現有的 Azure 金鑰保存庫,讓您對應至儲存在密鑰保存庫中的秘密。 只有秘密名稱會對應至變數群組,而不是秘密值。 連結至變數群組的管線會從保存庫擷取最新的秘密值。 如需詳細資訊,請參閱將變數群組連結至 Azure 金鑰保存庫 中的秘密。
使用 Azure 金鑰保存庫 工作
您可以使用 Azure 金鑰保存庫 工作在管線中包含秘密。 此工作可讓管線連線到您的 Azure 金鑰保存庫,並擷取秘密做為管線變數。
在管線編輯器中,選取 [ 顯示小幫手 ] 以展開助理面板。
搜尋
vault
並選取 Azure 金鑰保存庫 工作。
Azure DevOps Server 2019 和 2020 目前不支援 [讓整個作業使用秘密] 選項。
若要深入瞭解 Azure 金鑰保存庫 工作,請參閱在 Azure Pipelines 中使用 Azure 金鑰保存庫 秘密。
使用記錄命令在指令碼中設定祕密變數
您可以使用 task.setvariable
記錄命令在 PowerShell 和 Bash 腳稿中設定變數。 此方法是使用秘密變數最不安全的方法,但對偵錯很有用。 設定祕密變數的建議方式是在 UI、變數群組和 Azure Key Vault 的變數群組中。
若要使用記錄命令將變數設定為指令碼,您必須傳遞 issecret
旗標。
當 設定為 true 時 issecret
,變數的值將會儲存為秘密,並從記錄中遮罩。
注意
Azure Pipelines 會在將數據發出至管線記錄時,努力遮罩秘密,因此您可能會在未設定為秘密的輸出和記錄中看到其他變數和數據遮罩。
設定祕密變數 mySecretVal
。
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
取得秘密變數 mySecretVal
。
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
bash 中的秘密變數輸出。
深入瞭解如何在 腳本中設定和使用變數。