As a prerequisite, you need to have installed and configured the Azure DevOps Backend plugin before you move forward with any of these steps.
Installation Instructions
These instructions apply to self-hosted Backstage only. To use this plugin on Roadie, visit the docs.
Install the frotnend plugin for Azure DevOps.
yarn --cwd packages/app add @backstage-community/plugin-azure-devops
To use , add the EntityAzurePipelinesContent
card.
// In packages/app/src/components/catalog/EntityPage.tsx
// If you're using `dev.azure.com/project-repo annotation` use this:
import {
EntityAzurePipelinesContent,
isAzureDevOpsAvailable,
} from '@backstage-community/plugin-azure-devops';
// For example in the CI/CD section
const cicdContent = (
<EntitySwitch>
// ...
<EntitySwitch.Case if={isAzureDevOpsAvailable}>
<EntityAzurePipelinesContent defaultLimit={25} />
</EntitySwitch.Case>
// ...
</EntitySwitch>
// If you're using `dev.azure.com/project annotation` use this:
import {
EntityAzurePipelinesContent,
isAzurePipelinesAvailable,
} from '@backstage-community/plugin-azure-devops';
// For example in the CI/CD section
const cicdContent = (
<EntitySwitch>
// ...
<EntitySwitch.Case if={isAzurePipelinesAvailable}>
<EntityAzurePipelinesContent defaultLimit={25} />
</EntitySwitch.Case>
// ...
</EntitySwitch>
To use the EntityAzurePullRequestsContent
add the extension to your Entity page.
// In packages/app/src/components/catalog/EntityPage.tsx
import {
EntityAzurePullRequestsContent,
isAzureDevOpsAvailable,
} from '@backstage-community/plugin-azure-devops';
// For example in the Service section
const serviceEntityPage = (
<EntityLayout>
// ...
<EntityLayout.Route if={isAzureDevOpsAvailable} path="/pull-requests" title="Pull Requests">
<EntityAzurePullRequestsContent defaultLimit={25} />
</EntityLayout.Route>
// ...
</EntityLayout>
To use the EntityAzureGitTagsContent
component, add the extension to your Entity page.
// In packages/app/src/components/catalog/EntityPage.tsx
import {
EntityAzureGitTagsContent,
isAzureDevOpsAvailable,
} from '@backstage-community/plugin-azure-devops';
// For example in the Service section
const serviceEntityPage = (
<EntityLayout>
// ...
<EntityLayout.Route if={isAzureDevOpsAvailable} path="/git-tags" title="Git Tags">
<EntityAzureGitTagsContent />
</EntityLayout.Route>
// ...
</EntityLayout>
To use the Git Readme feature, add the EntityAzureReadmeCard
component to your Entity page.
// In packages/app/src/components/catalog/EntityPage.tsx
import {
EntityAzureReadmeCard,
isAzureDevOpsAvailable,
} from '@backstage-community/plugin-azure-devops';
// As it is a card, you can customize it the way you prefer
// For example in the Service section
const overviewContent = (
<Grid container spacing={3} alignItems="stretch">
<EntitySwitch>
<EntitySwitch.Case if={isAzureDevOpsAvailable}>
<Grid item md={6}>
...
</Grid>
<Grid item md={6}>
<EntityAzureReadmeCard maxHeight={350} />
</Grid>
</EntitySwitch.Case>
</EntitySwitch>
</Grid>
);
For relevant entities, add annotations to their respective catalog-info.yaml files
# Example catalog-info.yaml entity definition file
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
# ...
annotations:
dev.azure.com/project-repo: my-project/my-repo
dev.azure.com/build-definition: <build-definition-name> // if you have multiple entities in a single monorepo you'll need to specify the builds
dev.azure.com/readme-path: /<path-to>/<my-readme-file>.md
dev.azure.com/project: <project-with-build-code> // if your code is in a diferent repo
dev.azure.com/host-org: <host>/<organization> // if you have multiple organisations
spec:
type: service
# ...
Things to Know
Set up Backstage in minutes with Roadie
Focus on using Backstage, rather than building and maintaining it.