Развертывание приложения Teams Toolkit через CI/CD завершается с ошибкой «Эта команда работает только для проекта, созданного с помощью Teams Toolkit»

Мое приложение MS Teams (чат-бот) подготавливается, развертывается и отлично работает локально, в testtool и в Azure.

Поэтому я решил, наконец, сделать еще один шаг вперед и настроить CI/CD, поскольку он настроен для всех моих других проектов. Однако я впервые настраиваю CI/CD для проекта Node.js.

Я следую этим инструкциям о том, как настроить конвейер с помощью Azure DevOps, но этап развертывания завершается сбоем при выполнении команды npx teamsapp deploy со следующей командой:

Starting: Deploy to Azure
==============================================================================
Task         : Command line
Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows
Version      : 2.237.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line
==============================================================================
Generating script.
========================== Starting Command Output ===========================
/usr/bin/bash --noprofile --norc /home/vsts/work/_temp/45easss6-ddd-4c39-9b3c-xxx.sh
(✖) Error: coordinator.InvalidProjectError: This command only works for project created by Teams Toolkit.

##[error]Bash exited with code '1'.
Finishing: Deploy to Azure

Мой файл Teamsapp.yml довольно стандартен для приложения Teams Toolkit, поэтому я не уверен, почему сценарий развертывания считает, что проект не создается с помощью Teams Toolkit?

Используемый код конвейера YAML:

trigger:
  - dev

pool:
  vmImage: ubuntu-latest

variables:
  TEAMSAPP_CLI_VERSION: 3.0.0

steps:
  - task: NodeTool@0
    inputs:
      versionSpec: "20"
      checkLatest: true

  - script: |
      npm install @microsoft/teamsapp-cli@$(TEAMSAPP_CLI_VERSION)
    displayName: "Install CLI"

  - script: |
      npx teamsapp auth login azure --username $(AZURE_SERVICE_PRINCIPAL_CLIENT_ID) \
      --service-principal true \
      --tenant $(AZURE_TENANT_ID) \
      --password $(AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET) \
      --interactive false
    displayName: "Login to Azure by service principal"

  - script: |
      npx teamsapp deploy \
      --ignore-env-file true \
      --interactive false
    displayName: "Deploy to Azure"
    workingDirectory: $(System.DefaultWorkingDirectory)

  - script: |
      npx teamsapp package
    displayName: "Package app"
    workingDirectory: $(System.DefaultWorkingDirectory)

  - publish: $(System.DefaultWorkingDirectory)/appPackage/build/appPackage.zip
    artifact: artifact

Мои командыapp.yml:

# Triggered when 'teamsfx deploy' is executed
deploy:
  # Run npm command
  - uses: cli/runNpmCommand
    name: install dependencies
    with:
      args: install
  - uses: cli/runNpmCommand
    name: build app
    with:
      args: run build --if-present
  # Deploy your application to Azure App Service using the zip deploy feature.
  # For additional details, refer to https://aka.ms/zip-deploy-to-app-services.
  - uses: azureAppService/zipDeploy
    with:
      # Deploy base folder
      artifactFolder: .
      # Ignore file location, leave blank will ignore nothing
      ignoreFile: .webappignore
      # The resource id of the cloud resource to be deployed to.
      # This key will be generated by arm/deploy action automatically.
      # You can replace it with your existing Azure Resource id
      # or add it to your environment variable file.
      resourceId: ${{BOT_AZURE_APP_SERVICE_RESOURCE_ID}}

Пожалуйста, отредактируйте свое сообщение и вставьте сюда код yaml вместо ссылки на Github.

Rui Jarimba 02.07.2024 16:11

Если вы запустите npx teamsapp deploy в каталоге вашего локального репозитория, проблема будет воспроизведена?

Alvin Zhao - MSFT 03.07.2024 04:00

@AlvinZhao-MSFT Я попробовал запустить npx teamsapp deploy в каталоге моего проекта (там же, откуда я запускаю все связанные с проектом команды npm), и вот что я получаю: npm error code E404 npm error 404 Not Found - GET https://registry.npmjs.org/teamsapp - Not found npm error 404 npm error 404 'teamsapp@*' is not in this registry. npm error 404 npm error 404 Note that you can also install from a npm error 404 tarball, folder, http url, or git url.

Donatas 03.07.2024 10:01

