Azure DevOps Server (self-hosted) support is in early access and currently covers Azure DevOps Server 2022. To request access or share feedback, email developers@gitar.ai.
Overview
Gitar connects to a self-hosted Azure DevOps Server the same way it connects to Azure DevOps in the cloud: a Personal Access Token (PAT) on a dedicated service account, used to read pull requests, post review comments, and set up webhooks that deliver events to Gitar. The difference is the network. Your Server runs inside your own network, so two paths have to be open before you connect: Gitar has to reach your Server to read pull requests and manage webhooks, and your Server has to reach Gitar to deliver events. Set both up first, then follow the setup steps.Prerequisites
- Azure DevOps Server 2022.
- Permission to create a user in your Server instance.
- Project Administrator role on the projects you want to connect.
- Network connectivity in both directions (see Network and connectivity).
Network and connectivity
This is the part that differs from the cloud. Because your Server is self-hosted, both paths below must be open.Gitar to your Server (inbound)
Gitar calls your Server’s REST API and clones over HTTPS to read pull requests, post comments, and create webhooks. Your Server must be reachable from Gitar:- Reachable from the internet at a stable HTTPS URL, for example
https://devops.yourcompany.com. - A valid, publicly trusted TLS certificate. Self-signed certificates are not supported.
- If your Server enforces an IP allowlist, permit Gitar’s public IP addresses. See Network Access.
Your Server to Gitar (outbound webhooks)
Your Server delivers pull request events to Gitar through Azure DevOps service hooks. The Server makes an outbound HTTPS call to Gitar for each event, so allow egress from your Server to:api.gitar.ai in the proxy configuration.
No Azure DevOps Server setting needs to change: Server accepts external webhook subscriptions by default, so opening the egress path is all that is required. If pull request events never reach Gitar after connecting, this egress path is the usual cause, see Troubleshooting.
Setup Instructions
1
Create a dedicated service account
Create a dedicated account for Gitar in your Server’s identity source (Active Directory or the local accounts your Server uses), for example
gitar-bot, and make sure it is a valid user in the collection you want to connect.A dedicated account is required, not optional. Gitar identifies its own comments by the account of the PAT owner and ignores them to avoid processing its own output. If you use a personal account, every comment you post on pull requests will be silently ignored, and Gitar will never respond to your commands or questions.2
Grant Project Administrator role
The service account needs the Project Administrator role on each project you want Gitar to access. This role grants the “Edit subscriptions” permission used to create and delete webhooks, during setup, when adding projects later, and when disconnecting. Keep it for as long as the integration is active.For each project:
- Go to Project Settings → Permissions
- Select the Project Administrators group
- Add the Gitar service account as a member
3
Create a Personal Access Token
Sign in to your Server’s web portal as the Gitar service account and create a PAT:
- Click your profile avatar in the top right → Security → Personal access tokens
- Click New Token
- Set a name (e.g.,
Gitar) and an expiration date. Note the date so you can rotate the token before it expires - Select Custom defined under Scopes and enable the following:
- Click Create and copy the token. It will not be shown again
Gitar stops working when the PAT expires, and notifies you in the dashboard when it detects expiry.To rotate, create a new PAT with the same scopes and update it under Settings → Integrations → Azure DevOps → Update token.
4
Connect in Gitar
- In the Gitar dashboard, go to Settings → Integrations
- Click Connect next to Azure DevOps
- Check Connecting to Azure DevOps Server (on-premises)
- Server URL: your Server’s base URL, for example
https://devops.yourcompany.com. Enter the host plus any virtual directory, but do not include the collection - Azure DevOps Collection Name: the project collection, the first path segment after the server URL, commonly
DefaultCollection - Paste the PAT
- Select the projects you want Gitar to access
- Click Connect
Permissions Explained
Code (Read & write)
Gitar reads pull request metadata, diffs, and commit history to analyze changes. Write access is needed to post review comments, set reviewer votes, update PR descriptions, and report commit statuses.Pull Request Threads (Read & write)
Gitar reads and writes to pull request comment threads. This scope is separate from general code access and is required for Gitar to post inline code review comments, reply to threads, and resolve discussions.Build (Read)
Gitar subscribes to pipeline run-state-changed events as part of webhook setup. Azure DevOps requires the Build scope on the PAT for this specific subscription.Graph & Identity (Read)
Gitar reads the collection’s member list so admins can assign Gitar seats to the right people from Settings → Billing. This scope is read-only and available to any member, so it does not require the service account to be a Project Collection Administrator.Work Items (Read), optional
With this scope, Gitar reads the work items linked to a pull request and uses them as extra review context, for example checking that a change satisfies the requirements in its linked work item. If you leave it out, Gitar still reviews pull requests normally, it just will not use linked work items. You can add it later by creating a new PAT with this scope and updating the token.Project Administrator role
The Project Administrator role grants the “Edit subscriptions” permission, required to create and manage the service hook subscriptions Gitar uses to receive pull request events. This is separate from the PAT scopes above: webhook creation for most event types is gated by this project role, while the pipeline event subscription also requires the Build PAT scope.Troubleshooting
Validation fails to reach the server, or times out
Validation fails to reach the server, or times out
Gitar could not reach your Server from the internet. Confirm the Server URL is correct and publicly reachable, the TLS certificate is valid and publicly trusted (self-signed is not supported), and, if you enforce an IP allowlist, that Gitar’s IPs are permitted. See Network Access.
Connected, but pull request events never arrive
Connected, but pull request events never arrive
Your Server cannot reach Gitar to deliver webhooks. Allow outbound HTTPS from the Server to
https://api.gitar.ai on port 443, directly or through your outbound proxy. No Azure DevOps Server setting needs to change. This is a firewall or proxy rule.Validation fails with a 'Service Hooks permission' error
Validation fails with a 'Service Hooks permission' error
The service account does not have the Project Administrator role on the project. Add it to the Project Administrators group for each connected project, or to Project Collection Administrators for the whole collection.
Validation fails with a 'Build (Read) scope' error
Validation fails with a 'Build (Read) scope' error
The PAT is missing the Build (Read) scope. Azure DevOps requires it to create the pipeline-events webhook, even when the service account already has Project Administrator role. Edit the PAT, add Build → Read, and re-validate. This is a PAT scope, not a project role. Adding the role alone will not fix it.
Gitar stops working after some time
Gitar stops working after some time
The PAT has likely expired. Go to Settings → Integrations → Azure DevOps, click Update token, and paste a newly created PAT.
Gitar doesn't see my repositories after connecting
Gitar doesn't see my repositories after connecting
Only projects selected during setup are monitored. To add more projects, go to Settings → Integrations → Azure DevOps → Add projects.