共用方式為


設定秘密變數

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

祕密變數是可在管線中使用的加密變數,而不需要公開其值。 秘密變數可用於私人資訊,例如密碼、標識符,以及您不想在管線中公開的其他識別數據。 祕密變數會以 2048 位元 RSA 金鑰待用加密,而且可在代理程式上供工作和指令碼使用。

設定秘密變數的建議方式位於UI變數群組中,以及來自 Azure 金鑰保存庫的變數群組中。 您也可以 使用記錄命令 在腳本中設定秘密變數,但不建議使用此方法,因為任何可以存取管線的人也可以看到秘密。

在管線的管線設定 UI 中設定的祕密變數,其範圍會限定於設定所在的管線。 您可以使用變數群組跨管線共用祕密變數。

UI 中的祕密變數

編輯個別管線時,您可以在管線編輯器中設定秘密變數。 您可以選取鎖定圖示來加密並將管線變數設為秘密。

您可以以相同的方式設定 YAML 和傳統的機密變數。

若要在 Web 介面中設定祕密,請遵循下列步驟:

  1. 前往 [管線] 頁面,選取適當的管線,然後選取 [編輯]
  2. 找出此管線的 [變數]
  3. 新增或更新變數。
  4. 選取 [保留此值秘密] 選項,以加密方式儲存變數。
  5. 儲存管線。

祕密變數在靜止時會以 2048 位元 RSA 金鑰加密。 可使用的祕密存於代理程式中,供工作和指令碼使用。 留意誰可以存取並變更您的管線。

重要

我們努力遮罩秘密,使其無法出現在 Azure Pipelines 輸出中,但您仍然需要採取預防措施。 永遠不要將祕密顯示為輸出。 某些作業系統會記錄命令列引數。 永遠不要在命令列上傳遞祕密。 相反地,我們建議您將您的秘密映射到環境變數中。

我們絕不會遮罩秘密的子字串。 例如,如果「abc123」設定為秘密,則「abc」在記錄中不會被隱藏。 這是為了避免在過於細微的層次上遮罩祕密,導致日志無法讀取。 因此,祕密不應包含結構化資料。 例如,如果「{ "foo": "bar" }」設定為機密,則「bar」不會在記錄中被遮罩。

不同於一般變數,它們不會自動解密為腳本的環境變數。 您必須明確地對應秘密變數。

在UI中使用秘密變數

您必須將秘密變數對應為環境變數,以在 YAML 管線中參考它們。 在此範例中,SecretOneSecretTwo 這兩個秘密變數是在 UI 中定義的。 的值 SecretOnefoo ,且 的值 SecretTwobar

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 金鑰保存庫 連結秘密。

建立新的變數群組

  1. 選取 管線>>+ 變數群組

    醒目提示紅色方塊的 [新增變數群組] 按鈕螢幕快照。

  2. 輸入群組的名稱和描述。

  3. 選擇性:移動切換開關以將秘密從 Azure 金鑰保存庫連結為變數。 如需詳細資訊,請參閱使用 Azure 金鑰保存庫 秘密

  4. 輸入每個要包含在群組中的變數的名稱和值,然後為每個變數選擇 + 新增

  5. 若要保護您的變數,請選擇資料列結尾的 「鎖定」圖示。

  6. 當您完成新增變數時,請選取 [ 儲存]。

    儲存變數群組的螢幕快照。

變數群組遵循程式庫安全模型。

您可以建立變數群組,並將其連結至現有的 Azure 金鑰保存庫,讓您對應至儲存在密鑰保存庫中的秘密。 只有秘密名稱會對應至變數群組,而不是秘密值。 連結至變數群組的管線執行會從保管庫擷取最新的秘密值。 如需詳細資訊,請參閱將變數群組連結至 Azure 金鑰保存庫 中的秘密。

使用 Azure 金鑰保存庫任務

您可以使用 Azure Key Vault 任務來在您的管線中包含秘密。 此工作可讓管線連線到您的 Azure 金鑰保存庫,並擷取秘密做為管線變數。

  1. 在管線編輯器中,選取 [ 顯示小幫手 ] 以展開助理面板。

  2. 搜尋vault並選取 Azure 金鑰保存庫 作業

    新增 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 中的秘密變數輸出。

bash 變數輸出的螢幕快照。

深入瞭解如何在 腳本中設定和使用變數。