Configurar pipelines de CI/CD
Pode configurar um pipeline de Integração Contínua e Implementação Contínua (CI/CD) para aplicações do Microsoft Teams criadas com o Teams Toolkit. Um pipeline CI/CD da aplicação Teams consiste em três partes:
Compile o projeto.
Implementar o projeto em recursos da cloud.
Gerar pacote de aplicações do Teams.
Observação
Para criar um pipeline para uma aplicação do Teams, é necessário preparar os recursos da cloud necessários, como a Aplicação Web do Azure, Azure Functions ou a Aplicação Web Estática do Azure, e configurar as definições da aplicação.
Para criar o projeto, tem de compilar o código fonte e criar os artefactos de implementação necessários. Existem dois métodos para implementar os artefactos:
Configure pipelines CI/CD com a CLI do Teams Toolkit. [Recomendado]
Configure pipelines CI/CD com o seu próprio fluxo de trabalho. [Opcional]
Configurar pipelines CI/CD com a CLI do Teams Toolkit
Observação
Utilize o Teams Toolkit versão 5.6.0 ou posterior.
Pode utilizar a interface de linha de comandos (CLI) do Teams Toolkit para configurar o pipeline CI/CD para a sua aplicação Teams.
Pré-requisitos
Item | Descrição |
---|---|
Configure os recursos necessários para a sua aplicação Teams, como o ID da aplicação Teams, o ID do bot, etc. | • Extraia manualmente os recursos do manifest.json ficheiro sob a appPackage pasta . • Gerar automaticamente para executar o Provision comando no Teams Toolkit. |
Configurar recursos do Azure | • Prepare manualmente os recursos ao examinar os ficheiros bíceps na infra pasta . • Prepare automaticamente os recursos com o Provision comando no Teams Toolkit. |
Certifique-se de que tem um principal de serviço configurado corretamente com políticas de acesso adequadas nos recursos. | A Teamsapp interface de linha de comandos (CLI) suporta o início de sessão do Azure através da autenticação baseada em certificado ou da autenticação baseada em palavra-passe (segredo da aplicação). Pode criar um principal de serviço com autenticação baseada em certificado e guardar o certificado gerado( appId ID de cliente) e tenant (ID do inquilino) ou criar um segredo e guardar o ID de cliente, o segredo do cliente e o ID de inquilino do principal de serviço. Para obter mais informações sobre o principal de serviço, veja: • Crie um principal de serviço com o portal Entra. • Criar principal de serviço com a CLI do Azure. |
Depois de concluir os pré-requisitos, vamos configurar um pipeline:
Configurar o pipeline com o GitHub
Para configurar o pipeline com o GitHub, siga estes passos:
Abra o Visual Studio Code.
Crie um
cd.yml
ficheiro no seu projeto.github/workflows
na pasta e adicione o seguinte código no ficheiro: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
Aceda ao GitHub.
Atualize as seguintes variáveis e segredos que criou durante os pré-requisitos:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
,AZURE_TENANT_ID
eAZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
.AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
é o conteúdo codificado da cadeia Base64 do certificado que gerou.Observação
A
AZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
variável tem de ser definida como secreta. Utilize o ambiente do GitHub para diferentes conjuntos de variáveis.Aceda ao
teamsapp.yml
ficheiro.deploy
Na fase, os valores incluídos são${{}}
as chaves variáveis necessárias. Se tiver utilizado oprovision
comando do Teams Toolkit, pode localizar os valores nos ficheiros de ambiente na.env
pasta.Defina como
BOT_AZURE_APP_SERVICE_RESOURCE_ID
uma variável de repositório:Aceda ao
appPackage/manifest.json
ficheiro. Os valores incluídos são${{}}
as chaves variáveis necessárias. Se tiver utilizado oprovision
comando do Teams Toolkit, pode localizar os valores nos ficheiros de ambiente na.env
pasta.Defina como
TEAMS_APP_ID
uma variável de repositório:
No GitHub, navegue para as Definições do seu repositório e selecione Segredos e variáveis Ações>.
Atualize as chaves variáveis que recolheu para as seguintes variáveis:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
AZURE_TENANT_ID
-
AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET
ouAZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
BOT_AZURE_APP_SERVICE_RESOURCE_ID
TEAMS_APP_ID
Adicione as variáveis definidas no seu repositório diretamente ao ficheiro yml, excluindo as três variáveis seguintes:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
AZURE_TENANT_ID
AZURE_SERVICE_PRINCIPAL_CLIENT_SECRET
ouAZURE_SERVICE_PRINCIPAL_CERTIFICATE_BASE64
Execute o pipeline.
Envie código para o repositório para acionar o pipeline.
Observação
Não precisa de consolidar ficheiros env na pasta env para o repositório. As variáveis env necessárias para executar o pipeline CI/CD já estão definidas nas variáveis de repositório.
Depois de o pipeline ser executado com êxito, o registo mostra que o código é implementado no Azure e o
appPackage
é gerado nos artefactos.
Configurar o pipeline com o Azure DevOps
Para configurar o pipeline com o Azure DevOps, siga estes passos:
Abra o Visual Studio Code.
Crie um
cd.yml
ficheiro no seu projeto e adicione o seguinte código no ficheiro: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
Envie o código para o repositório.
Configurar o pipeline do Azure.
Depois de emitir o código para o repositório, navegue para Pipelines e selecione Novo pipeline. Selecione o seu repositório e o ficheiro yml existente para configurar o pipeline.
Atualize as seguintes variáveis e defina o certificado que criou durante os pré-requisitos:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
,AZURE_TENANT_ID
Aceda ao
teamsapp.yml
ficheiro.deploy
Na fase, os valores incluídos são${{}}
as chaves variáveis necessárias. Se tiver utilizado oprovision
comando do Teams Toolkit, pode localizar os valores nos ficheiros de ambiente na.env
pasta.Defina como
BOT_AZURE_APP_SERVICE_RESOURCE_ID
uma variável de repositório:Aceda ao
appPackage/manifest.json
ficheiro. Os valores incluídos são${{}}
as chaves variáveis necessárias. Se tiver utilizado oprovision
comando do Teams Toolkit, pode localizar os valores nos ficheiros de ambiente na.env
pasta.Defina como
TEAMS_APP_ID
uma variável de repositório:
Tem de definir as seguintes variáveis de nome de chave no repositório:
AZURE_SERVICE_PRINCIPAL_CLIENT_ID
AZURE_TENANT_ID
BOT_AZURE_APP_SERVICE_RESOURCE_ID
TEAMS_APP_ID
Para definir variáveis no pipeline, aceda ao pipeline e selecione Editar>Variáveis.
No projeto do Azure DevOps, navegue paraa Biblioteca de Pipelines> e adicione um novo ficheiro seguro. Carregue o ficheiro de certificado (.pem) e atribua o nome .
azure_sp_cert.pem
Execute o pipeline.
Envie código para o repositório para acionar o pipeline.
Observação
Não é necessário consolidar ficheiros env na pasta env/ para o repositório. As variáveis env necessárias para executar o pipeline CI/CD já estão estabelecidas nas variáveis de pipeline.
Depois de o pipeline ser executado com êxito, o registo mostra que o código é implementado no Azure e o
appPackage
é gerado nos artefactos.
Configurar pipelines CI/CD com o seu próprio fluxo de trabalho
Se a CLI da Aplicação Teams não cumprir os seus requisitos de pipeline, pode desenvolver um processo de implementação personalizado que se adeque às suas necessidades. Esta secção fornece orientações sobre a implementação no Azure com métodos personalizados.
Observação
Se já tiver um pipeline CI/CD completo para implementar no recurso do Azure e a sua aplicação do Teams precisar de ler variáveis de ambiente durante o runtime, configure estas variáveis de ambiente nas definições do recurso do Azure. Para testes pós-implementação, veja Gerar pacote de aplicações do Teams.
O teamsapp deploy
comando executa as ações definidas na deploy
fase do teamsapp.yml
ficheiro. A deploy
fase consiste em build
e deploy
ações. Para criar um método de implementação personalizado, reescreva estas ações com base nos seus requisitos e preferências específicos.
Por exemplo, um projeto TypeScript de bot básico tem a seguinte fase de implementação no respetivo 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}}
Estas ações executam as seguintes tarefas:
- Execute
npm install
enpm build
para criar o projeto. - Implementar código no serviço de aplicações do Azure.
Pode personalizar estas ações no pipeline CI/CD. Eis um exemplo que utiliza as ações do 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
O Teams Toolkit suporta projetos de aplicações do Teams, escritos em várias linguagens de programação e concebidos para alojamento em diferentes serviços do Azure. As seguintes ações para criar e implementar. Utilize estas ações ao definir pipelines de implementação CI/CD.
Build:
Idioma | GitHub | Azure Pipeline |
---|---|---|
JS ou TS | actions/setup-node | NodeTool@0 |
C# | actions/setup-dotnet | DotNetCoreCLI@2 |
Implantar:
Recurso | GitHub | Azure Pipeline |
---|---|---|
Serviço do Aplicativo do Azure | azure/webapps-deploy | AzureWebApp@1 |
Azure Functions | Azure/functions-action | AzureFunctionApp@2 |
Aplicativos Web Estáticos do Azure | Azure/static-web-apps-deploy | AzureStaticWebApp@0 |
Credenciais necessárias para iniciar sessão no Azure
Quando implementa o código da aplicação para Serviço de Aplicativo do Azure, Azure Functions ou Azure Container App através de CI/CD, precisa de um principal de serviço para o início de sessão do Azure. Pode iniciar sessão no Azure com um principal de serviço de duas formas:
OpenID Connect (OIDC):
Para a ação do GitHub, veja como utilizar a ação de início de sessão do Azure com o OpenID Connect.
Para o pipeline do Azure, veja como criar uma ligação de serviço do Azure Resource Manager que utiliza a federação de identidade da carga de trabalho.
Segredo: a CLI do TeamsApp suporta o início de sessão através de um principal de serviço com um segredo. Para obter mais informações, veja como criar um novo segredo do cliente.
Gerar pacote de aplicações do Teams
Para distribuir a sua aplicação Teams, o appPackage
é necessário. Pode criar automaticamente o com o appPackage.zip
teamsapp package
comando na Teamsapp
CLI. Se não conseguir utilizar Teamsapp
a CLI, siga estes passos para criar manualmente o appPackage
:
- Preparar uma
appPackage
pasta. - Coloque o
manifest.json
ficheiro naappPackage
pasta . O ficheiro predefinidomanifest.json
no projeto Teams Toolkit contém marcadores de posição, indicados por ${{}}. Substitua estes marcadores de posição pelos valores corretos. - Coloque os ícones da aplicação na
appPackage
pasta . Para preparar o ícone da aplicação, veja ícones da aplicação. - Zipe os ficheiros na
appPackage
pasta .