为GitLab私有化部署配置CI/CD流水线的完整教程

浅枫大大_4377

浅枫大大_4377

2026-10-13

114人浏览

原创

gitlab私有化部署后ci/cd默认不工作,因shared runners默认关闭且项目未启用ci/cd;需确保runner注册url与内网地址严格匹配、executor类型适配环境、.gitlab-ci.yml显式声明image和服务,并配置nginx支持websocket连接。

为gitlab私有化部署配置ci/cd流水线的完整教程

GitLab私有化部署后,CI/CD默认不工作

刚装完 GitLab Server 和 Runner,.gitlab-ci.yml 提交后流水线状态一直显示 pending 或直接不触发,不是配置写错了,而是两个关键开关没打开:Runner 未注册成功、项目未启用 CI/CD。私有化环境里,Shared runners 默认关闭,且 Runner 注册用的 URL 和 registration token 必须严格匹配 GitLab 实例的内网地址(比如 http://gitlab.internal:8080),不能填公网域名或 localhost。

检查步骤:

  • 进项目 Settings > CI/CD > Runners,确认 “Disable shared runners” 已勾选,下方列出的 Active Runners 数量 ≥1
  • 在 Runner 服务器上执行 sudo gitlab-runner verify,返回 Running in system-mode 且无报错
  • 查看 /etc/gitlab-runner/config.toml,确认 url 值与 GitLab Web 界面右下角 “Set up a specific runner manually” 中的 URL 完全一致(协议、端口、路径都不能差)

Runner 注册时选错 executor 类型会导致构建失败

私有化部署常见错误是注册 Runner 时盲目选 docker,结果在无 Docker 的 CentOS 7 服务器上卡在 Preparing environment。executor 类型必须和实际运行环境匹配:

  • shell:适合简单脚本、Node.js/Python 项目,无需容器,但隔离性差,多个 job 可能互相污染环境
  • docker:需宿主机已安装 Docker,推荐配合 docker:dind 使用;注意内核参数 vm.max_map_count 和 net.ipv4.ip_forward 必须开启
  • ssh:适合已有稳定测试机集群的场景,但密钥管理复杂,调试困难

金融类项目常用 docker+privileged 模式跑 SonarQube 扫描,但医疗系统因合规要求禁用特权容器,就得切回 shell + 预装 JDK/Maven 的方式。

.gitlab-ci.yml 在私有化环境要显式声明 image 和 services

公有云 GitLab 默认提供 ruby:2.7 等基础镜像,私有化部署的 Runner 不自带任何运行时。不写 image: 就会报错 command not found: npm 或 java: command not found。

Github Auto
Github Auto

管PR、盯Issue、跑CI、发Release——GitHub仓库日常运维扔给它。少开几个Chrome标签页。

下载

典型写法示例:

stages:
  - build
  - test
<p>build-job:
stage: build
image: node:18-alpine
script:</p>
  • npm ci
  • npm run build artifacts: paths:
    • dist/

test-job: stage: test image: python:3.9-slim services:

  • redis:alpine script:
  • pip install pytest
  • pytest tests/

    注意点:

    • image 必须是私有 Registry 可拉取的镜像;若用 Docker Hub,需在 Runner 配置中加 pull_policy = "if-not-present" 避免每次重建缓存
    • services 仅对当前 job 生效,跨 job 不共享;Redis/PostgreSQL 等服务启动后,连接地址固定为 redis / postgres,不用写 IP
    • Java 项目建议用 maven:3.9-openjdk-17 而非 openjdk:17,避免手动装 Maven

流水线卡在 “Waiting for a runner” 通常是网络或权限问题

私有化环境下最隐蔽的问题:Runner 服务器能 ping 通 GitLab,但无法反向建立 WebSocket 连接,导致状态始终为 waiting_for_runner。根本原因常是防火墙或反向代理配置遗漏。

  • GitLab Server 的 Nginx 配置中,必须包含 proxy_http_version 1.1 和 proxy_set_header Upgrade $http_upgrade,否则 Runner 注册握手失败
  • Runner 服务器出方向需放行 GitLab Server 的 443/80 端口,且不能被企业级 WAF 拦截 Connection: upgrade 请求头
  • 若 Runner 和 GitLab 分属不同 VLAN,需确认二层互通;某些银行环境要求 Runner 必须和 GitLab 在同一安全域,否则即使端口通也无法注册

验证方法:在 Runner 服务器执行 curl -v https://gitlab.internal/api/v4/runners/status,HTTP 200 且响应体含 "online":true 才算真正就绪。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

git gitlab

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 单元测试
Java 单元测试

本专题聚焦 Java 在软件测试与持续集成流程中的实战应用,系统讲解 JUnit 单元测试框架、Mock 数据、集成测试、代码覆盖率分析、Maven 测试配置、CI/CD 流水线搭建(Jenkins、GitHub Actions)等关键内容。通过实战案例(如企业级项目自动化测试、持续交付流程搭建),帮助学习者掌握 Java 项目质量保障与自动化交付的完整体系。

2025.10.24

1066

26

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

2026.10.10

80

15

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

2026.10.10

40

15

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

2026.10.10

20

15

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

2026.10.10

40

26

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

2026.10.10

20

32

C++构造函数定义与调用方法
C++构造函数定义与调用方法

C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

2026.10.10

40

16

Kratos框架零基础入门教程
Kratos框架零基础入门教程

本专题整理Kratos框架入门内容,涵盖Go环境准备、kratos CLI安装升级、new命令创建项目、目录结构分层说明、服务启动与双协议端口、依赖下载报错排查,帮助开发者快速跑通第一个Kratos框架微服务应用。

2026.10.10

20

15

C++条件判断语句怎么写
C++条件判断语句怎么写

C++条件判断是控制程序执行流程的重要基础。本专题介绍if、if-else、else if和switch等常见分支语句,结合条件表达式、比较运算符与代码示例,帮助初学者掌握不同场景下的判断逻辑。

2026.10.10

20

13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.9万人学习