Анализ и проверка кода Bicep

Завершено

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

Что такое допустимый Bicep-файл?

Допустимый файл Bicep не содержит синтаксических ошибок. Кроме того, определения ресурсов Azure, которые планируется развернуть, должны быть допустимыми. И когда ресурсы, определенные в файле, развертываются, они должны оставаться в пределах квот и ограничений, существующих в вашей подписке Azure.

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

Допустимый шаблон Bicep имеет более высокую вероятность успешного развертывания. Вы получите отзыв без развертывания шаблона Bicep. Проверка рекомендуется, так как при развертывании файла Bicep, который недопустим, Azure может развернуть или изменить только подмножество ресурсов, описанных в шаблоне. Результатом может быть то, что состояние среды является несогласованным и может не вести себя так, как вы ожидаете.

Сборка и код Bicep

При развертывании файла Bicep средство Bicep сначала выполняет основные шаги проверки. Это те же действия, которые выполняются при изменении файла с помощью Visual Studio Code. Они проверяют правильность использования ключевых слов языка Bicep и определяют ресурсы Azure в соответствии с требованиями для каждого типа ресурса.

Кроме того, Bicep запускает линтер для ваших файлов. Анализ кода — это процесс проверки кода по набору рекомендаций. Средство проверки Bicep анализирует ваш файл и удостоверяется, что вы следуете лучшим практикам в отношении поддерживаемости, правильности, гибкости и расширяемости.

Анализатор кода содержит предопределенный набор правил для каждой из этих категорий. Ниже приведены примеры правил анализатора кода:

  • Неиспользуемые параметры. Анализатор кода сканирует все параметры, которые не используются в файле Bicep. Исключив неиспользуемые параметры, вы упростите развертывание шаблона, так как вам не нужно будет указывать лишние значения. Вы также упростите другим пользователям работу с вашим файлом Bicep.
  • Интерполяция строк. Анализатор кода проверяет, использует ли файл функцию concat() вместо интерполяции строк Bicep. Интерполяция строк повышает читаемость файлов Bicep.
  • Значения по умолчанию для параметров безопасности. Если вы задаёте значения по умолчанию для параметров, помеченных декоратором @secure(), linter предупреждает вас. Значение по умолчанию для безопасного параметра является плохой практикой, так как он дает безопасный параметр удобочитаемому значению, и люди могут не изменять его перед развертыванием.

Анализатор кода Bicep запускается автоматически при использовании инструментария Bicep. Каждый раз при создании файла Bicep анализатор кода проверяет его на соответствие рекомендациям. При развертывании Bicep-файла в Azure происходит автоматически. Но в конвейере, как правило, требуется выполнить шаги проверки и анализа перед развертыванием файла. Вы можете настроить Bicep для проверки файла, создав файл Bicep вручную с помощью интерфейса командной строки Bicep:

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

Примечание.

При выполнении команды build код Bicep преобразуется в шаблон ARM JSON. Обычно результирующий файл не нужен, поэтому его можно игнорировать.

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

Схема, на которой показан конвейер с этапом линтинга, содержащим одно задание, которое запускает линтер на файле.

Это дополнение можно выразить в файле YAML конвейера следующим образом:

stages:

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

Ошибки и предупреждения анализатора кода

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

Это поведение можно изменить, настроив Bicep так, чтобы обнаруженные анализатором кода нарушения правил обрабатывались как ошибки, а не предупреждения. Для этого добавьте файлbicepconfig.json в папку, содержащую файл Bicep. Вы можете решить, какие проблемы анализатор кода должен рассматривать как ошибки, а какие могут остаться предупреждениями. Далее в этом модуле вы узнаете, как обновить правила linter.

Совет

Файл bicepconfig.json также управляет отображением ошибок и предупреждений в редакторе Visual Studio Code. Он отображает красные и желтые волнистые линии в неправильно настроенных частях в шаблоне Bicep. Эти индикаторы позволяют быстрее замечать ошибки при написании кода Bicep и снижают риск ошибок.

После перенастройки анализатора кода таким образом, чтобы он выдавал ошибки каждый раз, когда обнаруживает проблему, конвейер прекращает выполнение, и последующие задания и этапы не выполняются. Эта настройка помогает гарантировать, что проблемный код на Bicep не будет развернут.

Предварительная проверка

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

  • Допустимы ли имена для ресурсов Bicep?
  • Вы уже указали имена для ваших ресурсов Bicep?
  • Вы развертываете ресурсы в допустимые регионы?

Для предварительной проверки требуется связь с Azure, но никакие ресурсы не развертываются.

Схема, показывющая конвейер с этапами lint и validate, каждая из которых содержит одно задание. Этап проверки взаимодействует с 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, их можно быстро обнаружить, а не ожидать завершения процесса проверки. Проверка занимает больше времени.

Внимание

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

Добавив в конвейер этапы проверки для запуска анализатора кода и выполнения предварительной проверки, вы упрочите свою уверенность перед развертыванием файла Bicep.