Technical specifications for release statuses, manifest format, and deployer workflow structure in CloudBees Unify.
Release statuses
| Status | Definition |
|---|---|
Draft |
Release is missing one or more requirements. |
Ready to run |
Release has all requirements in place and can be run. |
Pending start |
Release is in the process of executing a workflow run for the first time. |
Started |
Release has executed at least one workflow run. |
Closed |
Release is closed permanently. |
Update a Draft release with any missing requirements to change its status to Ready to run.
Release manifest format
The release manifest specifies which artifact versions are deployed as part of a release.
It is passed as JSON string data to the release workflow in the manifest input parameter.
Key aspects of the manifest format:
-
The manifest JSON is grouped by component.
-
A
deployflag is set for each artifact in each component. Use this flag in the workflow to dynamically control whether artifact-specific jobs are invoked."deploy": trueindicates the artifact is part of the release manifest; otherwise it is set tofalse.
| Component names may not always be unique. CloudBees Unify only guarantees component name uniqueness within a given tenant organization. If multiple components in the same application have the same name, the component ID is used to group component artifacts instead of the component name. |
{ "componentName1": { "artifactName1": { "deploy": true, "id": "abcd1234-ab12-cd34-ef56-7890abcdef90" } }, "componentName2": { "artifactName2": { "deploy": false, "id": "" }, "artifactName3": { "deploy": true, "id": "pqrd1234-ab12-cd34-ef56-7890abcdef90" } } }
The manifest JSON structure no longer includes these fields: artifact block (name, version, url, digest) and component block (deploy, id).
To retrieve artifact details including name, version, URL, and digest, refer to Register and track artifacts.
|
The deploy flag can be used with an if condition in a deployer workflow to dynamically control deployment:
apiVersion: automation.cloudbees.io/v1alpha1 kind: workflow name: app-deployer on: workflow_call: inputs: manifest: (1) type: string required: true environment: type: string required: true jobs: deploy-componentName1-artifactName1: if: ${{ fromJSON(inputs.manifest)['componentName1']['artifactName1'].deploy }} (2) uses: myorg/componentName1/.cloudbees/workflows/deploy.yaml with: artifact-id: ${{ fromJSON(inputs.manifest)['componentName1']['artifactName1'].id }} environment: ${{ inputs.environment }} deploy-componentName2-artifactName2: if: ${{ fromJSON(inputs.manifest)['componentName2']['artifactName2'].deploy }} uses: myorg/componentName2/.cloudbees/workflows/deploy.yaml with: artifact-id: ${{ fromJSON(inputs.manifest)['componentName2']['artifactName2'].id }} environment: ${{ inputs.environment }} deploy-componentName2-artifactName3: if: ${{ fromJSON(inputs.manifest)['componentName2']['artifactName3'].deploy }} uses: myorg/componentName2/.cloudbees/workflows/deploy.yaml with: artifact-id: ${{ fromJSON(inputs.manifest)['componentName2']['artifactName3'].id }} (3) environment: ${{ inputs.environment }}
| 1 | The manifest input is required for a release workflow. |
| 2 | This condition controls whether the job is executed based on the deploy flag for that artifact in the manifest. |
| 3 | This specifies the format for referencing artifact IDs from the manifest. |
Deployer workflow structure
A deployer workflow must accept manifest and environment as workflow_call inputs and use conditional if logic to control per-component deployment.
The following is the structure of an auto-generated deployer for three components:
apiVersion: automation.cloudbees.io/v1alpha1 kind: workflow name: deployer on: workflow_call: inputs: environment: type: string required: true manifest: type: string required: true jobs: MyAppAPIs: if: ${{ fromJSON(inputs.manifest)['MyAppAPIs']['MyAppAPIs'].deploy }} uses: gmaxey/MyAppAPIs/.cloudbees/workflows/deploy.yaml with: artifact-id: ${{ fromJSON(inputs.manifest)['MyAppAPIs']['MyAppAPIs'].id }} environment: ${{ inputs.environment }} MyAppFE: if: ${{ fromJSON(inputs.manifest)['MyAppFE']['MyAppFE'].deploy }} uses: gmaxey/MyAppFE/.cloudbees/workflows/deploy.yaml with: artifact-id: ${{ fromJSON(inputs.manifest)['MyAppFE']['MyAppFE'].id }} environment: ${{ inputs.environment }} MyAppBE: if: ${{ fromJSON(inputs.manifest)['MyAppBE']['MyAppBE'].deploy }} uses: gmaxey/MyAppBE/.cloudbees/workflows/deploy.yaml with: artifact-id: ${{ fromJSON(inputs.manifest)['MyAppBE']['MyAppBE'].id }} environment: ${{ inputs.environment }}
The assisted deployer creation uses the components currently associated with your application and creates a job for each component that calls its deploy.yaml file, passes artifact-id and environment values, and adds conditional if logic to only deploy what’s in the manifest.
|