Упражнение. Добавление этапов анализа кода и проверки в конвейер

Завершено

Вы поговорили с командой и решили выполнить дальнейшую автоматизацию развертываний с помощью конвейера. Вы хотите повысить степень надежности при развертывании.

В этом упражнении вы добавите этапы проверки в конвейер. Затем вы будете запускать анализатор кода и предварительную проверку перед каждым развертыванием.

В процессе вы:

  • Обновите существующий конвейер, чтобы добавить два новых этапа для анализа и проверки кода Bicep.
  • Запустите свой конвейер.
  • Устраните все проблемы, обнаруженные конвейером.

Обновление конвейера для подготовки к этапам

Сначала необходимо обновить файл конвейера, чтобы определить этап. Azure Pipelines автоматически создает один этап, но, поскольку скоро вы добавите дополнительные этапы, необходимо обновить конвейер, чтобы явно определить этапы.

  1. В Visual Studio Code откройте файл azure-pipelines.yml в папке deploy.

  2. Удалите все со строки 14 до конца файла. Не забудьте также удалить строку jobs:.

  3. В нижней части файла добавьте следующий код:

    stages:
    
    - stage: Deploy
      jobs:
      - job: Deploy
        steps:
          - task: AzureResourceManagerTemplateDeployment@3
            name: Deploy
            displayName: Deploy to Azure
            inputs:
              connectedServiceName: $(ServiceConnectionName)
              deploymentName: $(Build.BuildNumber)
              location: $(DeploymentDefaultLocation)
              resourceGroupName: $(ResourceGroupName)
              csmFile: deploy/main.bicep
              overrideParameters: >
                -environmentType $(EnvironmentType)
    

    Совет

    YAML-файлы чувствительны к отступу. При вводе или вставке этого кода убедитесь, что выбран правильный отступ. В следующем разделе вы увидите определение полного конвейера YAML, чтобы можно было проверить соответствие файлов.

Добавление этапов анализа и проверки в конвейер

  1. Под строкой stages: добавьте этап анализа:

    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file deploy/main.bicep
            name: LintBicepCode
            displayName: Run Bicep linter
    

    На этом этапе определяется один шаг, который запускает команду az bicep build для анализа Bicep.

  2. Под только что добавленными строками добавьте этап проверки:

    - stage: Validate
      jobs:
      - job: ValidateBicepCode
        displayName: Validate Bicep code
        steps:
          - task: AzureResourceManagerTemplateDeployment@3
            name: RunPreflightValidation
            displayName: Run preflight validation
            inputs:
              connectedServiceName: $(ServiceConnectionName)
              location: $(deploymentDefaultLocation)
              deploymentMode: Validation
              resourceGroupName: $(ResourceGroupName)
              csmFile: deploy/main.bicep
              overrideParameters: >
                -environmentType $(EnvironmentType)
    

    На этом этапе определяется один шаг, который запускает предварительную проверку. Обратите внимание, что в этот этап входит ссылка на подключение к службе, так как процесс предварительной проверки требует взаимодействия с Azure.

    Определение конвейера теперь содержит три этапа. Первый запускает литер в файле Bicep, второй выполняет предварительную проверку, а третий выполняет развертывание в Azure.

  3. Сохраните файл.

Настройка анализатора кода

По умолчанию анализатор кода Bicep выдает предупреждение при обнаружении проблемы с файлом. Azure Pipelines не обрабатывает предупреждения анализатора кода как проблемы, которые должны прерывать конвейер. Чтобы настроить это поведение, создайте файл bicepconfig.json, который изменит конфигурацию анализатора кода.

  1. Добавьте новый файл в папку deploy и присвойте ему имя bicepconfig.json.

    Снимок экрана: Visual Studio Code Explorer с новым файлом, отображаемым в папке deploy.

  2. Скопируйте следующий код в файл:

    {
      "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"
            }
          }
        }
      }
    }
    
  3. Сохраните файл.

Проверка и фиксация определения конвейера

  1. Убедитесь, что файл azure-pipelines.yml выглядит следующим образом:

    trigger:
      batch: true
      branches:
        include:
        - main
    
    pool:
      vmImage: ubuntu-latest
    
    variables:
      - name: deploymentDefaultLocation
        value: westus3
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file deploy/main.bicep
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Validate
      jobs:
      - job: ValidateBicepCode
        displayName: Validate Bicep code
        steps:
          - task: AzureResourceManagerTemplateDeployment@3
            name: RunPreflightValidation
            displayName: Run preflight validation
            inputs:
              connectedServiceName: $(ServiceConnectionName)
              location: $(deploymentDefaultLocation)
              deploymentMode: Validation
              resourceGroupName: $(ResourceGroupName)
              csmFile: deploy/main.bicep
              overrideParameters: >
                -environmentType $(EnvironmentType)
    
    - stage: Deploy
      jobs:
      - job: Deploy
        steps:
          - task: AzureResourceManagerTemplateDeployment@3
            name: Deploy
            displayName: Deploy to Azure
            inputs:
              connectedServiceName: $(ServiceConnectionName)
              deploymentName: $(Build.BuildNumber)
              location: $(DeploymentDefaultLocation)
              resourceGroupName: $(ResourceGroupName)
              csmFile: deploy/main.bicep
              overrideParameters: >
                -environmentType $(EnvironmentType)
    

    Если нет, обновите его в соответствии с этим примером, а затем сохраните.

  2. Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:

    git add .
    git commit -m "Add lint and validation stages"
    git push
    

    Сразу после отправки Azure Pipelines запускает новое выполнение конвейера.