Я создал простой проект приложения Teams и предоставил ресурсы Azure для развертывания через конвейер. Сравните структуру файла в моем примере ниже и соответствующим образом измените свойство workingDirectory для вашего сценария npx teamsapp deploy.

Alvin Zhao - MSFT 03.07.2024 10:40
Настройка шаблона Metronic с помощью Webpack и Gulp
Настройка шаблона Metronic с помощью Webpack и Gulp
Я пишу эту статью, чтобы поделиться тем, как настроить макет Metronic с помощью Sass, поскольку Metronic предоставляет так много документации, и они...
0
4
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ошибка означает, что файл «teamsapp.yml» не найден в текущем каталоге, где выполняется команда. Можете ли вы убедиться, что путь ./teamsapp.yml доступен относительно каталога выполнения команды npx?

Спасибо. Я проверил содержимое $(System.DefaultWorkingDirectory) с помощью tree $(System.DefaultWorkingDirectory) /f, и файл .yml можно найти там, где, по моему мнению, он должен быть: /home/vsts/work/1/s/ChatBot/teamsapp.yml? Я ожидаю, что эта команда легко найдет его, поскольку это стандартная конфигурация?

Donatas 03.07.2024 10:38
Ответ принят как подходящий

Вообще говоря, рабочий процесс CI/CD через конвейеры Azure, представленный в этом документе , запускает CLI Teams Toolkit в script задачах для аутентификации доступа к Azure и развертывания проекта приложения Teams в веб-приложении Azure.

Обратите внимание, что корневой каталог вашего репозитория будет извлечен в $(System.DefaultWorkingDirectory) на машине агента конвейера; расширен как /home/vsts/work/1/s/ на машине ubuntu-latest с агентом, размещенной в Microsoft.

Вы не поделились файловой структурой своего репозитория. Вот мой пример репозитория и конвейер YAML для развертывания моего приложения ChatBot Teams.

pool:
  vmImage: ubuntu-latest

variables:
  TEAMSAPP_CLI_VERSION: 3.0.0
  TEAMSFX_ENV: $(Build.SourceBranchName)
  BOT_AZURE_APP_SERVICE_RESOURCE_ID: /subscriptions/$(AZURE_SUBSCRIPTION_ID)/resourcegroups/$(AZURE_RESOURCE_GROUP_NAME)/providers/Microsoft.Web/sites/$(AZURE_WEB_APP_NAME)

steps:
  - task: NodeTool@0
    inputs:
      versionSpec: "20"
      checkLatest: true

  - script: |
      npm install @microsoft/teamsapp-cli@$(TEAMSAPP_CLI_VERSION)
    displayName: "Install CLI"

  - script: |
      npx teamsapp auth login azure \
        --username $(AZURE_SERVICE_PRINCIPAL_CLIENT_ID) \
        --service-principal true --tenant $(AZURE_TENANT_ID) \
        --password $(AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET) \
        --interactive false
    displayName: "Login Azure by service principal"

  - script: |
      npx teamsapp deploy --ignore-env-file true --interactive false
    displayName: "Deploy to Azure"
    workingDirectory: $(System.DefaultWorkingDirectory)

  - script: |
      npx teamsapp package --env $(TEAMSFX_ENV)
    displayName: "Package app"
    workingDirectory: $(System.DefaultWorkingDirectory)

  - publish: $(System.DefaultWorkingDirectory)/appPackage/build/appPackage.$(TEAMSFX_ENV).zip
    artifact: artifact

Поскольку конвейеры Azure — это всего лишь инструмент автоматизации, убедитесь, что ваш CLI Teams Toolkit работает, прежде чем интегрировать эти команды в конвейер.

Спасибо, Элвин. Как и в ответ на другой комментарий, я проверил содержимое $(System.DefaultWorkingDirectory) с помощью tree $(System.DefaultWorkingDirectory) /f, и файл .yml можно найти там, где, по моему мнению, он должен быть: /home/vsts/work/1/s/ChatBot/teamsapp.yml? Спасибо!

Donatas 03.07.2024 10:44

Спасибо, Элвин. Я изменил строку workingDirectory: $(System.DefaultWorkingDirectory) на workingDirectory: $(System.DefaultWorkingDirectory)/ChatBot и это решило проблему.

Donatas 03.07.2024 10:52

Другие вопросы по теме