17 Bundles and CI/CD (Preview)
Bundles define how Oracle AI Data Platform Workbench resources are packaged, versioned, shared, and deployed across workspaces and environments.
You can create bundles for jobs and agents. A bundle is created in a Git folder so that the bundle files can be committed and pushed to a Git repository. The resources that you include in the bundle can come from any location in the workspace. If the selected resources reference supporting files or dependencies, such as notebooks, scripts, or compute, those references are included in the bundle so the resources can be deployed in another environment without manually recreating the same components.
You create bundles from your workspace and select the Oracle AI Data Platform Workbench resources to include at the time of creation. Existing bundles can be modified to add or remove resources. Bundling resources allows you to group related jobs and agents together and deploy them to other environments with their dependencies intact.
You can commit and push bundles to your Git repository through your Git folders. Users can then pull the bundles into their own environments and deploy them. Changes to bundle files are available to other environments after the changes are committed and pushed to the Git repository. Whenever users pull the updated bundle from the Git repository, they receive the latest committed resource files.
Bundle Concepts
| Concept | Meaning | User Action |
|---|---|---|
| Git folder | An AI Data Platform folder connected to a Git repository and branch. Bundles can be created only in Git folders. | Create or open a Git folder before creating a bundle. |
| Bundle | A deployable package that defines selected resources and their dependencies. | Create the bundle from the workspace, then select resources such as jobs or agent flows. |
| Bundle content | Generated files that describe resources, variables, target settings, and artifacts required for deployment. | Review generated content after create or sync. Commit and push the bundle through Git when ready. |
| Target | An environment or workspace configuration used when deploying the bundle outside the source environment. | Provide values that must change by environment, such as workspace key, credential name, token key, or parameter defaults. |
| Deployed item | A resource created or updated by a bundle deployment in the target workspace. | Use the Deployment tab to deploy, review deployed items, run jobs, and purge deployed resources when needed. |
| Sync | A bundle action that refreshes bundle resources and dependencies from the latest source resources. | Run sync after changing bundled resources, then commit the refreshed bundle files to Git. |
Before You Start
- Create Git credentials and a Git folder that points to the repository and branch used for bundle files.
- Confirm the source resources are in the workspace and are saved before creating or syncing the bundle.
- For cross-environment deployment, confirm the target workspace has required permissions and compute capacity.
- For jobs or notebooks that use secrets, create the required named credentials in the target credential store. Bundle files should reference credentials by name or variable, not contain secret values.
- Commit and push bundle file changes after creating or syncing a bundle so other environments can pull the latest bundle definition.
Create a Bundle (Preview)
You can bundle Oracle AI Data Platform job and agent resources to create a package that can be deployed to another Git folder.
What Gets Generated After Bundle Creation (Preview)
After bundle creation, Oracle AI Data Platform writes your generated files into the bundle folder.
The exact file names vary by resource type, but the created bundle usually contains a top-level bundle manifest, resource definitions, artifact folders, and optional override files.
| Generated Item | Description |
|---|---|
aidp_workbench.yaml |
Bundle manifest. Identifies the bundle, included resources, variables, and target sections used during deployment. |
.aidp/resource_origins.yaml |
Resource definitions. Describe resources such as jobs, notebook tasks, compute references, or agent flows. |
.aidp/overrides.yaml |
Override files or target sections. Hold values that differ by environment, such as workspace identifiers, parameter defaults, credential names, or token keys. |
.aidp/aidp.state.json |
Tracks resources deployed from the bundle. Used by future deploy and purge operations. |
jobs/ |
Job descriptors and job dependencies. |
agentflows/ |
Agent descriptors and agent dependencies. |
artifacts/ |
Artifact folders. Copied code, notebooks, and supporting file artifacts. |
Deploy a Bundle (Preview)
You can deploy bundles from a Git folder to share resources and dependencies across workspaces and environments.
Sync a Bundle (Preview)
You can sync a bundle to update the resources and dependencies in the bundle with the latest changes.
Sync uses the bundle's recorded origin metadata to rebuild the bundle from the source jobs and agent flows that were captured when the bundle was created. The source metadata is stored in .aidp/resource_origins.yaml and must match the requested instance and workspace. The operation refreshes source-controlled bundle content while preserving the bundle identity and runtime metadata.
During sync, the service stages a refreshed bundle snapshot under the bundle .aidp directory, compares existing and staged descriptors, preserves existing variable aliases and override references where possible, merges existing manifest default variables, and then promotes the refreshed source-controlled files back into the bundle root.
Sync preserves environment-specific and deployment runtime files such as .aidp/overrides.yaml and .aidp/aidp.state.json. These files are not replaced by the refreshed source snapshot.
- A bundled notebook, job, agent flow, compute reference, parameter, or dependency changed in the source workspace.
- A bundled job now points to a different notebook or has updated task parameters.
- An agent configuration, prompt parameter, model setting, or AI compute dependency changed.
- You need the Git folder to contain the latest generated bundle files before pushing to another environment.
- Navigate to the bundle you want to sync in your workspace.
- Click Actions.
- Click Sync. You are notified when the sync is complete.
Recommended Promotion Workflow for Bundles
We recommend following a workflow of develop, package, version, pull, configure, deploy, and validate for Git bundles in Oracle AI Data Platform.
| Phase | Action | Result |
|---|---|---|
| Develop | Create or update notebooks, jobs, compute settings, or agent flows in the source workspace. | The source resources contain the latest intended behavior. |
| Package | Create the bundle, or run Sync on an existing bundle. | Generated bundle files reflect the current source resources and dependencies. |
| Version | Review, commit, and push the bundle folder through the Git folder. | The remote repository contains the deployable bundle definition. |
| Pull | In the target workspace, pull the Git folder changes. | The target workspace has the latest bundle files. |
| Configure | Set target-specific values such as workspace key, parameter defaults, credential name, token key, or runtime settings. | The bundle is ready for the target environment. |
| Deploy | Open the bundle Deployment tab and click Deploy. | Workbench creates or updates the deployed resources. |
| Validate | Run deployed jobs or test deployed agent flows and inspect logs or output. | The target environment is verified before promotion continues. |
Bundle Variables (Preview)
Use bundle variables when a bundle needs deploy-time values that can change for every target environment without editing the resource definition.
To begin using variables with bundles, you need to define the variable names in the bundle's aidp_workbench.yaml file with default values and, when needed, environment-specific overrides. You then reference those variables from generated definition files.
Example Variable Workflow
- Define variable names under
defaults > variablesinaidp_workbench.yaml. - Optionally define environment-specific values under
targets > <environment> > variablesin the sameaidp_workbench.yamlfile. - Use target overrides to set deploy-time values such as a dev region, QA region, production region, schema name, credential name, token key, or parameter default.
- When no matching target environment is found, Oracle AI Data Platform uses the default variable value from aidp_workbench.yaml.
- Use the variable in any generated definition file, such as a job definition, compute definition, task definition, or other YAML definition file.
- Reference the variable with ${var.<<variable_name>>}, replacing <<variable_name>> with the actual variable name defined in aidp_workbench.yaml.
- Use resource-specific placeholder syntax in places such as agent prompts or tool definitions when the UI expects a named placeholder.
- For temporary deployment-only changes, create .aidp/overrides.yaml and define variable values there.
Bundle Variable Syntax
Variable definitions must be written in aidp_workbench.yaml. Other bundle definition files should only reference the variable name.
| Definition | Syntax | Example |
|---|---|---|
Variable definition in aidp_workbench.yaml
|
|
|
Target-specific override inaidp_workbench.yaml |
|
|
| Variable reference in a definition file | ${var.<<variable_name>>} |
value: "${var.deployment_region}" |
| Named placeholder in an agent prompt or tool field | {{variable_name}} |
Generate a summary about {{topic}}. |
Example: Job Parameter Variable
bundle:
name: namedVariableJobDemo
resources:
jobs:
- namedVariableJobDemo
defaults:
variables:
job_param_value_default: "cloud data governance"
jobs:
namedVariableJobDemo:
tasks:
- taskKey: Task_956691
parameters:
- name: param_key
value: "${var.job_param_value_default}" A notebook task can read the resolved value through the parameter name used by the job:
param_value = odiUtils.parameters.getParameter("param_key", "fallback value")
print(param_value)Example: aidp_workbench.yaml Variable Definition
agent_topic_default in aidp_workbench.yaml. The default value applies when no matching target environment is found, or when no selected environment or temporary override supplies the variable. Each target can override the same variable name for that workspace.defaults:
variables:
agent_topic_default: "Oracle AI Data Platform"
targets:
dev:
- aidp_ocid: "ocid1.aidataplatformdev.oc1.iad.exampledev"
workspace_key: "6271b138-6f2c-4e8c-a9e5-013e17079955"
variables:
agent_topic_default: "AIDP Dev Workspace"
qa:
- aidp_ocid: "ocid1.aidataplatformdev.oc1.iad.exampleqa"
workspace_key: "daa0e9b5-f8d7-4ae8-b728-2984e68a74c0"
variables:
agent_topic_default: "AIDP QA Workspace"
prod:
- aidp_ocid: "ocid1.aidataplatform.oc1.iad.exampleprod"
workspace_key: "83be5b8c-bb8d-4ec4-a8fb-16b50b0e4d4c"
variables:
agent_topic_default: "AIDP Production Workspace" Any bundle definition file that supports bundle variables can then reference the same variable name. For example:
tasks/agentTopic.task.yaml
parameters:
- name: topic
value: "${var.agent_topic_default}"Example: File Names and Resolution
testNamedVarBundleJob/
aidp_workbench.yaml
jobs/
namedVariableJobDemo.job.json
artifacts/
namedVarNotebookDemo.ipynb| File | What It Contains | Variable or Resolved Value |
|---|---|---|
aidp_workbench.yaml |
Defines the variable under defaults > variables and optional target overrides. | Variable: job_param_value_default.
|
jobs/namedVariableJobDemo.job.json |
Uses the variable as the value for job parameter param_key. | Reference: ${var.job_param_value_default}.
|
artifacts/namedVarNotebookDemo.ipynb |
Reads the resolved job parameter at runtime. | Notebook reads param_key after resolution.
|
aidp_workbench.yaml:defaults:
variables:
job_param_value_default: "cloud data governance"
targets:
dev:
variables:
job_param_value_default: "space tourism"
qa:
variables:
job_param_value_default: "data quality validation"
prod:
variables:
job_param_value_default: "customer operations"The job definition can then use that same variable name in jobs/namedVariableJobDemo.job.json. The same syntax can be used in job definitions, compute definitions, task definitions, and other generated YAML definition files that support bundle variables:
"parameters": [
{
"name": "param_key",
"value": "${var.job_param_value_default}"
}
]| Deployment Target | Variable Resolution | Notebook Receives |
|---|---|---|
| No matching target | Uses default from aidp_workbench.yaml. | param_key = cloud data governance
|
| dev | Uses dev target override. | param_key = space tourism
|
| qa | Uses qa target override. | param_key = data quality validation |
| prod | Uses prod target override. | param_key = customer operations |
Resolution Order
When .aidp/overrides.yaml supplies a variable value, AI Data Platform uses that temporary value for the next deployment. Otherwise, AI Data Platform resolves the variable from the selected target first. If no matching target environment is found, or the selected target does not override the variable, AI Data Platform falls back to defaults > variables in aidp_workbench.yaml. If no value is available for the referenced variable, deployment or job execution can fail before the notebook fallback value is used.
Temporary Overrides for the Next Deployment
The definitions in aidp_workbench.yaml are sufficient for normal bundle promotion. If a user needs to override a variable temporarily, create .aidp/overrides.yaml in the bundle folder and define the variable values there. AI Data Platform uses those values during the next deployment.
.aidp/
overrides.yamlvariables:
agent_topic_default: "tuesday"| File | Example Value | When Used |
|---|---|---|
aidp_workbench.yaml defaults
|
Oracle AI Data Platform | Used when no matching target or override file supplies the variable. |
aidp_workbench.yaml target dev |
AIDP Dev Workspace | Used when deploying to dev and no temporary override is present. |
.aidp/overrides.yaml |
tuesday | Used as a temporary value during the next deployment. |
Note:
Use.aidp/overrides.yaml for temporary deployment values. Keep durable defaults and environment-specific values in aidp_workbench.yaml so the bundle remains reproducible through Git.
Example: Agent Prompt Variable
For agent flow prompt text or tool definitions that support named placeholders, use double braces around the variable name.
Prompt text:
You are a demo assistant. For the given {{topic}}, generate 3 short bullet points explaining why it matters.
Tool parameter:
Name: /{{topic}}
Default value: sunday Note:
As a best practice, you should use variables for values that are expected to change across deployments. Avoid embedding environment-specific values directly into notebooks, jobs, or agent flow text when a variable can carry the value instead.Example: Workflow without Compute
You can create a bundle for a workflow that doesn't automatically create a compute cluster as part of deployment. First, create a variable in aidp_workbench.yaml:
defaults:
variables:
job_compute_key: "select_compute"jobs/ folder, locate the job file <JobName>.job.json. Edit the job file replace the "clusterKey" value with the new created variable:"clusterKey" : "${var.job_compute_key}",Bundle Variables and Credential Store (Preview)
You can use variables with the credential store when a bundled job or notebook needs to look up a secret at runtime.
Your variables should carry the credential name and token key. The actual secret value must stay in the target credential store and should not be committed to Git.
Example Workflow: Using Variables with Credential Store
- Create the credential and token key in credential store.
- Define variables for the credential name and token key.
- Pass those variables into the job or notebook as parameters.
- At runtime, the notebook reads the parameters and calls the credential API to retrieve the secret. If the credential name, token key, or permissions are wrong, the job can fail with a credential lookup error.
Note:
Do not document or commit secret values in bundle files. Bundle configuration should reference credential names, token keys, and target variables; the credential store remains the source of secret material.Example: Credential Name and Token Key Variables
bundle:
name: credentialVariableDemoBundle
resources:
jobs:
- credentialLookupJob
defaults:
variables:
cred_key: default_credential_name
token_key: default_token_key
targets:
dev:
workspace_key: dev_workspace
variables:
cred_key: dev_credential_store_entry
token_key: dev_token
qa:
workspace_key: qa_workspace
variables:
cred_key: qa_credential_store_entry
token_key: qa_token
prod:
workspace_key: prod_workspace
variables:
cred_key: prod_credential_store_entry
token_key: prod_token
jobs:
credentialLookupJob:
tasks:
- taskKey: Task_854239
parameters:
- name: cred_key
value: "${var.cred_key}"
- name: token_key
value: "${var.token_key}" The notebook reads the parameter values and uses them to look up the secret from the credential store:
cred_name = odiUtils.parameters.getParameter("cred_key", "defaultCredValue")
token_name = odiUtils.parameters.getParameter("token_key", "defaultTokenValue")
secret = aidpUtils.secrets.get(name=cred_name, key=token_name)
if secret:
print("Credential lookup succeeded")
else:
raise Exception("Credential lookup failed")| Environment | cred_key Value | token_key Value | Credential Store Requirement |
|---|---|---|---|
| dev | dev_credential_store_entry | dev_token | Create dev_credential_store_entry with key dev_token. |
| qa | qa_credential_store_entry | qa_token | Create qa_credential_store_entry with key qa_token. |
| prod | prod_credential_store_entry | prod_token | Create prod_credential_store_entry with key prod_token. |
Purge a Bundle (Preview)
You can purge a deployed bundle to remove the bundle resources from your workspace.
- Navigate to the bundle you want to purge resources for in your workspace.
- Click the Deployment tab.
- Click Purge.
- Enter Purge in the prompt. Click Purge.
Troubleshooting Bundles (Preview)
If you encounter problems when creating and managing Git bundles, check the following list of issues for potential solutions.
| Symptom | Likely Cause | Recommended Action |
|---|---|---|
| Create Bundle is unavailable or the bundle cannot be created. | The user is not in a Git folder, or lacks required workspace permissions. | Navigate to a Git folder and confirm the user can create workspace resources. |
| Sync completes, but another environment does not see the update. | The refreshed bundle files were not committed, pushed, or pulled into the target Git folder. | Commit and push from the source Git folder, then pull in the target workspace before deploying. |
| Deployment tab shows no deployed items. | The bundle has not been deployed yet, or deployment did not complete successfully. | Click Deploy and wait for the completion notification. Review logs if deployment fails. |
| Deployed job fails with a credential lookup error. | The target credential name, token key, or access permission does not match the bundle configuration. | Create the credential in the target credential store or update target variables before redeploying. |
| Agent flow deployment fails or starts with inactive compute. | The target environment may not have compatible AI compute, region, model, or dependency settings. | Review target overrides, compute status, model availability, and deployment logs. |
| Changes to a source notebook or agent flow are not reflected after deployment. | The bundle was deployed without first syncing from the updated source resource. | Run Sync on the bundle, commit and push the refreshed bundle files, pull them in the target, then deploy again. |