Упражнение. Добавление этапов анализа кода и проверки в конвейер
Вы поговорили с командой и решили выполнить дальнейшую автоматизацию развертываний с помощью конвейера. Вы хотите повысить степень надежности при развертывании.
В этом упражнении вы добавите этапы проверки в конвейер. Затем вы будете запускать анализатор кода и предварительную проверку перед каждым развертыванием.
В процессе вы:
- Обновите существующий конвейер, чтобы добавить два новых этапа для анализа и проверки кода Bicep.
- Запустите свой конвейер.
- Устраните все проблемы, обнаруженные конвейером.
Обновление конвейера для подготовки к этапам
Сначала необходимо обновить файл конвейера, чтобы определить этап. Azure Pipelines автоматически создает один этап, но, поскольку скоро вы добавите дополнительные этапы, необходимо обновить конвейер, чтобы явно определить этапы.
В Visual Studio Code откройте файл azure-pipelines.yml в папке deploy.
Удалите все со строки 14 до конца файла. Не забудьте также удалить строку
jobs:
.В нижней части файла добавьте следующий код:
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, чтобы можно было проверить соответствие файлов.
Добавление этапов анализа и проверки в конвейер
Под строкой
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.Под только что добавленными строками добавьте этап проверки:
- 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.
Сохраните файл.
Настройка анализатора кода
По умолчанию анализатор кода Bicep выдает предупреждение при обнаружении проблемы с файлом. Azure Pipelines не обрабатывает предупреждения анализатора кода как проблемы, которые должны прерывать конвейер. Чтобы настроить это поведение, создайте файл bicepconfig.json, который изменит конфигурацию анализатора кода.
Добавьте новый файл в папку deploy и присвойте ему имя 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" } } } } }
Сохраните файл.
Проверка и фиксация определения конвейера
Убедитесь, что файл 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)
Если нет, обновите его в соответствии с этим примером, а затем сохраните.
Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:
git add . git commit -m "Add lint and validation stages" git push
Сразу после отправки Azure Pipelines запускает новое выполнение конвейера.
Просмотр выполнения конвейера
В браузере перейдите на страницу Pipelines.
Выберите последнее выполнение конвейера.
Если конвейер все еще выполняется, дождитесь его завершения. Хотя Azure Pipelines автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.
Обратите внимание, что в конвейере теперь отображаются три этапа, определенные в файле YAML. Также обратите внимание на то, что не удалось выполнить этап анализа кода.
Выберите этап анализа кода, чтобы просмотреть сведения о нем.
Чтобы просмотреть журнал конвейера, выберите шаг Запустить анализатор кода Bicep.
Обратите внимание, что отображаемая ошибка похожа на следующую:
Ошибка неиспользуемых параметров: параметр "storageAccountNameParam" объявлен, но не используется.
Это означает, что анализатор кода обнаружил нарушение правил в файле Bicep.
Исправление ошибки анализатора кода
Определив проблему, вы можете исправить ее в файле Bicep.
В Visual Studio Code откройте файл main.bicep в папке deploy.
Обратите внимание, что анализатор кода Bicep также обнаружил, что параметр
storageAccountNameParam
не используется. Visual Studio Code указывает неиспользуемый параметр с волнистой линией. Как правило, линия будет желтой, чтобы показать предупреждение. Но поскольку вы внесли изменения в файл bicepconfig.json, анализатор кода будет обрабатывать код как ошибку и линия будет красной.param storageAccountNameParam string = uniqueString(resourceGroup().id)
Удалите параметр
storageAccountNameParam
.Сохраните файл.
Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:
git add . git commit -m "Remove unused parameter" git push
И снова Azure Pipelines автоматически активирует новое выполнение конвейера.
Просмотр выполнения конвейера
В браузере перейдите к конвейеру.
Выберите последний запуск.
Дождитесь завершения выполнения конвейера. Хотя Azure Pipelines автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.
Обратите внимание, что этап анализа кода успешно завершен, но теперь не пройден этап проверки:
Выберите этап проверки, чтобы просмотреть сведения о нем.
Выберите шаг Выполнить предварительную проверку, чтобы просмотреть журнал конвейера.
Обратите внимание, что ошибка, отображаемая в журнале, содержит следующее сообщение:
mystorageresourceNameSuffix не является допустимым именем учетной записи хранения. Имя учетной записи хранения должно включать только цифры и буквы в нижнем регистре и быть длиной от 3 до 24 символов.
Это означает, что имя учетной записи хранения недопустимо.
Исправление ошибки проверки
В файле Bicep обнаружена другая проблема. Здесь вы исправите проблему.
В Visual Studio Code откройте файл main.bicep в папке deploy.
Взгляните на определение переменной
storageAccountName
:var appServiceAppName = 'toy-website-${resourceNameSuffix}' var appServicePlanName = 'toy-website' var applicationInsightsName = 'toywebsite' var logAnalyticsWorkspaceName = 'workspace-${resourceNameSuffix}' var storageAccountName = 'mystorageresourceNameSuffix'
Похоже, в нем есть опечатка, и интерполяция строк настроена неправильно.
Обновите переменную
storageAccountName
, чтобы правильно использовать интерполяцию строк:var storageAccountName = 'mystorage${resourceNameSuffix}'
Сохраните файл.
Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:
git add . git commit -m "Fix string interpolation" git push
Просмотр успешного выполнения конвейера
В браузере перейдите к конвейеру.
Выберите последний запуск.
Дождитесь завершения выполнения конвейера. Хотя Azure Pipelines автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.
Обратите внимание, что все три этапа конвейера успешно завершены.
Теперь у вас есть конвейер, который успешно обнаруживает ошибки в коде Bicep на ранних этапах процесса развертывания, а затем выполняет развертывание в Azure, если ошибок нет.