Настройка конвейеров CI/CD
Вы можете настроить конвейер непрерывной интеграции и непрерывного развертывания (CI/CD) для приложений Microsoft Teams, созданных с помощью набора средств Teams. Конвейер CI/CD приложения Teams состоит из трех частей:
Выполните построение проекта.
Разверните проект в облачных ресурсах.
Создание пакета приложения Teams.
Примечание.
Чтобы создать конвейер для приложения Teams, необходимо подготовить необходимые облачные ресурсы, такие как веб-приложение Azure, Функции Azure или Статическое веб-приложение Azure, и настроить параметры приложения.
Для сборки проекта необходимо скомпилировать исходный код и создать необходимые артефакты развертывания. Существует два метода развертывания артефактов:
Настройте конвейеры CI/CD с помощью интерфейса командной строки набора средств Teams. [Рекомендуется]
Настройте конвейеры CI/CD с помощью собственного рабочего процесса. [Необязательно]
Настройка конвейеров 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. |
Убедитесь, что у вас правильно настроен субъект-служба с соответствующими политиками доступа к ресурсам. | Интерфейс Teamsapp командной строки (CLI) поддерживает вход Azure с помощью проверки подлинности на основе сертификата или проверки подлинности на основе пароля (секрет приложения). Можно либо создать субъект-службу с проверкой подлинности на основе сертификата и сохранить созданный сертификат ( appId идентификатор клиента) и tenant (идентификатор клиента), либо создать секрет и сохранить идентификатор клиента, секрет клиента и идентификатор клиента субъекта-службы. ![]() Дополнительные сведения о субъекте-службе см. в разделе: • Создание субъекта-службы с помощью портала Entra. • Создание субъекта-службы с помощью Azure CLI. |
После выполнения предварительных требований давайте настроим конвейер:
Настройка конвейера с помощью GitHub
Чтобы настроить конвейер с помощью GitHub, выполните следующие действия.
Откройте Visual Studio Code.
cd.yml
Создайте файл в проекте в.github/workflows
папке и добавьте в файл следующий код:on: push: branches: - main jobs: build: runs-on: ubuntu-latest env: TEAMSAPP_CLI_VERSION: "3.0.4" # 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: Retrieve the secret and decode it to a file env: CERTIFICATE_BASE64: ${{ secrets.AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64 }} run: | echo $CERTIFICATE_BASE64 | base64 --decode > cert.pem - 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 cert.pem \ --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
Перейдите на сайт GitHub.
Обновите следующие переменные и секреты, созданные во время выполнения предварительных требований:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
,AZURE_TENANT_ID
иAZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
.AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
— это содержимое созданного сертификата в строковом кодировке Base64.Примечание.
Переменная
AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
должна быть задана как секрет. Используйте среду GitHub для различных наборов переменных.Перейдите к файлу
teamsapp.yml
.deploy
На этапе значения, заключенные в${{}}
, являются обязательными ключами переменных. Если вы использовалиprovision
команду из набора средств Teams, вы можете найти значения в файлах среды в папке.env
.Задайте в
BOT_AZURE_APP_SERVICE_RESOURCE_ID
качестве переменной репозитория:Перейдите к файлу
appPackage/manifest.json
. Значения, заключенные в${{}}
, являются обязательными ключами переменных. Если вы использовалиprovision
команду из набора средств Teams, вы можете найти значения в файлах среды в папке.env
.Задайте в
TEAMS_APP_ID
качестве переменной репозитория:
На сайте GitHub перейдите в раздел Параметры репозитория и выберите Секреты и переменные>Действия.
Обновите ключи переменных, собранные для следующих переменных:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
AZURE_TENANT_ID
-
AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET
илиAZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
BOT_AZURE_APP_SERVICE_RESOURCE_ID
TEAMS_APP_ID
Добавьте переменные, определенные в репозитории, непосредственно в файл yml, за исключением следующих трех переменных:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
AZURE_TENANT_ID
AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET
илиAZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
Запустите конвейер.
Отправка кода в репозиторий для активации конвейера.
Примечание.
Вам не нужно фиксировать файлы env в папке env в репозитории. Переменные env, необходимые для выполнения конвейера CI/CD, уже заданы в переменных репозитория.
После успешного выполнения конвейера в журнале отображается, что код развернут в Azure и
appPackage
создается в артефактах.
Настройка конвейера с помощью Azure DevOps
Чтобы настроить конвейер с помощью Azure DevOps, выполните следующие действия.
Откройте Visual Studio Code.
Создайте
cd.yml
файл в проекте и добавьте в файл следующий код:trigger: - main pool: vmImage: ubuntu-latest variables: TEAMSAPP_CLI_VERSION: 3.0.4 steps: - task: NodeTool@0 inputs: versionSpec: "20" checkLatest: true - script: | npm install @microsoft/teamsapp-cli@$(TEAMSAPP_CLI_VERSION) displayName: "Install CLI" - task: DownloadSecureFile@1 name: certFile displayName: 'Download Certificate File' inputs: secureFile: 'azure_sp_cert.pem' - script: | npx teamsapp auth login azure --username $(AZURE_SERVICE_PRINCIPAL_CLIENT_ID) --service-principal true --tenant $(AZURE_TENANT_ID) --password $(certFile.secureFilePath) --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
Отправьте код в репозиторий.
Настройка конвейера Azure.
После отправки кода в репозиторий перейдите в раздел Конвейеры и выберите Новый конвейер. Выберите репозиторий и существующий файл yml, чтобы настроить конвейер.
Обновите следующие переменные и задайте сертификат, созданный во время выполнения предварительных требований:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
,AZURE_TENANT_ID
Перейдите к файлу
teamsapp.yml
.deploy
На этапе значения, заключенные в${{}}
, являются обязательными ключами переменных. Если вы использовалиprovision
команду из набора средств Teams, вы можете найти значения в файлах среды в папке.env
.Задайте в
BOT_AZURE_APP_SERVICE_RESOURCE_ID
качестве переменной репозитория:Перейдите к файлу
appPackage/manifest.json
. Значения, заключенные в${{}}
, являются обязательными ключами переменных. Если вы использовалиprovision
команду из набора средств Teams, вы можете найти значения в файлах среды в папке.env
.Задайте в
TEAMS_APP_ID
качестве переменной репозитория:
В репозитории необходимо задать следующие переменные имени ключа:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
AZURE_TENANT_ID
BOT_AZURE_APP_SERVICE_RESOURCE_ID
TEAMS_APP_ID
Чтобы задать переменные в конвейере, перейдите к конвейеру и выберите Изменить>переменные.
В проекте Azure DevOps перейдите враздел Библиотекаконвейеров> и добавьте новый защищенный файл. Отправьте файл сертификата (PEM- файл) и присвойте файлу имя
azure_sp_cert.pem
.Запустите конвейер.
Отправка кода в репозиторий для активации конвейера.
Примечание.
Нет необходимости фиксировать 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 с помощью субъекта-службы можно двумя способами:
OpenID Connect (OIDC):
Сведения о действии GitHub см. в статье Использование действия входа в Azure с OpenID Connect.
Сведения о конвейере Azure см. в статье Создание подключения службы Resource Manager Azure, использующего федерацию удостоверений рабочей нагрузки.
Секрет. Интерфейс командной строки TeamsApp поддерживает вход с помощью субъекта-службы с секретом. Дополнительные сведения см. в статье Создание секрета клиента.
Создание пакета приложения Teams
Для публикации appPackage
приложения Teams требуется . Вы можете автоматически создать с appPackage.zip
помощью teamsapp package
команды в Teamsapp
CLI. Если вы не можете использовать Teamsapp
CLI, выполните следующие действия, чтобы вручную создать appPackage
.
- Подготовьте папку
appPackage
. - Поместите
manifest.json
файл в папкуappPackage
. Файл по умолчаниюmanifest.json
в проекте Teams Toolkit содержит заполнители, обозначаемые ${{}}. Замените эти заполнители правильными значениями. - Поместите значки приложения в папку
appPackage
. Чтобы подготовить значок приложения, см. раздел Значки приложений. - Запакуйте файлы в папке
appPackage
.
Дополнительные ресурсы
Platform Docs