- Order the document: groups, then jobs, then resources, then resource types
- Manage the image a task is using by
getting it before each use - Every step needs timeouts and retries
- Always declare inputs and outputs in the pipeline, even if their names match other pipeline resources
- Declare those parameters (environment variables) in the pipeline that need to be set to secrets
- Add a self-update job (remember to pause it when flying a one-off change)
- Specify
build_log_retentionin order to limit the database usage to a meaningful value
- Use a dedicated task image. Avoid universal / mega images; they just accrue debt.
- Declare empty input or
detectfor put steps in order to avound streaming volumes that will not be used - Specify
no_get: truefor put steps if there is no reason togetthe resoruce again afterput
- Use spruce to inline task scripts for self-contained pipelines