Поделиться через


Настройка конвейеров CI/CD

Вы можете настроить конвейер непрерывной интеграции и непрерывного развертывания (CI/CD) для приложений Microsoft Teams, созданных с помощью набора средств Teams. Конвейер CI/CD приложения Teams состоит из трех частей:

  1. Выполните построение проекта.

  2. Разверните проект в облачных ресурсах.

  3. Создание пакета приложения Teams.

Примечание.

Чтобы создать конвейер для приложения Teams, необходимо подготовить необходимые облачные ресурсы, такие как веб-приложение Azure, Функции Azure или Статическое веб-приложение Azure, и настроить параметры приложения.

Для сборки проекта необходимо скомпилировать исходный код и создать необходимые артефакты развертывания. Существует два метода развертывания артефактов:

Настройка конвейеров CI/CD с помощью интерфейса командной строки набора средств Teams

Примечание.

Используйте Teams Toolkit версии 5.6.0 или более поздней.

Для настройки конвейера CI/CD для приложения Teams можно использовать интерфейс командной строки (CLI) набора средств Teams .

Предварительные условия

Элемент Описание
Настройте необходимые ресурсы для приложения Teams, например идентификатор приложения Teams, идентификатор бота и т. д. • Вручную извлеките ресурсы из файла в manifest.json папке appPackage .
• Автоматическое создание для выполнения команды в наборе Provision средств Teams.
Настройка ресурсов Azure • Подготовьте ресурсы вручную, изучив файлы bicep в папке infra .
• Автоматическая подготовка ресурсов с помощью Provision команды в наборе средств Teams.
Убедитесь, что у вас есть субъект-служба и его политики доступа к ресурсам правильно настроены. Настройте субъект-службу следующим образом: Create субъекта-службы с помощью портала Entra.
Create субъект-службу с помощью Azure CLI.
• Интерфейс командной Teamsapp строки (CLI) поддерживает вход Azure с помощью секрета субъекта-службы. Create секрет и сохраните идентификатор клиента, секрет клиента и идентификатор клиента субъекта-службы.
Снимок экрана: секрет субъекта-службы.

После выполнения предварительных требований давайте настроим конвейер:

Настройка конвейера с помощью GitHub

Чтобы настроить конвейер с помощью GitHub, выполните следующие действия.

  1. Откройте Visual Studio Code.

  2. cd.yml Create файл в проекте в .github/workflows папку и добавьте в файл следующий код:

    on:
      push:
        branches:
          - main
    jobs:
      build:
        runs-on: ubuntu-latest
        env:
          TEAMSAPP_CLI_VERSION: "3.0.0"
          # Add extra environment variables here so that teamsapp cli can use them.
    
        steps:
          - name: "Checkout GitHub Action"
            uses: actions/checkout@v4
    
          - name: Setup Node 20.x
            uses: actions/setup-node@v1
            with:
              node-version: "20.x"
    
          - name: install cli
            run: |
              npm install @microsoft/teamsapp-cli@${{env.TEAMSAPP_CLI_VERSION}}
    
          - name: Login Azure by service principal
            run: |
              npx teamsapp auth login azure --username ${{vars.AZURE_SERVICE_PRINCIPAL_CLIENT_ID}}  \
              --service-principal true \
              --tenant ${{vars.AZURE_TENANT_ID}} \
              --password ${{secrets.AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET }} \
              --interactive false
    
          - name: Deploy to hosting environment
            run: |
              npx teamsapp deploy --ignore-env-file true \
              --interactive false
    
          - name: Package app
            run: |
              npx teamsapp package
    
          - name: upload appPackage
            uses: actions/upload-artifact@v4
            with:
              name: artifact
              path: appPackage/build/appPackage.zip
    

    Примечание.

    Конвейер по умолчанию активируется при возникновении событий отправки в main ветви. Вы можете изменить его в соответствии с конкретными требованиями.

  3. Перейдите на сайт GitHub.

  4. Обновите следующие переменные и секреты, созданные во время выполнения предварительных требований:

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID, AZURE_TENANT_ID и AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET

      Снимок экрана: параметры репозитория.

      Примечание.

      Переменная AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET должна быть задана как секрет. Используйте среду GitHub для использования различных наборов переменных.

    • Перейдите к файлу teamsapp.yml . deploy На этапе значения, заключенные в${{}}, являются обязательными ключами переменных. Если вы использовали provision команду из набора средств Teams, вы можете найти значения в файлах среды в папке .env .

      Задайте в BOT_AZURE_APP_SERVICE_RESOURCE_ID качестве переменной репозитория:

      Снимок экрана: идентификатор ресурса службы приложений Azure бота в teamsapp.yml файле.

    • Перейдите к файлу appPackage/manifest.json . Значения, заключенные в ${{}} , являются обязательными ключами переменных. Если вы использовали provision команду из набора средств Teams, вы можете найти значения в файлах среды в папке .env .

      Задайте в TEAMS_APP_ID качестве переменной репозитория:

      Снимок экрана: идентификатор приложения Teams в файле манифеста.

  5. На сайте GitHub перейдите в раздел Параметры репозитория и выберите Секреты и переменные>Действия.

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

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID
    • AZURE_TENANT_ID
    • AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET
    • BOT_AZURE_APP_SERVICE_RESOURCE_ID
    • TEAMS_APP_ID

    Добавьте переменные, определенные в репозитории, непосредственно в файл yml, за исключением следующих трех переменных:

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID

    • AZURE_TENANT_ID

    • AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET

      Снимок экрана: измененный yml конвейера.

  6. Запустите конвейер.

    Отправка кода в репозиторий для активации конвейера.

    Примечание.

    Вам не нужно фиксировать файлы env в папке env в репозитории. Переменные env, необходимые для выполнения конвейера CI/CD, уже заданы в переменных репозитория.

    После успешного выполнения конвейера в журнале отображается, что код развернут в Azure и appPackage создается в артефактах.

    Снимок экрана:

