Упражнение. Добавление заданий анализа и проверки кода в рабочий процесс
Вы выступили с командой и решили автоматизировать развертывания с помощью рабочего процесса. Вы хотите повысить степень надежности при развертывании.
В этом упражнении вы добавите задания проверки в рабочий процесс. Затем вы будете запускать анализатор кода и предварительную проверку перед каждым развертыванием.
Во время процесса выполняются следующие задачи:
- Обновите существующий рабочий процесс, чтобы добавить два новых задания для анализа и проверки кода Bicep.
- Запустите рабочий процесс.
- Исправьте все проблемы, обнаруженные рабочим процессом.
Добавление заданий анализа и проверки кода в рабочий процесс
В Visual Studio Code откройте файл workflow.yml в папке .github/workflows.
В разделе
env:
измените значение переменнойAZURE_RESOURCEGROUP_NAME
наToyWebsiteTest
:env: AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest ENVIRONMENT_TYPE: Test
Под строкой
jobs:
над заданиемdeploy
добавьте новое задание анализа кода: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.Совет
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 и использования действия
azure/arm-deploy
в режиме развертыванияValidate
.Определение рабочего процесса теперь содержит три задания. Первое анализирует файл Bicep, второе выполняет предварительную проверку, а третье — развертывание в Azure.
Под строкой
runs-on
в заданииdeploy
добавьте операторneeds
:deploy: runs-on: ubuntu-latest needs: [lint, validate] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure
Оператор
needs
указывает, что задание развертывания зависит от успешного завершения заданий анализа и проверки.Также обратите внимание, что задания проверки и развертывания выполняют вход в Azure, и все задания извлекают код из репозитория. Эти действия необходимы, так как каждое задание использует новый модуль выполнения GitHub.
Сохраните файл.
Настройка анализатора кода
По умолчанию анализатор кода Bicep выдает предупреждение при обнаружении проблемы с файлом. GitHub Actions не обрабатывает предупреждения анализатора кода как проблемы, которые должны прерывать рабочий процесс. Чтобы настроить это поведение, создайте файл 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" } } } } }
Сохраните файл.
Настройка взаимодействия задания развертывания с анализатором кода
При использовании пользовательской конфигурации linterp 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 }}
Если файл выглядит иначе, обновите его в соответствии с этим примером, а затем сохраните его.
Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:
git add . git commit -m "Add lint and validation jobs" git push
Эта фиксация впервые была отправлена в этот репозиторий, поэтому вам может потребоваться войти в систему.
В Windows введите 1 для проверки подлинности с помощью веб-браузера и нажмите клавишу ВВОД.
В macOS нажмите Авторизовать.
Откроется окно браузера. Возможно, потребуется еще раз выполнить вход в GitHub. Выберите Разрешить.
Сразу после отправки GitHub Actions запускает новый рабочий процесс.
Просмотр запуска рабочего процесса
В браузере перейдите к Actions.
При первом запуске рабочего процесса с меткой Начальная фиксация отображается ошибка. GitHub автоматически запустил рабочий процесс при создании репозитория. Произошел сбой, так как секреты пока не были готовы. Этот сбой можно проигнорировать.
Выберите последнее выполнение рабочего процесса.
Обратите внимание, что в рабочем процессе теперь отображаются три задания, определенные в файле YAML. Задания анализа кода и проверки выполняются параллельно перед запуском задания развертывания.
Если рабочий процесс по-прежнему запущен, дождитесь завершения. Хотя рабочие процессы автоматически обновляют страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.
Обратите внимание, что сбой заданий при lint и проверке .
Выберите задание анализа кода, чтобы просмотреть сведения о нем.
Чтобы просмотреть журнал рабочего процесса, выберите шаг Запустить анализатор кода Bicep.
Ошибка в журнале рабочего процесса содержит сообщение об ошибке linter:
Error no-unused-params: Parameter "storageAccountNameParam" is declared but never used.
Это сообщение об ошибке указывает, что linter обнаружил нарушение правила в файле Bicep.
Исправление ошибки анализатора кода
Теперь, когда вы определили проблему, ее можно исправить в файле Bicep.
В Visual Studio Code откройте файл main.bicep в папке deploy.
Обратите внимание, что Bicep linter также обнаружил, что
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
И снова GitHub Actions автоматически активирует новый запуск рабочего процесса.
Повторный просмотр запуска рабочего процесса
В браузере перейдите к рабочему процессу.
Выберите последний запуск.
Дождитесь завершения выполнения рабочего процесса. Хотя GitHub Actions автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.
Обратите внимание, что задание анализа кода успешно завершено, но задание проверки все еще не выполняется.
Выберите задание проверки, чтобы просмотреть сведения о нем.
Выберите шаг Выполнить предварительную проверку, чтобы просмотреть журнал рабочего процесса.
Ошибка, отображаемая в журнале рабочего процесса, содержит следующее сообщение:
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 откройте файл main.bicep в папке deploy.
Взгляните на определение переменной
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}'
Сохраните файл.
Зафиксируйте и отправьте изменения в репозиторий Git, выполнив следующие команды в терминале Visual Studio Code:
git add . git commit -m "Fix string interpolation" git push
Просмотр успешного выполнения рабочего процесса
В браузере перейдите к рабочему процессу.
Выберите последний запуск.
Дождитесь завершения выполнения рабочего процесса. Хотя GitHub Actions автоматически обновляет страницу с учетом последнего состояния, рекомендуется периодически обновлять страницу.
Обратите внимание, что все три задания в рабочем процессе успешно завершены:
Некоторые предупреждения перечислены на панели Примечания. Эти предупреждения отображаются из-за того, как Bicep записывает информационные сообщения в журнал рабочего процесса. Вы можете игнорировать эти предупреждения.
Теперь у вас есть рабочий процесс, который успешно обнаруживает ошибки в коде Bicep на ранних этапах процесса развертывания, а затем выполняет развертывание в Azure, если ошибок нет.