This support article refers to the 2.0 version of the Aha! Azure DevOps Services and Azure DevOps Server integration. For the 1.0 version, please reference our Azure DevOps Server integration 1.0 article or Integrate with Azure DevOps Services article.
Aha! provides a two-way integration with Azure DevOps Services and Azure DevOps Server. This allows product teams to send their planned work from Aha! to their development team working in Azure DevOps Services or Azure DevOps Server. Before configuring any integration for the first time, it is important to fully understand how to think about integrating Aha! with your development tool.
The main difference between Azure DevOps Services and Azure DevOps Server is that Azure DevOps Services is a cloud-based solution that is available through a web browser or IDE client, while Azure DevOps Server is an on-premise offering. For the scope of this article, we will refer only to Azure DevOps Services but the same steps exist for Azure DevOps Server as well.
This integration supports sending the following Aha! record types to Azure DevOps Services:
- Master features
The above Aha! record types can be mapped to any work item type in Azure DevOps Services, including both standard and sub-task types.
To set up an integration with Azure DevOps Services, you need to be a product owner in Aha! for the product you wish to integrate. You will also need to have an Azure DevOps Services account that has proper access to create/edit records in the project you plan to integrate.
1. Navigate to Settings > Product and press the + icon next to Integrations on the left side navigation bar. Depending on if you are integrating to the cloud or on-premise, select either Azure DevOps Services or Azure DevOps Server from the integrations 2.0 grouping.
2. This will launch the integration configuration wizard. The first step is to name your integration and optionally select a template if you have already created one. Click Save and continue.
3. Next, you will be prompted to authenticate with valid Azure DevOps Services or Azure DevOps Server credentials.
For Azure DevOps Services, you will need to enable Alternate authentication credentials or create a Personal access token within Azure DevOps Services. Back over in Aha!, you need to enter the subdomain of your Azure DevOps Services account. Your Azure DevOps Services URL will be in one of two formats:
The subdomain will be "mycompany" for both formats.
Next, enter the username that you use to log into Azure DevOps Services. If you enabled Alternate authentication credentials earlier, you will enter your Azure DevOps Services account password. Otherwise, enter the Personal access token that was created as the password.
For Azure DevOps Server, you will need to enter the server URL for your Azure DevOps Server account. Be sure to enter the entire server URL, including the collection part of the path with no trailing slash. As an example of a valid entry, review the following URL:
Next, enter the username and password that you use to login to your Azure DevOps Server account.
4. After authenticating, you will be prompted to choose a project and an area. Both of these lists are based on what your user has available to them in Azure DevOps Services.
5. Next comes record mappings. This step allows you to configure how Aha! records are mapped to your Azure DevOps Services records. The default mappings are based on what is most widely used across our customers. However, you are free to remove the default mappings and add your own to map records together based on what makes sense for your team and how you work.
6. Within record mappings, you have the option to also specify your field mappings. This is an advanced option within the configuration that allows you to customize how each field within the record is mapped between Aha! and Azure DevOps Services — as well as what relationship links exist for those records.
Tip: If you have configured required fields in Azure DevOps, we recommend setting the Required flag on those fields in the custom layout associated to your product. This will ensure that any required fields are populated when records are created on the Aha! record creation form.
The relationship links are important to understand because they allow records created in your development system to be automatically imported into Aha! in certain use cases. You can learn more about them here.
7. While not every user will need to customize their field mapping, you do need to define the way statuses are mapped. Within the field mapping section for each Aha! record, there is a line for Status with a gear icon at the far right. Click the gear icon to open up the status mapping window.
8. When mapping statuses, you will be presented with your Aha! status workflow for the record type on the left and your integrated system status workflow on the right. Matching values are automatically mapped initially, and then you can manually rearrange statuses to your preferred mappings as needed. Drag and drop statuses on top of each other to create groupings, or drag them into different orders to rearrange. Click Done when you are ready to move on.
In the above screenshot, you can see that multiple statuses have been grouped together where the Aha! statuses of In design, Ready to develop, and In development are mapped to the single Azure DevOps Services status of Active.
9. With your records, optional field mappings, and statuses defined, you can click Save and continue to move onto the last step in the workflow. The Enable step allows you to specify how updates from Aha! are sent to your development system. To start with, you should choose to Approve outgoing changes. We recommend this option until the team is familiar with how the integration works, at which point you can choose to send changes automatically. The approval step allows teams that are new to the integration to validate what is being sent to their development system, which can help prevent unintentional changes from going through.
10. All sections of your integration configuration have been set. However, if you set any mappings to sync from Azure DevOps Services to Aha!, you will need to set up webhooks in Azure DevOps Services so that Aha! can receive updates. Each integration you add will require its own webhook to be added to Azure DevOps regardless if the project already has an Aha! webhook configured.
- Copy the webhook URL from the configuration page.
- In your Azure DevOps Services account, go to the project you want to integrate.
- Click the Project settings button in the bottom left and select the Service hooks page.
- Add a new service hook by clicking the + Create subscription button.
- Scroll to the option for the Web Hooks service and click Next.
- Under Trigger on this type of event, choose the Work item updated trigger from the dropdown menu. To reduce unnecessary webhooks, add filters for the specific area, item type, or tags that you plan to integrate with Aha! Click Next.
- On the Action page, under Settings, paste the webhook URL from Aha! into the URL field. You can leave the option fields unchanged and click Finish to create the subscription.
- Repeat this process two additional times, selecting the following events in step 6: Work item created and Work item deleted.
11. Finally, test the integration by opening one of your features in Aha! and use the Send dropdown to select Send to Azure DevOps Services. You should see a link to the created Azure DevOps Services record appear on the Aha! feature after a few seconds. This will let you easily click into Azure DevOps Services to verify that everything was sent through correctly.
Note: On September 10, 2018, Microsoft renamed Visual Studio Team Services (VSTS) to Azure DevOps Services. As part of this change, the URL convention changed from mycompany.visualstudio.com to dev.azure.com/mycompany. Microsoft supports redirection from visualstudio.com URLs, so there are no broken links with existing accounts. Additionally, the next version of Team Foundation Server (TFS) will be called Azure DevOps Server. Please reference this announcement from Microsoft for further detail.