Настройка конвейера с помощью Azure DevOps

Чтобы настроить конвейер с помощью Azure DevOps, выполните следующие действия.

  1. Откройте Visual Studio Code.

  2. cd.yml Create файл в проекте и добавьте в файл следующий код:

    trigger:
      - main
    
    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 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
    

    Примечание.

    Конвейер по умолчанию активируется при возникновении событий отправки в main ветви. Вы можете изменить его в соответствии с конкретными требованиями.

  3. Отправьте код в репозиторий.

  4. Настройка конвейера Azure.

    После отправки кода в репозиторий перейдите в раздел Конвейеры и выберите Новый конвейер. Выберите репозиторий и существующий файл yml, чтобы настроить конвейер.

  5. Обновите следующие переменные и секреты, созданные во время выполнения предварительных требований:

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID, AZURE_TENANT_ID и AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET

    • Перейдите к файлу teamsapp.yml . deploy На этапе значения, заключенные в${{}}, являются обязательными ключами переменных. Если вы использовали provision команду из набора средств Teams, вы можете найти значения в файлах среды в папке .env .

      Задайте в BOT_AZURE_APP_SERVICE_RESOURCE_ID качестве переменной репозитория:

      Снимок экрана: идентификатор ресурса службы приложений Azure бота в teamsapp.yml файле.

    • Перейдите к файлу appPackage/manifest.json . Значения, заключенные в ${{}} , являются обязательными ключами переменных. Если вы использовали provision команду из набора средств Teams, вы можете найти значения в файлах среды в папке .env .

      Задайте в TEAMS_APP_ID качестве переменной репозитория:

      Снимок экрана: идентификатор приложения Teams в файле манифеста.

    В репозитории необходимо задать следующие переменные имени ключа:

    • AZURE_SERVICE_PRINCIPAL_CLIENT_ID
    • AZURE_TENANT_ID
    • AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET
    • BOT_AZURE_APP_SERVICE_RESOURCE_ID
    • TEAMS_APP_ID

    Чтобы задать переменные в конвейере, перейдите к конвейеру и выберите Изменить>переменные.

    Примечание.

    В целях безопасности установите флажок Сохранить это значение в секрете , если это необходимо.

    Снимок экрана: сохранение секрета этого значения на странице новой переменной.

  6. Запустите конвейер.

    Отправка кода в репозиторий для активации конвейера.

    Примечание.

    Нет необходимости фиксировать env-файлы в папке env/ в репозитории. Переменные env, необходимые для выполнения конвейера CI/CD, уже установлены в переменных конвейера.

    После успешного выполнения конвейера в журнале отображается, что код развернут в Azure и appPackage создается в артефактах.

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

