Add docs for build strategy stuff

Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au>
This commit is contained in:
Nikolas Skoufis
2022-02-27 19:11:09 +11:00
parent f7e6a2fbc7
commit 0bedff8c9a
3 changed files with 78 additions and 5 deletions
+18
View File
@@ -46,6 +46,24 @@ between `techdocs-backend` and the storage)
[TechDocs Backend](https://github.com/backstage/backstage/tree/master/plugins/techdocs-backend)
## TechDocs Build Strategy
To accommodate more complex logic surrounding whether or not to build TechDocs, the TechDocs backend
supports selecting a Build Strategy.
The Build Strategy is responsible for deciding whether the documentation requested should be built locally
by the TechDocs backend or not.
Customization of the Build Strategy allows for more complex behaviour regarding whether the TechDocs backend
is responsible for building TechDocs, whether an external process is responsible, or whether a combination
of local builds and an external process is responsible, on an entity-by-entity basis.
The default Build Strategy results in the TechDocs backend building documentation locally if the
`techdocs.builder` configuration option is set to `'local'`, and skipping any building otherwise.
However any logic that satisfies the Build Strategy interface can be implemented, using the Backstage
config as well as the entity being processed to make a decision.
For an example of how the Build Strategy can be used to implement a 'hybrid' build model, refer to
the [How to implement a hybrid build strategy](./how-to-guides#how-to-implement-a-hybrid-build-strategy) guide.
## TechDocs Container
The TechDocs container is a Docker container available at
+10 -5
View File
@@ -38,11 +38,16 @@ techdocs:
pullImage: true
# techdocs.builder can be either 'local' or 'external.
# If builder is set to 'local' and you open a TechDocs page, techdocs-backend will try to generate the docs, publish to storage
# and show the generated docs afterwords. This is the "Basic" setup of the TechDocs Architecture.
# If builder is set to 'external', techdocs-backend will only fetch the docs and will NOT try to generate and publish. In this case of 'external',
# we assume that docs are being built by an external process (e.g. in the CI/CD pipeline of the repository). This is the "Recommended" setup of
# the architecture. Read more here https://backstage.io/docs/features/techdocs/architecture
# Using the default build strategy, if builder is set to 'local' and you open a TechDocs page,
# techdocs-backend will try to generate the docs, publish to storage and show the generated docs afterwords.
# This is the "Basic" setup of the TechDocs Architecture.
# Using the default build strategy, if builder is set to 'external' (or anything other than 'local'), techdocs-backend
# will only fetch the docs and will NOT try to generate and publish.
# In this case, we assume that docs are being built by an external process (e.g. in the CI/CD pipeline of the repository).
# This is the "Recommended" setup of the architecture.
# Note that custom build strategies may alter this behaviour.
# Read more about the "Basic" and "Recommended" setups here https://backstage.io/docs/features/techdocs/architecture
# Read more about build strategies here: https://backstage.io/docs/features/techdocs/concepts#techdocs-build-strategy
builder: 'local'
+50
View File
@@ -538,3 +538,53 @@ Done! Now you have a support of the following diagrams along with mermaid:
- `Vega`
- `Vega-Lite`
- `WaveDrom`
## How to implement a hybrid build strategy
One limitation of the [Recommended deployment](./architecture#recommended-deployment) is that
the experience for users requires modifying their CI/CD process to publish
their TechDocs. For some users, this may be unnecessary, and provides a barrier
to entry for onboarding users to Backstage. However, a purely local TechDocs
build restricts TechDocs creators to using the tooling provided in Backstage,
as well as the plugins and features provided in the Backstage-included `mkdocs`
installation.
To accommodate both of these use-cases, users can implement a custom [Build Strategy](./concepts#techdocs-build-strategy)
with logic to encode which TechDocs should be built locally, and which will be
built externally.
To achieve this hybrid build model:
1. In your Backstage instance's `app-config.yaml`, set `techdocs.builder` to
`'local'`. This ensures that Backstage will build docs for users who want the
'out-of-the-box' experience.
2. Configure external storage of TechDocs as normal for a production deployment.
This allows Backstage to publish documentation to your storage, as well as
allowing other users to publish documentation from their CI/CD pipelines.
3. Create a custom build strategy, that implements the `DocsBuildStrategy` interface,
and which implements your custom logic for determining whether to build docs for
a given entity.
For example, to only build docs when an entity has the `company.com/techdocs-builder`
annotation set to `'local'`:
```typescript
export class AnnotationBasedBuildStrategy {
private readonly config: Config;
constructor(config: Config) {
this.config = config;
}
async shouldBuild(_: Entity): Promise<boolean> {
return this.entity.metadata?.annotations?.["company.com/techdocs-builder"] === 'local'
}
}
```
4. Pass an instance of this Build Strategy as the `docsBuildStrategy` parameter of the
TechDocs backend `createRouter` method.
Users should now be able to choose to have their documentation built and published by
the TechDocs backend by adding the `company.com/techdocs-builder` annotation to their
entity. If the value of this annotation is `'local'`, the TechDocs backend will build
and publish the documentation for them. If the value of the `company.com/techdocs-builder`
annotation is anything other than `'local'`, the user is responsible for publishing
documentation to the appropriate location in the TechDocs external storage.