diff --git a/lib/manager/gitlabci/__fixtures__/gitlab-ci.6.yaml b/lib/manager/gitlabci/__fixtures__/gitlab-ci.6.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e3dc68bfe881d619b245463af3e4fe94a3006ef3
--- /dev/null
+++ b/lib/manager/gitlabci/__fixtures__/gitlab-ci.6.yaml
@@ -0,0 +1,11 @@
+image:
+  # comment
+  name: renovate/renovate:19.70.8-slim
+
+services:
+  # comment
+  - name: other/image1:1.0.0
+    alias: imagealias1
+  # another comment
+  - alias: imagealias2
+    name: other/image2:1.0.0
diff --git a/lib/manager/gitlabci/__snapshots__/extract.spec.ts.snap b/lib/manager/gitlabci/__snapshots__/extract.spec.ts.snap
index ebfa7c1717853fe462e5bb118ba67fe407c12bb1..138f50d667bb7e68a4765538f7f35fa9a98da75c 100644
--- a/lib/manager/gitlabci/__snapshots__/extract.spec.ts.snap
+++ b/lib/manager/gitlabci/__snapshots__/extract.spec.ts.snap
@@ -184,6 +184,43 @@ Array [
 ]
 `;
 
+exports[`manager/gitlabci/extract extractAllPackageFiles() extracts multiple named services 1`] = `
+Array [
+  Object {
+    "deps": Array [
+      Object {
+        "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
+        "currentDigest": undefined,
+        "currentValue": "19.70.8-slim",
+        "datasource": "docker",
+        "depName": "renovate/renovate",
+        "depType": "image-name",
+        "replaceString": "renovate/renovate:19.70.8-slim",
+      },
+      Object {
+        "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
+        "currentDigest": undefined,
+        "currentValue": "1.0.0",
+        "datasource": "docker",
+        "depName": "other/image1",
+        "depType": "service-image",
+        "replaceString": "other/image1:1.0.0",
+      },
+      Object {
+        "autoReplaceStringTemplate": "{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}",
+        "currentDigest": undefined,
+        "currentValue": "1.0.0",
+        "datasource": "docker",
+        "depName": "other/image2",
+        "depType": "service-image",
+        "replaceString": "other/image2:1.0.0",
+      },
+    ],
+    "packageFile": "lib/manager/gitlabci/__fixtures__/gitlab-ci.6.yaml",
+  },
+]
+`;
+
 exports[`manager/gitlabci/extract extractAllPackageFiles() extracts named services 1`] = `
 Array [
   Object {
diff --git a/lib/manager/gitlabci/extract.spec.ts b/lib/manager/gitlabci/extract.spec.ts
index ca18521d5c0a71700f5fe869afb560d9a2c20605..89f161453e0250399d66736641c6b69a08a13a47 100644
--- a/lib/manager/gitlabci/extract.spec.ts
+++ b/lib/manager/gitlabci/extract.spec.ts
@@ -51,6 +51,15 @@ describe('manager/gitlabci/extract', () => {
       expect(res[0].deps).toHaveLength(3);
     });
 
+    it('extracts multiple named services', async () => {
+      const res = await extractAllPackageFiles(config, [
+        'lib/manager/gitlabci/__fixtures__/gitlab-ci.6.yaml',
+      ]);
+      expect(res).toMatchSnapshot();
+      expect(res).toHaveLength(1);
+      expect(res[0].deps).toHaveLength(3);
+    });
+
     it('extracts multiple image lines', async () => {
       const res = await extractAllPackageFiles(config, [
         'lib/manager/gitlabci/__fixtures__/gitlab-ci.yaml',
diff --git a/lib/manager/gitlabci/extract.ts b/lib/manager/gitlabci/extract.ts
index 7fe6b85617dfe31c4a524d8c9e79b3172c75e704..af6b4e2026cd2e2d42fea4bcbfade7c204730a83 100644
--- a/lib/manager/gitlabci/extract.ts
+++ b/lib/manager/gitlabci/extract.ts
@@ -9,20 +9,24 @@ import type { GitlabPipeline } from './types';
 import { replaceReferenceTags } from './utils';
 
 const commentsRe = regEx(/^\s*#/);
+const aliasesRe = regEx(`^\\s*-?\\s*alias:`);
 const whitespaceRe = regEx(`^(?<whitespace>\\s*)`);
 const imageRe = regEx(
   `^(?<whitespace>\\s*)image:(?:\\s+['"]?(?<image>[^\\s'"]+)['"]?)?\\s*$`
 );
 const nameRe = regEx(`^\\s*name:\\s+['"]?(?<depName>[^\\s'"]+)['"]?\\s*$`);
 const serviceRe = regEx(
-  `^\\s*-\\s*(?:name:\\s+)?['"]?(?<depName>[^\\s'"]+)['"]?\\s*$`
+  `^\\s*-?\\s*(?:name:\\s+)?['"]?(?<depName>[^\\s'"]+)['"]?\\s*$`
 );
-function skipCommentLines(
+function skipCommentAndAliasLines(
   lines: string[],
   lineNumber: number
 ): { lineNumber: number; line: string } {
   let ln = lineNumber;
-  while (ln < lines.length - 1 && commentsRe.test(lines[ln])) {
+  while (
+    ln < lines.length - 1 &&
+    (commentsRe.test(lines[ln]) || aliasesRe.test(lines[ln]))
+  ) {
     ln += 1;
   }
   return { line: lines[ln], lineNumber: ln };
@@ -71,7 +75,10 @@ export function extractPackageFile(content: string): PackageFile | null {
         let foundImage: boolean;
         do {
           foundImage = false;
-          const serviceImageLine = skipCommentLines(lines, lineNumber + 1);
+          const serviceImageLine = skipCommentAndAliasLines(
+            lines,
+            lineNumber + 1
+          );
           logger.trace(`serviceImageLine: "${serviceImageLine.line}"`);
           const serviceImageMatch = serviceRe.exec(serviceImageLine.line);
           if (serviceImageMatch) {