練習 - 在工作流程中新增 Lint 分析及驗證作業
您已與團隊交談,並決定使用工作流程進一步自動化部署。 您想要對部署的內容建立更多信賴度。
在本練習中,您將新增驗證作業至工作流程。 接著,您會在每次部署之前執行 Linter 和預撿驗證。
在此程序期間,您將執行下列工作:
- 更新您現有的工作流程,新增兩個作業以進行 Lint 分析,並驗證您的 Bicep 程式碼。
- 執行您的工作流程。
- 修正工作流程偵測到的任何問題。
將 Lint 分析和驗證作業新增至工作流程
在 Visual Studio Code 中,開啟 [.github/workflows] 資料夾中的 workflow.yml 檔案。
在
env:
區段中,將AZURE_RESOURCEGROUP_NAME
變數的值變更為ToyWebsiteTest
:env: AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest ENVIRONMENT_TYPE: Test
在
jobs:
行下的deploy
作業上,新增一個新的 Lint 分析作業:jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file deploy/main.bicep
這項作業定義簽出程式碼的步驟,以及執行
az bicep build
命令以對 Bicep 檔案進行 Lint 分析的步驟。提示
YAML 檔案會區分縮排。 無論您是輸入或貼上此程式碼,請確定您的縮排正確無誤。 在本練習的後續操作中,您將會看到完整的 YAML 工作流程定義,以便驗證您的檔案是否相符。
在您剛才新增的行下方,以及部署作業上方,新增驗證作業:
validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }} deploymentMode: Validate
這項作業定義了簽出程式碼、登入 Azure 環境,以及搭配
Validate
部署模式使用azure/arm-deploy
動作的步驟。您的工作流程定義現在有三個作業。 第一個 Lint 您的 Bicep 檔案,第二個執行預檢驗證,第三個執行部署到 Azure。
在
deploy
工作的runs-on
行下方新增needs
聲明:deploy: runs-on: ubuntu-latest needs: [lint, validate] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure
needs
陳述式指出,部署作業取決於 Lint 分析和驗證作業順利完成,才能執行。另請注意,驗證和部署工作都會登入 Azure,而所有工作都會從存放庫中簽出程式碼。 這些步驟是必要的,因為每個作業都會使用新的 GitHub 執行器。
儲存檔案。
設定 Linter
Bicep Linter 預設會在偵測到檔案問題時提出警告。 GitHub Actions 不會將 Linter 警告視為應該會停止工作流程的問題。 若要自訂此行為,請建立 bicepconfig.json 檔案,重新設定該 Linter。
在部署資料夾中新增檔案,並將其命名為 bicepconfig.json。
將下列程式碼複製並貼入 檔案中:
{ "analyzers": { "core": { "enabled": true, "verbose": true, "rules": { "adminusername-should-not-be-literal": { "level": "error" }, "max-outputs": { "level": "error" }, "max-params": { "level": "error" }, "max-resources": { "level": "error" }, "max-variables": { "level": "error" }, "no-hardcoded-env-urls": { "level": "error" }, "no-unnecessary-dependson": { "level": "error" }, "no-unused-params": { "level": "error" }, "no-unused-vars": { "level": "error" }, "outputs-should-not-contain-secrets": { "level": "error" }, "prefer-interpolation": { "level": "error" }, "secure-parameter-default": { "level": "error" }, "simplify-interpolation": { "level": "error" }, "protect-commandtoexecute-secrets": { "level": "error" }, "use-stable-vm-image": { "level": "error" } } } } }
儲存檔案。
設定部署作業以使用 Linter
當您使用自訂的 Linter 設定時,Bicep 會寫入 GitHub Actions 解讀為錯誤的記錄資料。 若要停用此行為,請將 arm-deploy
工作設定為忽略標準錯誤 (stderr) 記錄串流。
開啟 workflow.yml 檔案。
在
deploy
工作的部署網站測試步驟中,將failOnStdErr
屬性設為false
:deploy: runs-on: ubuntu-latest needs: [lint, validate] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 name: Deploy website with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
儲存檔案。
驗證並認可您的工作流程定義
驗證您的 workflow.yml 檔案是否如下列程式碼:
name: deploy-toy-website-test concurrency: toy-company on: push: branches: - main permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest ENVIRONMENT_TYPE: Test jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file deploy/main.bicep validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }} deploymentMode: Validate deploy: runs-on: ubuntu-latest needs: [lint, validate] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 name: Deploy website with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }} template: ./deploy/main.bicep parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
如果您的檔案看起來不同,請更新以符合此範例,然後將其儲存。
在 Visual Studio Code 終端機中執行下列命令,以認可所做的變更,並將其推送至您的 Git 存放庫:
git add . git commit -m "Add lint and validation jobs" git push
此認可是您第一次推送至此存放庫,因此系統可能會提示您登入。
在 Windows 上,輸入 1 以使用網頁瀏覽器進行驗證,然後選取 Enter。
在 macOS 上,選取 [授權]。
瀏覽器視窗隨即出現。 您可能需要重新登入 GitHub。 選取授權。
發送後,GitHub Actions 會立即開始新的工作流程執行。
檢視工作流程執行
在瀏覽器中,前往 [Actions] \(動作\)。
您工作流程的首次執行 (標示為 [Initial commit] \(初始認可\)) 會顯示為失敗。 在您建立存放庫時,GitHub 會自動執行工作流程。 因為當時沒有準備好祕密,因此其會失敗。 您可以忽略此失敗。
選取工作流程的最新執行。
請注意,現在的工作流程執行會顯示您在 YAML 檔案中定義的三個作業。 Lint 分析與驗證作業會在部署作業開始之前同時執行。
如果工作流程仍在執行中,請等到執行完成為止。 雖然工作流程會以最新狀態自動更新頁面,但建議您偶爾重新整理頁面。
請注意,Lint 和 驗證 作業都已失敗。
選取 [Lint] 以查看其詳細資料。
選取 [執行 Bicep Linter] 步驟以檢視工作流程記錄。
工作流程記錄檔中的錯誤包含 linter 錯誤訊息:
Error no-unused-params: Parameter "storageAccountNameParam" is declared but never used.
此錯誤訊息表示 Linter 在 Bicep 檔案中發現違反規則。
修正 Linter 錯誤
現在您已經找到問題,可以在 Bicep 檔案中修正問題。
在 Visual Studio Code 中,開啟 [deploy] 資料夾中的 main.bicep 檔案。
請注意,Bicep Linter 也偵測到並未使用
storageAccountNameParam
參數。 在 Visual Studio Code 中,曲線會顯示在參數底下。 一般情況下,黃色的線條表示警告。 由於您自訂 bicepconfig.json 檔案,因此該 Linter 會將程式碼視為錯誤,並以紅色顯示線條。param storageAccountNameParam string = uniqueString(resourceGroup().id)
刪除
storageAccountNameParam
參數。儲存檔案。
在 Visual Studio Code 終端機中執行下列命令,以認可所做的變更,並將其推送至您的 Git 存放庫:
git add . git commit -m "Remove unused parameter" git push
GitHub Actions 會再次自動觸發工作流程的新執行。
再次檢視工作流程執行
在瀏覽器中,前往您的工作流程。
選取最近的執行。
等候工作流程執行完成。 雖然 GitHub Actions 會以最新狀態自動更新頁面,但建議您偶爾重新整理頁面。
請注意,Lint 分析作業已成功完成,但驗證作業仍然失敗。
選取 [驗證] 工作以查看其詳細資料。
選取 [執行預檢驗證] 步驟以檢視工作流程記錄。
工作流程記錄中顯示的錯誤包括下列訊息:
mystorageresourceNameSuffix is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only.
此錯誤表示儲存體帳戶名稱無效。
修正驗證錯誤
您在 Bicep 檔案中發現另一個問題。 在這裡,您可以修正問題。
在 Visual Studio Code 中,開啟 [deploy] 資料夾中的 main.bicep 檔案。
查看
storageAccountName
變數的定義:var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website' var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}' var applicationInsightsName = 'toywebsite' var storageAccountName = 'mystorageresourceNameSuffix'
似乎有拼字錯誤,且字串內插補點未正確設定。
更新
storageAccountName
變數以正確使用字串插補:var storageAccountName = 'mystorage${resourceNameSuffix}'
儲存檔案。
在 Visual Studio Code 終端機中執行下列命令,以認可所做的變更,並將其推送至您的 Git 存放庫:
git add . git commit -m "Fix string interpolation" git push
檢視成功的工作流程執行
在瀏覽器中,前往您的工作流程。
選取最近的執行。
等候工作流程執行完成。 雖然 GitHub Actions 會以最新狀態自動更新頁面,但建議您偶爾重新整理頁面。
請注意,工作流程中的三個作業都已順利完成:
某些警告會列在 [Annotations] \(註釋\) 面板中。 之所以會出現這些警告,是因為 Bicep 將資訊訊息寫入工作流程記錄的方式所致。 您可以忽略這些警告。
您現在有一個工作流程,可在部署程式初期成功偵測 Bicep 程式碼中的錯誤,並且在沒有任何錯誤時部署到 Azure。