diff --git a/lib/modules/manager/azure-pipelines/extract.ts b/lib/modules/manager/azure-pipelines/extract.ts
index dbb80ac654aaca06d17b782e37690dbd5512b0aa..50cfc49fc4073fc28adf1da4c422742d30b6a336 100644
--- a/lib/modules/manager/azure-pipelines/extract.ts
+++ b/lib/modules/manager/azure-pipelines/extract.ts
@@ -1,5 +1,6 @@
 import { load } from 'js-yaml';
 import { logger } from '../../../logger';
+import { coerceArray } from '../../../util/array';
 import { regEx } from '../../../util/regex';
 import { AzurePipelinesTasksDatasource } from '../../datasource/azure-pipelines-tasks';
 import { GitTagsDatasource } from '../../datasource/git-tags';
@@ -93,23 +94,23 @@ export function extractPackageFile(
     return null;
   }
 
-  for (const repository of pkg.resources?.repositories ?? []) {
+  for (const repository of coerceArray(pkg.resources?.repositories)) {
     const dep = extractRepository(repository);
     if (dep) {
       deps.push(dep);
     }
   }
 
-  for (const container of pkg.resources?.containers ?? []) {
+  for (const container of coerceArray(pkg.resources?.containers)) {
     const dep = extractContainer(container);
     if (dep) {
       deps.push(dep);
     }
   }
 
-  for (const { jobs } of pkg.stages ?? []) {
-    for (const { steps } of jobs ?? []) {
-      for (const step of steps ?? []) {
+  for (const { jobs } of coerceArray(pkg.stages)) {
+    for (const { steps } of coerceArray(jobs)) {
+      for (const step of coerceArray(steps)) {
         const task = extractAzurePipelinesTasks(step.task);
         if (task) {
           deps.push(task);
@@ -118,8 +119,8 @@ export function extractPackageFile(
     }
   }
 
-  for (const { steps } of pkg.jobs ?? []) {
-    for (const step of steps ?? []) {
+  for (const { steps } of coerceArray(pkg.jobs)) {
+    for (const step of coerceArray(steps)) {
       const task = extractAzurePipelinesTasks(step.task);
       if (task) {
         deps.push(task);
@@ -127,7 +128,7 @@ export function extractPackageFile(
     }
   }
 
-  for (const step of pkg.steps ?? []) {
+  for (const step of coerceArray(pkg.steps)) {
     const task = extractAzurePipelinesTasks(step.task);
     if (task) {
       deps.push(task);
diff --git a/lib/modules/manager/jsonnet-bundler/extract.ts b/lib/modules/manager/jsonnet-bundler/extract.ts
index e0b135538cc656c4cc6c4c858fa61a036e7b9a4d..0907faff28cbc78ffb1baf8a0555d735c5dac508 100644
--- a/lib/modules/manager/jsonnet-bundler/extract.ts
+++ b/lib/modules/manager/jsonnet-bundler/extract.ts
@@ -1,4 +1,5 @@
 import { logger } from '../../../logger';
+import { coerceArray } from '../../../util/array';
 import { regEx } from '../../../util/regex';
 import type { PackageDependency, PackageFile } from '../types';
 import type { Dependency, JsonnetFile } from './types';
@@ -26,7 +27,7 @@ export function extractPackageFile(
     return null;
   }
 
-  for (const dependency of jsonnetFile.dependencies ?? []) {
+  for (const dependency of coerceArray(jsonnetFile.dependencies)) {
     const dep = extractDependency(dependency);
     if (dep) {
       deps.push(dep);
diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts
index 25f6509bd33ed34175e691e5d8aedc58cee2424a..a80836473bfee3629eede89de7f4326948e08540 100644
--- a/lib/modules/manager/kustomize/extract.ts
+++ b/lib/modules/manager/kustomize/extract.ts
@@ -1,6 +1,7 @@
 import is from '@sindresorhus/is';
 import { load } from 'js-yaml';
 import { logger } from '../../../logger';
+import { coerceArray } from '../../../util/array';
 import { regEx } from '../../../util/regex';
 import { DockerDatasource } from '../../datasource/docker';
 import { GitTagsDatasource } from '../../datasource/git-tags';
@@ -154,7 +155,7 @@ export function extractPackageFile(content: string): PackageFile | null {
   }
 
   // grab the remote bases
-  for (const base of pkg.bases ?? []) {
+  for (const base of coerceArray(pkg.bases)) {
     const dep = extractResource(base);
     if (dep) {
       deps.push({
@@ -165,7 +166,7 @@ export function extractPackageFile(content: string): PackageFile | null {
   }
 
   // grab the remote resources
-  for (const resource of pkg.resources ?? []) {
+  for (const resource of coerceArray(pkg.resources)) {
     const dep = extractResource(resource);
     if (dep) {
       deps.push({
@@ -176,7 +177,7 @@ export function extractPackageFile(content: string): PackageFile | null {
   }
 
   // grab the remote components
-  for (const component of pkg.components ?? []) {
+  for (const component of coerceArray(pkg.components)) {
     const dep = extractResource(component);
     if (dep) {
       deps.push({
@@ -187,7 +188,7 @@ export function extractPackageFile(content: string): PackageFile | null {
   }
 
   // grab the image tags
-  for (const image of pkg.images ?? []) {
+  for (const image of coerceArray(pkg.images)) {
     const dep = extractImage(image);
     if (dep) {
       deps.push({
@@ -198,7 +199,7 @@ export function extractPackageFile(content: string): PackageFile | null {
   }
 
   // grab the helm charts
-  for (const helmChart of pkg.helmCharts ?? []) {
+  for (const helmChart of coerceArray(pkg.helmCharts)) {
     const dep = extractHelmChart(helmChart);
     if (dep) {
       deps.push({
diff --git a/lib/modules/manager/tekton/extract.ts b/lib/modules/manager/tekton/extract.ts
index 27832cff23f28d21175e0ef884ac0e6fa7b5f171..c1bec54fe79f966aa500291cae6f152f989fae10 100644
--- a/lib/modules/manager/tekton/extract.ts
+++ b/lib/modules/manager/tekton/extract.ts
@@ -1,6 +1,7 @@
 import is from '@sindresorhus/is';
 import { loadAll } from 'js-yaml';
 import { logger } from '../../../logger';
+import { coerceArray } from '../../../util/array';
 import { getDep } from '../dockerfile/extract';
 import type { PackageDependency, PackageFile } from '../types';
 import type { TektonBundle, TektonResource } from './types';
@@ -43,18 +44,18 @@ function getDeps(doc: TektonResource): PackageDependency[] {
   addDep(doc.spec?.pipelineRef, deps);
 
   // Handle Pipeline resource
-  for (const task of doc.spec?.tasks ?? []) {
+  for (const task of coerceArray(doc.spec?.tasks)) {
     addDep(task.taskRef, deps);
   }
 
   // Handle TriggerTemplate resource
-  for (const resource of doc.spec?.resourcetemplates ?? []) {
+  for (const resource of coerceArray(doc.spec?.resourcetemplates)) {
     addDep(resource?.spec?.taskRef, deps);
     addDep(resource?.spec?.pipelineRef, deps);
   }
 
   // Handle list of TektonResources
-  for (const item of doc.items ?? []) {
+  for (const item of coerceArray(doc.items)) {
     deps.push(...getDeps(item));
   }
 
@@ -68,7 +69,7 @@ function addDep(ref: TektonBundle, deps: PackageDependency[]): void {
   let imageRef: string | undefined;
   // Find a bundle reference from the Bundle resolver
   if (ref.resolver === 'bundles') {
-    for (const field of ref.resource ?? []) {
+    for (const field of coerceArray(ref.resource)) {
       if (field.name === 'bundle') {
         imageRef = field.value;
         break;
diff --git a/lib/modules/manager/velaci/extract.ts b/lib/modules/manager/velaci/extract.ts
index 05fa1279b1853e549dbfbaef20509bb023226a84..04c4087773802da6fab093ccb602ba622cacc220 100644
--- a/lib/modules/manager/velaci/extract.ts
+++ b/lib/modules/manager/velaci/extract.ts
@@ -1,5 +1,6 @@
 import { load } from 'js-yaml';
 import { logger } from '../../../logger';
+import { coerceArray } from '../../../util/array';
 import { getDep } from '../dockerfile/extract';
 import type { PackageDependency, PackageFile } from '../types';
 import type { VelaPipelineConfiguration } from './types';
@@ -17,14 +18,14 @@ export function extractPackageFile(file: string): PackageFile | null {
   const deps: PackageDependency[] = [];
 
   // iterate over steps
-  for (const step of doc.steps ?? []) {
+  for (const step of coerceArray(doc.steps)) {
     const dep = getDep(step.image);
 
     deps.push(dep);
   }
 
   // iterate over services
-  for (const service of doc.services ?? []) {
+  for (const service of coerceArray(doc.services)) {
     const dep = getDep(service.image);
 
     deps.push(dep);
@@ -32,7 +33,7 @@ export function extractPackageFile(file: string): PackageFile | null {
 
   // iterate over stages
   for (const stage of Object.values(doc.stages ?? {})) {
-    for (const step of stage.steps ?? []) {
+    for (const step of coerceArray(stage.steps)) {
       const dep = getDep(step.image);
 
       deps.push(dep);
diff --git a/lib/util/array.ts b/lib/util/array.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e5998cf29f847b275aa5f2e7fbe93d877ad95175
--- /dev/null
+++ b/lib/util/array.ts
@@ -0,0 +1,8 @@
+import is from '@sindresorhus/is';
+
+export function coerceArray<T>(input: T[] | null | undefined): T[] {
+  if (is.array(input)) {
+    return input;
+  }
+  return [];
+}