Set up Maester Teams Alerts
Your Maester monitoring workflow can be configured to send an adaptive card in a team channel with the summary of the Maester test results at the end of each monitoring cycle in Slack. This guide will walk you through the steps to set up Teams alerts in Maester.
There are two ways you can send alerts to Teams:
- Teams webhook workflow: Uses a Teams webhook triggered from Maester.
- This method is simpler to set up, does not require any additional Graph permissions and users a PowerAutomate workflow. However the workflow is tied to the account that set up the workflow which may need to be updated if the account is disabled.
- Graph API: Uses a Graph API call to send the message to a Teams channel.
- This method takes a few extra steps and requires consenting to the ChannelMessage.Send Graph permissions. There are no dependencies on PowerAutomate workflows with this option.
- Teams webhook workflow
- Graph API
Create a Teams webhook
- To get the Webhook Uri, right-click on the channel in Teams and select
Workflow
. - Create a workflow using the
Post to a channel when a webhook request is received
template. - Copy the Webhook Uri provided. You will need this Uri for the next step.
Invoke-Maester with the webhook
Update your GitHub/Azure DevOps daily monitoring workflow to send the alert using the TeamChannelWebhookUri
parameter with the url from the previous step.
Invoke-Maester -TeamChannelWebhookUri 'https://some-url.logic.azure.com/workflows/invoke?api-version=2016-06-01'
Alternatively, you can use the Send-MtTeamsMessage
cmdlet to send the message to a specific Teams channel.
```powershell
# Get the results of the Maester tests using -PassThru
$results = Invoke-Maester -Path tests/Maester/ {...} -PassThru
# Send the summary using the results
Send-MtTeamsMessage -MaesterResults $MaesterResults TeamChannelWebhookUri 'https://some-url.logic.azure.com/workflows/invoke?api-version=2016-06-01' -Subject 'Maester Results' -TestResultsUri "https://github.com/contoso/maester/runs/123456789"
The TeamChannelWebhookUri should be kept secure and not shared publicly to avoid unauthorized users posting messages to your channel. If using GitHub Actions, it is recommended to store the webhook uri as a secret.
Prerequisites
ChannelMessage.Send graph permissions
The app that sends the Teams alerts needs the ChannelMessage.Send
permission to send messages. To configure
- Open the Entra admin center > Identity > Applications > App registrations
- Search for the application you created to run as the
Maester DevOps Account
. - Select API permissions > Add a permission
- Select Microsoft Graph > Application permissions
- Search for
ChannelMessage.Send
and check the box next to the permission - Select Add permissions
- Select Grant admin consent for [your organization]
- Select Yes to confirm
Add the Teams alert step to your workflow
Update your GitHub/Azure DevOps daily monitoring workflow to send the alert using Send-MtTeamsMessage
after the Maester tests have been run.
# Get the results of the Maester tests using -PassThru
$results = Invoke-Maester -Path tests/Maester/ {...} -PassThru
# Send the summary using the results
Send-MtTeamsMessage -MaesterResults $MaesterResults -TeamId '00000000-0000-0000-0000-000000000000' -TeamChannelId '19%3A00000000000000000000000000000000%40thread.tacv2' -Subject 'Maester Results'
- To get the TeamId, right-click on the channel in Teams and select 'Get link to channel'. Use the value of groupId. e.g. ?groupId=< TeamId >
- To get the TeamChannelId, right-click on the channel in Teams and select 'Get link to channel'. Use the value found between channel and the channel name. e.g. /channel/< TeamChannelId >/my%20channel
Adding a link to detailed Maester results
The cmdlet has a -TestResultsUri
parameter that can be used to include a link to the detailed Maester results in the alert.
To use this parameter, you need to provide the URL of the Maester results page. Use the appropriate url format based on the CI/CD system you are using.
GitHub
Link: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
$testResultsUri = "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
Send-MtTeamsMessage -MaesterResults $results -TestResultsUri $testResultsUri ...
Azure DevOps
Link: $(System.CollectionUri)$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)
$testResultsUri = "$(System.CollectionUri)$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)"
Send-MtTeamsMessage -MaesterResults $results -TestResultsUri $testResultsUri ...