diff --git a/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap b/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap
index 53bd016a64ee3ccd8d0f56a762bcc5239760aa7a..b29ab6b050a5575892f85c0527e88fb3156dc95e 100644
--- a/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap
+++ b/lib/manager/helmv3/__snapshots__/artifacts.spec.ts.snap
@@ -151,3 +151,123 @@ Array [
   },
 ]
 `;
+
+exports[`manager/helmv3/artifacts sets repositories from aliases 1`] = `
+Array [
+  Object {
+    "file": Object {
+      "contents": "New Chart.lock",
+      "name": "Chart.lock",
+    },
+  },
+]
+`;
+
+exports[`manager/helmv3/artifacts sets repositories from aliases 2`] = `
+Array [
+  Object {
+    "cmd": "helm repo add stable the_stable_url",
+    "options": Object {
+      "cwd": "/tmp/github/some/repo",
+      "encoding": "utf-8",
+      "env": Object {
+        "HELM_EXPERIMENTAL_OCI": "1",
+        "HOME": "/home/user",
+        "HTTPS_PROXY": "https://example.com",
+        "HTTP_PROXY": "http://example.com",
+        "LANG": "en_US.UTF-8",
+        "LC_ALL": "en_US",
+        "NO_PROXY": "localhost",
+        "PATH": "/tmp/path",
+      },
+      "maxBuffer": 10485760,
+      "timeout": 900000,
+    },
+  },
+  Object {
+    "cmd": "helm repo add repo1 the_repo1_url",
+    "options": Object {
+      "cwd": "/tmp/github/some/repo",
+      "encoding": "utf-8",
+      "env": Object {
+        "HELM_EXPERIMENTAL_OCI": "1",
+        "HOME": "/home/user",
+        "HTTPS_PROXY": "https://example.com",
+        "HTTP_PROXY": "http://example.com",
+        "LANG": "en_US.UTF-8",
+        "LC_ALL": "en_US",
+        "NO_PROXY": "localhost",
+        "PATH": "/tmp/path",
+      },
+      "maxBuffer": 10485760,
+      "timeout": 900000,
+    },
+  },
+  Object {
+    "cmd": "helm dependency update ''",
+    "options": Object {
+      "cwd": "/tmp/github/some/repo",
+      "encoding": "utf-8",
+      "env": Object {
+        "HELM_EXPERIMENTAL_OCI": "1",
+        "HOME": "/home/user",
+        "HTTPS_PROXY": "https://example.com",
+        "HTTP_PROXY": "http://example.com",
+        "LANG": "en_US.UTF-8",
+        "LC_ALL": "en_US",
+        "NO_PROXY": "localhost",
+        "PATH": "/tmp/path",
+      },
+      "maxBuffer": 10485760,
+      "timeout": 900000,
+    },
+  },
+]
+`;
+
+exports[`manager/helmv3/artifacts sets repositories from aliases with docker 1`] = `
+Array [
+  Object {
+    "file": Object {
+      "contents": "New Chart.lock",
+      "name": "Chart.lock",
+    },
+  },
+]
+`;
+
+exports[`manager/helmv3/artifacts sets repositories from aliases with docker 2`] = `
+Array [
+  Object {
+    "cmd": "docker pull renovate/helm",
+    "options": Object {
+      "encoding": "utf-8",
+    },
+  },
+  Object {
+    "cmd": "docker ps --filter name=renovate_helm -aq",
+    "options": Object {
+      "encoding": "utf-8",
+    },
+  },
+  Object {
+    "cmd": "docker run --rm --name=renovate_helm --label=renovate_child -v \\"/tmp/github/some/repo\\":\\"/tmp/github/some/repo\\" -e HELM_EXPERIMENTAL_OCI -w \\"/tmp/github/some/repo\\" renovate/helm bash -l -c \\"helm repo add stable the_stable_url && helm repo add repo1 the_repo1_url && helm dependency update ''\\"",
+    "options": Object {
+      "cwd": "/tmp/github/some/repo",
+      "encoding": "utf-8",
+      "env": Object {
+        "HELM_EXPERIMENTAL_OCI": "1",
+        "HOME": "/home/user",
+        "HTTPS_PROXY": "https://example.com",
+        "HTTP_PROXY": "http://example.com",
+        "LANG": "en_US.UTF-8",
+        "LC_ALL": "en_US",
+        "NO_PROXY": "localhost",
+        "PATH": "/tmp/path",
+      },
+      "maxBuffer": 10485760,
+      "timeout": 900000,
+    },
+  },
+]
+`;
diff --git a/lib/manager/helmv3/artifacts.spec.ts b/lib/manager/helmv3/artifacts.spec.ts
index 7a2bea14b2467fb13ad81f70c756e94aa9f211cc..8b753abadef7543080c8be9b6758437b6d8045d4 100644
--- a/lib/manager/helmv3/artifacts.spec.ts
+++ b/lib/manager/helmv3/artifacts.spec.ts
@@ -148,4 +148,47 @@ describe('manager/helmv3/artifacts', () => {
       },
     ]);
   });
+
+  it('sets repositories from aliases', async () => {
+    fs.readFile.mockResolvedValueOnce('Old Chart.lock' as never);
+    const execSnapshots = mockExecAll(exec);
+    fs.readFile.mockResolvedValueOnce('New Chart.lock' as never);
+    expect(
+      await helmv3.updateArtifacts({
+        packageFileName: 'Chart.yaml',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          updateType: 'lockFileMaintenance',
+          aliases: { stable: 'the_stable_url', repo1: 'the_repo1_url' },
+        },
+      })
+    ).toMatchSnapshot([
+      { file: { contents: 'New Chart.lock', name: 'Chart.lock' } },
+    ]);
+    expect(execSnapshots).toMatchSnapshot();
+  });
+
+  it('sets repositories from aliases with docker', async () => {
+    setGlobalConfig({ ...adminConfig, binarySource: 'docker' });
+    fs.readFile.mockResolvedValueOnce('Old Chart.lock' as never);
+    const execSnapshots = mockExecAll(exec);
+    fs.readFile.mockResolvedValueOnce('New Chart.lock' as never);
+    expect(
+      await helmv3.updateArtifacts({
+        packageFileName: 'Chart.yaml',
+        updatedDeps: [],
+        newPackageFileContent: '{}',
+        config: {
+          ...config,
+          updateType: 'lockFileMaintenance',
+          aliases: { stable: 'the_stable_url', repo1: 'the_repo1_url' },
+        },
+      })
+    ).toMatchSnapshot([
+      { file: { contents: 'New Chart.lock', name: 'Chart.lock' } },
+    ]);
+    expect(execSnapshots).toMatchSnapshot();
+  });
 });
diff --git a/lib/manager/helmv3/artifacts.ts b/lib/manager/helmv3/artifacts.ts
index 3414afa6c3d102c315e109c43e54f063c8ef31a3..08194441f6ee4d8c0fe7ea9246f22614694d6ed8 100644
--- a/lib/manager/helmv3/artifacts.ts
+++ b/lib/manager/helmv3/artifacts.ts
@@ -10,9 +10,10 @@ import {
 } from '../../util/fs';
 import type { UpdateArtifact, UpdateArtifactsResult } from '../types';
 
-async function helmUpdate(manifestPath: string): Promise<void> {
-  const cmd = `helm dependency update ${quote(getSubDirectory(manifestPath))}`;
-
+async function helmCommands(
+  manifestPath: string,
+  aliases?: Record<string, string>
+): Promise<void> {
   const execOptions: ExecOptions = {
     docker: {
       image: 'helm',
@@ -21,6 +22,15 @@ async function helmUpdate(manifestPath: string): Promise<void> {
       HELM_EXPERIMENTAL_OCI: '1',
     },
   };
+  const cmd = [];
+
+  if (aliases) {
+    Object.entries(aliases).forEach(([alias, url]) =>
+      cmd.push(`helm repo add ${quote(alias)} ${quote(url)}`)
+    );
+  }
+  cmd.push(`helm dependency update ${quote(getSubDirectory(manifestPath))}`);
+
   await exec(cmd, execOptions);
 }
 
@@ -51,7 +61,7 @@ export async function updateArtifacts({
   try {
     await writeLocalFile(packageFileName, newPackageFileContent);
     logger.debug('Updating ' + lockFileName);
-    await helmUpdate(packageFileName);
+    await helmCommands(packageFileName, config.aliases);
     logger.debug('Returning updated Chart.lock');
     const newHelmLockContent = await readLocalFile(lockFileName);
     if (existingLockFileContent === newHelmLockContent) {
diff --git a/lib/manager/types.ts b/lib/manager/types.ts
index 311ad5e49286a2f7d4f46e532f24d2580af0fdc6..baddd9bc1fe8b4aeeccd75f04fadd3612cef3159 100644
--- a/lib/manager/types.ts
+++ b/lib/manager/types.ts
@@ -49,6 +49,7 @@ export interface UpdateArtifactsConfig {
   newValue?: string;
   newVersion?: string;
   newMajor?: number;
+  aliases?: Record<string, string>;
 }
 
 export interface RangeConfig<T = Record<string, any>> extends ManagerData<T> {