Lint 和驗證 Bicep 程式碼

已完成

現在您已了解管線階段的用途,讓我們考慮您可以新增至 Bicep 部署管線的第一組驗證步驟。 在本單元中,您將了解如何驗證 Bicep 範本。 您也會了解驗證階段通常會執行的兩個活動:lint 和預檢驗證。

什麼是有效的 Bicep 檔案?

有效的 Bicep 檔案是不包含任何語法錯誤的檔案。 此外,您規劃部署的 Azure 資源定義是有效的。 而且,在部署檔案中定義的資源時,資源會維持在 Azure 訂用帳戶中既有的配額和限制內。

有些檢查會單獨對 Bicep 檔案執行,例如語法錯誤的檢查、有效 Azure 資源定義的檢查,以及程式碼品質的檢查。 這些步驟都是所謂 Lint 分析程序的一部分。 若要檢查其他問題,您必須要求 Azure Resource Manager 服務驗證您的範本,並將您的 Azure 環境納入考量。

有效的 Bicep 範本具有更大的成功部署機會。 您不需要部署 Bicep 範本即可取得回饋。 驗證是一種良好的做法,因為如果您部署無效的 Bicep 檔案,Azure 可能只會部署或變更範本中所述的資源子集。 結果可能是您的環境狀態不一致,而可能不會以您預期的方式運作。

建置及使用 lint 找出 Bicep 程式碼中的錯誤

當您部署 Bicep 檔案,Bicep 工具會先執行一些基本的驗證步驟。 這些步驟與您使用 Visual Studio Code 修改檔案時所執行的步驟相同。 這些步驟會檢查您是否已正確使用 Bicep 的語言關鍵字,且已根據每個資源類型的需求定義 Azure 資源。

此外,Bicep 會對您的檔案執行 Linter。 Lint 分析是根據一組建議檢查程式碼的程序。 Bicep Linter 會檢查您的檔案,確認您遵循可維護性、正確性、彈性和擴充性的最佳做法。

Linter 針對這些類別中的每一項都包含有預先定義的規則集。 Linter 規則的範例包括:

  • 未使用的參數:Linter 會掃描 Bicep 檔案中任何位置皆未使用的任何參數。 透過排除未使用的參數,協助您更輕鬆地部署範本,因為您無須提供非必要的值。 當其他人嘗試使用您的 Bicep 檔案時,您也可以減少發生混淆的情形。
  • 字串插補:Linter 會檢查您的檔案是否使用 concat() 函式取代 Bicep 字串插補。 字串插補可讓 Bicep 檔案更容易閱讀。
  • 安全參數的預設值:如果您為標示了 @secure() 裝飾項目的參數設定預設值,Linter 會警告您。 安全參數的預設值是一個不正確的做法,因為它會提供安全參數一個可人工判讀的值,而在部署之前,可能不會有人去變更該值。

當您使用 Bicep 工具時,Bicep Linter 會自動執行。 每當您建立 Bicep 檔案,Linter 會根據其最佳做法檢查檔案。 當您將 Bicep 檔案部署到 Azure 時,會自動進行 Linting (程式碼檢查)。

但在管線中,您通常會想要先執行驗證和 lint 步驟,再部署檔案。 您可以透過 Bicep CLI 手動建立 Bicep 檔案,告知 Bicep 驗證您的檔案:

az bicep build --file main.bicep
bicep build main.bicep

注意

當您執行 build 命令時,Bicep 也會將您的 Bicep 程式碼轉譯為 JSON ARM 範本。 您通常不會需要所輸出的檔案,因此您可以忽略此檔案。

由於您希望 Linter 在每次有任何人簽入程式碼至您的存放庫時都會檢查您的 Bicep 範本,因此您可以將 lint 階段和作業新增至您的管線:

此圖表顯示具有 Lint 階段的管線,其中包含對檔案執行 Linter 的單一作業。

您可以在管線 YAML 檔案中表達此新增項目,如下所示:

stages:

- stage: Lint
  jobs: 
  - job: Lint
    steps:
      - script: |
          az bicep build --file deploy/main.bicep

Linter 的警告和錯誤

根據預設,linter 會在發現 Bicep 檔案違反規則時發出警告。 Bicep linter 發出的警告不會被視為錯誤,因此不會停止管線執行或停止後續的階段執行。

您可以設定 Bicep 將 linter 規則違規視為錯誤而不是警告,變更此行為。 您可以將 bicepconfig.json 檔案新增至包含 Bicep 檔案的資料夾來完成此設定。 您可以決定應該將哪些 Linter 問題視為錯誤,以及哪些問題應維持為警告。 您稍後將在本課程模組中了解如何更新 Linter 程式碼檢查規則。

提示

bicepconfig.json 檔案也控制 Visual Studio Code 在編輯器中顯示錯誤和警告的方式。 在 Bicep 範本中,設定錯誤的組件底下會顯示紅色和黃色波浪線。 當您撰寫 Bicep 程式碼時,這些指標可讓您更快速的回應以進一步降低錯誤的機會。

重新設定 linter 以發出錯誤之後,每當 linter 偵測到問題,管線就會停止執行,不執行後續的作業或階段。 這個設定有助於確保不會部署有問題的 Bicep 程式碼。

預檢驗證

您也應該檢查 Bicep 範本是否可能成功部署至您的 Azure 環境。 這個檢查稱為預檢驗證,而其所執行的其他檢查需要 Azure 提供資訊。 這類檢查包括:

  • 您為 Bicep 資源指定的名稱是否有效?
  • 您為 Bicep 資源指定的名稱是否已在使用中?
  • 您要部署資源的區域是否有效?

預檢驗證需要與 Azure 通訊,但實際上不會部署任何資源。

此圖表顯示具有 Lint 分析和驗證階段的管線,每個作業都包含單一作業。驗證階段會與 Azure 通訊。

您可以使用 AzureResourceManagerTemplateDeployment 工作來提交 Bicep 檔案以進行預檢驗證,並將 deploymentMode 設定為 Validation

- stage: Validate
  jobs:
  - job: Validate
    steps:
      - task: AzureResourceManagerTemplateDeployment@3
        inputs:
          connectedServiceName: 'MyServiceConnection'
          location: $(deploymentDefaultLocation)
          deploymentMode: Validation
          resourceGroupName: $(ResourceGroupName)
          csmFile: deploy/main.bicep

此命令類似於您已經使用過的部署工作,但實際上並不會部署任何資源。 此命令會針對範本中已使用的資源執行額外的檢查。

例如,假設您的 Bicep 檔案包含儲存體帳戶。 預檢驗證會檢查是否有另一個儲存體帳戶已使用您選擇的名稱。 預檢驗證也會檢查您為儲存體帳戶選擇的名稱是否符合命名慣例。

預檢驗證命令也會執行 Bicep Linter。 不過,最好還是分開執行 Linter。 如此一來,如果出現任何 Linter 錯誤,您就能快速偵測到,而不需等待驗證程序完成。 驗證需要較長的時間。

重要

當您執行預檢驗證時,每個 Azure 資源提供者都會執行自己的檢查。 有些資源提供者不會執行許多檢查,有些則會執行,因此您無法依賴預檢驗證來確定您的檔案有效。 不過,這是一項實用的工具,值得包含在您的管線中。

將驗證階段新增至管線以執行 linter 和執行預檢驗證,讓您更有信心部署 Bicep 檔案。