Настройка конвейеров CI/CD с помощью собственного рабочего процесса

Если интерфейс командной строки приложений Teams не соответствует требованиям конвейера, вы можете разработать пользовательский процесс развертывания в соответствии с вашими потребностями. В этом разделе содержатся рекомендации по развертыванию в Azure с помощью пользовательских методов.

Примечание.

Если у вас уже есть полный конвейер CI/CD для развертывания в ресурсе Azure и приложению Teams необходимо считывать переменные среды во время выполнения, настройте эти переменные среды в параметрах ресурса Azure. Сведения о тестировании после развертывания см. в разделе Создание пакета приложения Teams.

Команда teamsapp deploy выполняет действия, определенные на deploy этапе teamsapp.yml файла. Этап deploy состоит из build действий и deploy . Чтобы создать пользовательский метод развертывания, перепишите эти действия в соответствии с конкретными требованиями и предпочтениями.

Например, базовый проект бота TypeScript имеет следующий этап развертывания:teamsapp.yml

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 this link.
  - 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}}

Эти действия выполняют следующие задачи:

  • Запустите npm install и npm build для сборки проекта.
  • Развертывание кода в службе приложений Azure.

Эти действия можно настроить в конвейере CI/CD. Ниже приведен пример использования действий GitHub:

# build
- name: Setup Node 20.x
  uses: actions/setup-node@v1
  with:
    node-version: '20.x'
- name: 'npm install, build'
  run: |
    npm install
    npm run build --if-present

- name: 'zip artifact for deployment'
  run: |
    zip -r deploy.zip . --include 'node_modules/*' 'lib/*' 'web.config'

# deploy
- name: 'Login via Azure CLI'
  uses: azure/login@v1
  with:
    client-id: ${{ vars.CLIENT_ID }}
    tenant-id: ${{ vars.TENANT_ID }}
    subscription-id: ${{ vars.SUBSCRIPTION_ID }}

- name: 'Run Azure webapp deploy action using azure RBAC'
  uses: azure/webapps-deploy@v2
  with:
    app-name: ${{ vars.AZURE_WEBAPP_NAME }}
    package: deploy.zip

Набор средств Teams поддерживает проекты приложений Teams, написанные на различных языках программирования и предназначенные для размещения в разных службах Azure. Ниже приведены действия по созданию и развертыванию. Используйте эти действия при настройке конвейеров развертывания CI/CD.

Сборка:

Язык GitHub Azure Pipeline
JS или TS actions/setup-node NodeTool@0
C# actions/setup-dotnet DotNetCoreCLI@2

Развертывание:

Ресурс GitHub Azure Pipeline
Служба приложений Azure azure/webapps-deploy AzureWebApp@1
Функции Azure Azure/functions-action AzureFunctionApp@2
Статические веб-приложения Azure Развертывание azure/static-web-apps AzureStaticWebApp@0

Учетные данные, необходимые для входа в Azure

При развертывании кода приложения в Служба приложений Azure, Функции Azure или контейнерном приложении Azure с помощью CI/CD требуется субъект-служба для входа в Azure. Войти в Azure с помощью субъекта-службы можно двумя способами:

Создание пакета приложения Teams

Для распространения приложения appPackage Teams требуется . Вы можете автоматически создать с appPackage.zip помощью teamsapp package команды в Teamsapp CLI. Если вы не можете использовать Teamsapp CLI, выполните следующие действия, чтобы вручную создать appPackage.

  1. Подготовьте папку appPackage .
  2. Поместите manifest.json файл в папку appPackage . Файл по умолчанию manifest.json в проекте Teams Toolkit содержит заполнители, обозначаемые ${{}}. Замените эти заполнители правильными значениями.
  3. Поместите значки приложения в папку appPackage . Чтобы подготовить значок приложения, см. раздел Значки приложений.
  4. Запакуйте файлы в папке appPackage .

Дополнительные ресурсы