Просмотр выполнения конвейера

  1. В браузере перейдите на страницу Pipelines.

  2. Выберите последнее выполнение конвейера.

    Снимок экрана: интерфейс Azure DevOps с выделенной ссылкой на последнее выполнение конвейера.

    Если конвейер все еще выполняется, дождитесь его завершения. Хотя Azure Pipelines автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.

  3. Обратите внимание, что в конвейере теперь отображаются три этапа, определенные в файле YAML. Также обратите внимание на то, что не удалось выполнить этап анализа кода.

    Снимок экрана запуска конвейера в Azure DevOps с ошибкой этапа анализа.

  4. Выберите этап анализа кода, чтобы просмотреть сведения о нем.

    Снимок экрана запуска конвейера в Azure DevOps с выделенным именем этапа анализа.

  5. Чтобы просмотреть журнал конвейера, выберите шаг Запустить анализатор кода Bicep.

    Снимок экрана: журнал конвейера для задания анализа кода с выделенным этапом для запуска анализатора кода Bicep.

    Обратите внимание, что отображаемая ошибка похожа на следующую:

    Ошибка неиспользуемых параметров: параметр "storageAccountNameParam" объявлен, но не используется.

    Это означает, что анализатор кода обнаружил нарушение правил в файле Bicep.

Исправление ошибки анализатора кода

Определив проблему, вы можете исправить ее в файле Bicep.

  1. В Visual Studio Code откройте файл main.bicep в папке deploy.

  2. Обратите внимание, что анализатор кода Bicep также обнаружил, что параметр storageAccountNameParam не используется. Visual Studio Code указывает неиспользуемый параметр с волнистой линией. Как правило, линия будет желтой, чтобы показать предупреждение. Но поскольку вы внесли изменения в файл bicepconfig.json, анализатор кода будет обрабатывать код как ошибку и линия будет красной.

    param storageAccountNameParam string = uniqueString(resourceGroup().id)
    
  3. Удалите параметр storageAccountNameParam.

  4. Сохраните файл.

  5. Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:

    git add .
    git commit -m "Remove unused parameter"
    git push
    

    И снова Azure Pipelines автоматически активирует новое выполнение конвейера.

Просмотр выполнения конвейера

  1. В браузере перейдите к конвейеру.

  2. Выберите последний запуск.

    Дождитесь завершения выполнения конвейера. Хотя Azure Pipelines автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.

  3. Обратите внимание, что этап анализа кода успешно завершен, но теперь не пройден этап проверки:

    Снимок экрана: выполнение конвейера, успешное завершение этапа анализа кода и сбой этапа проверки.

  4. Выберите этап проверки, чтобы просмотреть сведения о нем.

  5. Выберите шаг Выполнить предварительную проверку, чтобы просмотреть журнал конвейера.

    Снимок экрана: журнал конвейера для задания проверки с выделенным этапом для выполнения предварительной проверки.

    Обратите внимание, что ошибка, отображаемая в журнале, содержит следующее сообщение:

    mystorageresourceNameSuffix не является допустимым именем учетной записи хранения. Имя учетной записи хранения должно включать только цифры и буквы в нижнем регистре и быть длиной от 3 до 24 символов.

    Это означает, что имя учетной записи хранения недопустимо.

Исправление ошибки проверки

В файле Bicep обнаружена другая проблема. Здесь вы исправите проблему.

  1. В Visual Studio Code откройте файл main.bicep в папке deploy.

  2. Взгляните на определение переменной storageAccountName:

    var appServiceAppName = 'toy-website-${resourceNameSuffix}'
    var appServicePlanName = 'toy-website'
    var applicationInsightsName = 'toywebsite'
    var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}'
    var storageAccountName = 'mystorageresourceNameSuffix'
    

    Похоже, в нем есть опечатка, и интерполяция строк настроена неправильно.

  3. Обновите переменную storageAccountName, чтобы правильно использовать интерполяцию строк:

    var storageAccountName = 'mystorage${resourceNameSuffix}'
    
  4. Сохраните файл.

  5. Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:

    git add .
    git commit -m "Fix string interpolation"
    git push
    

Просмотр успешного выполнения конвейера

  1. В браузере перейдите к конвейеру.

  2. Выберите последний запуск.

    Дождитесь завершения выполнения конвейера. Хотя Azure Pipelines автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.

  3. Обратите внимание, что все три этапа конвейера успешно завершены.

    Снимок экрана: выполнение конвейера в Azure DevOps с успешным выполнением всех трех этапов.

Теперь у вас есть конвейер, который успешно обнаруживает ошибки в коде Bicep на ранних этапах процесса развертывания, а затем выполняет развертывание в Azure, если ошибок нет.