Properties
service
string — required
Name of the job service to install.
environment
string — required
Target environment for this installation.
name
string — optional
Custom name for this installation. If not specified, uses the service name.
namespace
string — optional
Kubernetes namespace to install into. If not provided, uses the environment’s
default namespace, which has the same name as the environment. Cannot be
changed after install. See Namespaces.
releaseChannel
string — optional
Release channel to follow for this installation. If not specified, uses the
environment’s channel. Mutually exclusive with branch.
branch
string — optional
Branch to track for this installation. The service must have the branch listed
in build.branches. When set, the installation deploys whatever was last built
on that branch. Mutually exclusive with releaseChannel.
dependencies
array — optional
Installations that must be ready before this installation installs for the
first time. Ryvn holds the first install until every entry is satisfied. After
that, dependencies hold nothing: upgrades, configuration changes, and secret
rotations deploy even while a dependency is being reinstalled.
Each entry sets exactly one key:
Dependencies have no version bounds; version requirements belong in the
service’s release dependencies.
When this installation’s release depends on a service and
dependencies names
installations of that service, the release’s range is checked against the named
installations only. See
Installation dependencies.
You can name several installations of the same service. An entry can’t name
this installation, name its own service with service, repeat another entry,
sit beside a serviceInstallation entry of the same service, or form a cycle
with other installations’ dependencies. Installations created by a blueprint
take their dependencies from the blueprint; to set them directly, exclude the
installation from blueprint updates first. See
Installation Dependencies.
variableGroups
array — optional
List of variable group references to link to this installation. Each entry
references a variable group by name that must already exist in the target
environment. Variable groups provide shared sets of environment variables
across installations.
Every key in a linked group is injected as an environment variable with the
same name (via envFrom), so name group keys after the environment variables
your app reads. You don’t need secretKeyRef entries to consume them.
variableGroups[].name
string — required
Name of the variable group in the target environment.
env
array — optional
Environment variables for the job service. Each variable specifies whether it’s
a secret.
Ryvn also injects RYVN_RELEASE_VERSION automatically with the installation’s
release version. This value is managed by Ryvn.
env[].key
string — required
Environment variable name.
env[].isSecret
boolean — required
Whether this environment variable is a secret. If true, value must be set on the
platform when the blueprint is installed.
env[].value
string — conditional
Environment variable value. Cannot be set if isSecret is true.
env[].valueFromInput
object — optional
Reference to a blueprint input for the value. If the referenced input has a condition that evaluates to false, this environment variable is automatically omitted.
env[].valueFromOutput
object — optional
Reference to an output from a service installation or blueprint installation. Exactly one of serviceInstallation or blueprintInstallation must be specified.
Properties:
valueFromOutput to set a base env var and reference it with $(VAR) syntax in a subsequent variable. The referenced variable must appear earlier in the list:
config
string or array — optional
Service configuration. For jobs, this is the Helm chart values.yaml content.
Configure scheduling, concurrency, resources, and more.
config.image
object — optional
Container image configuration.
config.serviceAccount
object — optional
Service account configuration.
config.podAnnotations
object — optional
Kubernetes annotations for pods.
config.podLabels
object — optional
Kubernetes labels for pods.
config.podSecurityContext
object — optional
Security context for the pod.
config.securityContext
object — optional
Security context for the container.
config.schedule
string — optional
Cron schedule expression for the job. When omitted, the job is deployed as a
manual-only job that never runs automatically and can only be triggered via
the Run Now button in the UI or the trigger-job CLI command.
config.concurrencyPolicy
string — optional
How to handle concurrent executions. Valid values: Forbid, Allow, Replace.
Defaults to Forbid.
config.startingDeadlineSeconds
integer — optional
Time in seconds for starting the job if it misses scheduled time.
config.successfulJobsHistoryLimit
integer — optional
Number of successful job executions to keep. Defaults to 3.
config.failedJobsHistoryLimit
integer — optional
Number of failed job executions to keep. Defaults to 1.
config.suspend
boolean — optional
Suspend job scheduling. Defaults to false.
config.backoffLimit
integer — optional
Number of retries before considering a job as failed. Defaults to 1.
config.ttlSecondsAfterFinished
integer — optional
Time to live in seconds after job finishes before automatic cleanup.
config.labels
object — optional
Additional labels for the CronJob metadata.
config.annotations
object — optional
Additional annotations for the CronJob metadata.
config.restartPolicy
string — optional
Pod restart policy. Valid values: Never, OnFailure. Defaults to Never.
config.command
array — optional
Override container’s default entrypoint.
config.args
array — optional
Arguments to container’s entrypoint.
config.env
array — optional
Environment variables passed to the container (in addition to the
installation-level env field).
config.envFrom
array — optional
Environment variables from ConfigMaps or Secrets.
config.resources
object — optional
Container resource requests and limits.
config.volumes
array — optional
Additional volumes for the job.
config.volumeMounts
array — optional
Additional volume mounts for the container.
config.nodeSelector
object — optional
Node selector for pod scheduling.
config.tolerations
array — optional
Tolerations for pod scheduling.
config.affinity
object — optional
Affinity rules for pod scheduling.
resources
object — optional
Resource requirements for the service.
resources.cpuCores
number — required
Number of CPU cores. Can be fractional (e.g., 0.5, 1, 2).
resources.memoryMB
integer — required
Memory in megabytes. Must be a positive integer.
lifecycle
object — optional
Lifecycle hooks automatically trigger a job installation after the declaring
installation completes a lifecycle phase. Useful for release-phase work such
as running database migrations after an application or Terraform module has
been installed or upgraded.
HelmInstallV1, HelmUpgradeV1, HelmUpdateValuesV1,
HelmUpdateSecretsV1, or TerraformApplyV1 task completes successfully, Ryvn
auto-queues a HelmTriggerJobV1 run against the configured job for the matching
phase. Hook progress and failures are tracked separately from the parent
installation’s own operational status. Lifecycle-triggered runs are labeled
“Lifecycle hook job run” in the activity feed to distinguish them from manual
Run Now triggers.
lifecycle.postInstall
array — optional
Hooks to run after the installation’s first install completes successfully.
lifecycle.postInstall[].run
string — required
Name of the job ServiceInstallation to run when the phase fires. The
target must exist in the same environment as the declaring installation. Inside
a blueprint, template syntax is permitted and is resolved before the lifecycle
configuration is persisted.
lifecycle.postUpgrade
array — optional
Hooks to run after the installation’s upgrade completes successfully. Same
rules as postInstall.
lifecycle.postUpgrade[].run
string — required
Same semantics as lifecycle.postInstall[].run.
lifecycle.postUpdate
array — optional
Hooks to run after the installation’s config or secret update completes
successfully. Same rules as postInstall.
lifecycle.postUpdate[].run
string — required
Same semantics as lifecycle.postInstall[].run.