typora/note/devops/gitlab/gitlab 架构.md
2024-12-12 10:48:55 +08:00

417 lines
24 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [原文](https://chegva.com/3229.html)
# [CHEGVA](https://chegva.com/ "CHEGVA")
## 让我们面对现实 让我们忠于理想
- [😺 关于我](https://chegva.com/an/)
- [👧 我的崽崽](https://chegva.com/yaya/)
- [✪ 切·格瓦拉与自由精神](https://chegva.com/chegva/)
- [🌈 每日诗文](https://chegva.com/poem_article/)
- [📣 说说动态](https://chegva.com/anzhihe/)
- [☕ 博客时光](https://chegva.com/archive/)
- [🤖 站点地图](https://chegva.com/sitemap-html/)
- [📸 照片墙](https://chegva.com/album/)
- [🎶 音乐墙](https://chegva.com/music/)
- [🎮 轻松一下](https://chegva.com/gameoflife/)
- [💌 给我留言](https://chegva.com/contact/)
### ⛳ 公众号
### ✈ 找一找
### ☰ 分类目录
- [linux相关](https://chegva.com/linux/) (22)
- [操作系统](https://chegva.com/system/) (24)
- [常用工具](https://chegva.com/tools/) (55)
- [存储技术](https://chegva.com/storage/) (23)
- [网络技术](https://chegva.com/network/) (49)
- [DNS与IPv6实战](https://chegva.com/dns_ipv6/) (11)
- [数据库](https://chegva.com/database/) (23)
- [编程学习](https://chegva.com/program/) (20)
- [Shell编程](https://chegva.com/shell/) (48)
- [Python开发](https://chegva.com/python/) (136)
- [Go语言学习](https://chegva.com/golang/) (15)
- [Java学习](https://chegva.com/java/) (14)
- [Web前端](https://chegva.com/frontend/) (35)
- [HTTP与WEB服务](https://chegva.com/http_webservice/) (28)
- [SaltStack实战](https://chegva.com/saltstack/) (8)
- [虚拟化与云计算](https://chegva.com/calculate/) (11)
- [OpenStack实战](https://chegva.com/openstack/) (19)
- [Docker容器技术](https://chegva.com/docker/) (21)
- [Kubernetes & 云原生](https://chegva.com/k8s_cloudnative/) (18)
- [持续集成交付(CI/CD)](https://chegva.com/continuous-integration/) (32)
- [日志服务实战](https://chegva.com/logservice/) (12)
- [Zabbix监控体系](https://chegva.com/zabbix-monitor/) (19)
- [软件测试](https://chegva.com/test/) (7)
- [安全防护](https://chegva.com/security/) (16)
- [性能优化及排错](https://chegva.com/optimize/) (36)
- [高效工作](https://chegva.com/work/) (53)
- [个人随笔](https://chegva.com/essay/) (43)
- [人生感悟](https://chegva.com/life/) (25)
- [我的崽崽](https://chegva.com/mybaby/) (27)
- [志合的诗](https://chegva.com/zhihe-poem/) (40)
- [儒释道禅](https://chegva.com/philosophy/) (43)
- [大哉周易](https://chegva.com/yijing/) (33)
- [天命无算](https://chegva.com/destiny/) (11)
- [历史科学趣闻](https://chegva.com/history_science/) (29)
- [读书笔记](https://chegva.com/read/) (33)
- [电影动漫](https://chegva.com/movie/) (56)
- [诗歌分享](https://chegva.com/poem/) (40)
- [美文分享](https://chegva.com/share/) (40)
- [资源分享](https://chegva.com/resource/) (24)
- [游戏分享](https://chegva.com/game/) (28)
- [公益讲座](https://chegva.com/lecture/) (9)
### ✎ 近期文章
- [游戏里的无聊人生(4)——抢榜](https://chegva.com/5731.html)
- [运维工作核心关注点与运维军规](https://chegva.com/5727.html)
- [ubuntun 网络设置](https://chegva.com/5720.html)
- [游戏里的无聊人生(3)——合区](https://chegva.com/5717.html)
- [Docker格式化命令输出](https://chegva.com/5716.html)
- [游戏里的无聊人生(2)——魔神](https://chegva.com/5715.html)
- [游戏里的无聊人生(1)——开篇](https://chegva.com/5714.html)
- [王小波经典语录名句精选](https://chegva.com/5711.html)
- [Python虚拟环境(4)—pipenv使用](https://chegva.com/5700.html)
- [ChatGPT资料汇总学习](https://chegva.com/5694.html)
### ♚ 大家正在看
- [Vue.js 在线挑战平台](https://chegva.com/5375.html "Vue.js 在线挑战平台") \- 1,406 views
- [达摩禅师全集(悟性论、血脉论、破相论、四行观)](https://chegva.com/2605.html "达摩禅师全集(悟性论、血脉论、破相论、四行观)") \- 623 views
- [跟我一起写Makefile (PDF重制版)](https://chegva.com/3761.html "跟我一起写Makefile (PDF重制版)") \- 614 views
- [暗黑破坏神系列剧情全集](https://chegva.com/5408.html "暗黑破坏神系列剧情全集") \- 519 views
- [中国古代著名关隘大全](https://chegva.com/4028.html "中国古代著名关隘大全") \- 366 views
- [劝学网](https://chegva.com/1092.html "劝学网") \- 354 views
- [《星际争霸》快捷键及操作指南技巧](https://chegva.com/2471.html "《星际争霸》快捷键及操作指南技巧") \- 353 views
- [Gitlab更改项目的owner](https://chegva.com/3375.html "Gitlab更改项目的owner") \- 294 views
- [星际争霸官方小说全集下载](https://chegva.com/3221.html "星际争霸官方小说全集下载") \- 273 views
- [关闭浏览器自带的 WebRTC 功能,防止暴露真实ip](https://chegva.com/3338.html "关闭浏览器自带的 WebRTC 功能,防止暴露真实ip") \- 271 views
- [IPv6实战—— IPv6 Header详解](https://chegva.com/3298.html "IPv6实战—— IPv6 Header详解") \- 222 views
- [GitLab实战三——Gitlab架构组件详解](https://chegva.com/3229.html "GitLab实战三——Gitlab架构组件详解") \- 210 views
### ⛅ 标签云
### ☘ 随机文章
### ☯ 传统文化
### ⌚ 博客统计
### ☺ 近期评论
### ♡ 友情链接
# GitLab实战三——Gitlab架构组件详解
[2019年1月14日](https://chegva.com/3229.html) by [anzhihe](https://chegva.com/author/anzhihe/)·[0评论](https://chegva.com/3229.html#respond) · 13,720 人阅读 · 隐藏边栏
## 1.[Gitlab](https://chegva.com/tag/gitlab/ "View all posts in Gitlab")架构
> GitLab有两个软件发行版开源社区版CE和企业版EE。新版本的GitLab在稳定的分支机构中发布主分支用于前沿开发。新版本通常与GitLab CE版本大致同时发布除非有重要的安全更新。Gitlab生态现在主要由以下三大模块组成
[![GitLab实战三——Gitlab架构组件详解](https://cdn.chegva.com/ueditor/php/upload/image/20181217/1545034474333344.png "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/ueditor/php/upload/image/20181217/1545034474333344.png "1545034474333344.png")
#### **官方架构图:**
[![GitLab实战三——Gitlab架构组件详解](https://cdn.chegva.com/ueditor/php/upload/image/20181217/1545034504273781.png "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/ueditor/php/upload/image/20181217/1545034504273781.png "1545034504273781.png")<img width="294" height="28" src="../../_resources/spacer_23c0cdccfe53417ab9137b55990fbf8b.gif"/>](https://cdn.chegva.com/wp-content/plugins/Ueditor/ueditor/themes/default/images/spacer.gif)
Gitlab通常安装在`GNU/Linux`上。使用`Nignx`或`Apache` 作为Web前端将请求代理到`Unicorn Web` 服务器默认情况下Unicorn和前端通过Unix套接字来通信也支持使用TCP来转发请求。Web前端访问`/home/git/gitlab/public` 绕过Unicorn服务器以提供静态页面上传例如头像图片或附件和预编译资源。 GitLab使用Unicorn Web服务器提供网页和 [GitLab API](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/doc/api)。使用`Sidekiq`作为作业队列而后者又使用redis作为作业信息元数据和传入作业的非持久数据库后端。
Gitlab 应用程序使用 `MySQL``PostgreSQL` 作为持久数据库用来保存用户权限issue其他元数据等 git repository 默认存储在 `/home/git/repositories` 中,保留默认分支和 hooks 信息。
当通过 HTTP/HTTPS 提供 repository 时GitLab 使用 GitLab API 来解析授权和访问以及提供 git 对象。
`gitlab-shell` 通过 SSH 提供 repository。它管理 `/home/git/.ssh/authorized_keys` 内的 SSH 密钥不应手动编辑。gitlab-shell 通过 Gitaly 访问 bare repository 以提供 git 对象并与 redis 进行通信以向 Sidekiq 提交作业以供 GitLab 处理。gitlab-shell 查询 GitLab API 以确定授权和访问。
`Gitaly` 从 gitlab-shell 和 GitLab web 应用中获取操作命令,执行 git 操作,并为 GitLab web 应用程序提供 API 以从 git 获取属性(例如 titlebranchestags其他元数据和 blob例如 diffscommits files
Gitlab的生产架构可以[参考这里](https://about.gitlab.com/handbook/engineering/infrastructure/production-architecture/)。
#### **Gitlab组件**
- `repository`:代码库,可以是硬盘或 分布式文件系统
- `Nginx`Web 入口
- `gitlab-workhorse`轻量级反向代理服务器可以处理一些大的HTTP请求磁盘上的 CSS、JS 文件、文件上传下载等),处理 Git Push/Pull 请求处理到Rails 的连接会反向代理给后端的unicorn修改由 Rails 发送的响应或发送给 Rails 的请求,管理 Rails 的长期 WebSocket 连接等)。
- `gitlab-shell`:用于 SSH 交互,而不是 HTTP。gitlab-shell 通过 Redis 与 Sidekiq 进行通信,并直接或通过 TCP 间接访问 Unicorn。用于处理Git命令和修改authorized keys列表
- `Unicorn`Gitlab 自身的 Web 服务器(Ruby Web Server),包含了 Gitlab 主进程,负责处理快速/一般任务,与 Redis 一起工作,配置参考:`CPU核心数 + 1 = unicorn workers数量`。工作内容包括:
- 通过检查存储在 Redis 中的用户会话来检查权限
- 为 Sidekiq 制作任务
- 从仓库warehouse取东西或在那里移动东西
- `Redis`缓存每个客户端的sessions和后台队列负责分发任务。Redis需求的存储空间很小大约每个用户25KB
- `Gitaly`:后台服务,专门负责访问磁盘以高效处理 gitlab-shell 和 gitlab-workhorse 的git 操作,并缓存耗时操作。所有的 git 操作都通过 Gitaly 处理,并向 GitLab web 应用程序提供一个 API以从 git例如 title, branches, tags, other meta data获取属性并获取 blob例如 diffscommitsfiles
- `Sidekiq`后台核心服务可以从redis队列中提取作业并对其进行处理。后台作业允许GitLab通过将工作移至后台来提供更快的请求/响应周期。Sidekiq任务需要来自Redis
- `数据库PostgreSQL/MySQL`:包含以下信息:
- repository 中的数据元数据issue合并请求 merge request 等)
- 可以登录 Web 的用户(权限)
- `mail_room`:处理邮件请求。回复 GitLab 发出的邮件时GitLab 会调用此服务处理Sidekiq、Unicorn 和 GitLab-shell 的任务
- `logrotate`:日志文件管理,切割
#### **Gitlab-shell组件**
GitLab Shell 的作用:`处理 Git 命令`、`修改 authorized keys 列表`。GitLab Shell 不是 Unix shell也不是 Bash 或 Zsh 的替代品。早期的 gitlab-shell 的实现方式为 gitolite。
当通过 `SSH` 访问 GitLab Server 时GitLab Shell 会:
- 限制执行预定义好的Git命令git push, git pull
- 调用 GitLab Rails API检查用户权限
- 执行 pre-receive 钩子(在 GitLab 企业版中叫做 Git 钩子)
- 执行你请求的动作
- 处理 GitLab 的 post-receive 动作
- 处理自定义的 post-receive 动作
git pull over ssh  - > gitlab-shell  - > API调用gitlab-rails授权 - >接受或拒绝 - >建立Gitaly会话
git push over ssh  - > gitlab-shellgit命令尚未执行 - >建立Gitaly会话 - >在Gitaly中gitlab-shell pre-receive hook  - > API调用gitlab-rails授权 - >接受或拒绝push
当通过 `http(s)` 访问 GitLab Server 时,工作流程取决于你是从 Git 仓库拉取pull代码还是向 git 仓库推送push代码。
- 如果你是从 Git 仓库 pull 代码GitLab Rails 应用会全权负责处理用户鉴权和执行 Git 命令的工作
- 如果你是向 Git 仓库 push 代码GitLab Rails 应用既不会进行用户鉴权也不会执行 Git 命令,它会把以下工作交由 GitLab Shell 进行处理:
- 调用GitLab Rails API 检查权限
- 执行pre-receive 钩子
- 执行你请求的动作
- 处理 GitLab 的 post-receive 动作
- 处理自定义的 post-receive 动作
也许你会奇怪在通过 http(s) push 代码的情况下GitLab Rails应用为什么不在 GitLab Shell之前进行鉴权。这是因为 GitLab Rails 应用没有解析 git push 命令的逻辑。好的方法是将这些解析代码放在一个地方,这个地方就是 GitLab Shell这样我们就可以在通过 SSH 进行访问时重用这段代码。实际上GitLab Shell 在执行 git push 命令时根本不会进行权限检查,它是依赖于 pre-receive 钩子进行权限检查的。而当你执行 git pull 命令时,权限检查是在命令执行之前的。对 git pull 命令的权限检查要简单得多,因为你只需要检查一个用户是否可以访问这个仓库就可以了(不需要检查分支权限)。
#### **Gitlab-workhorse组件**
- Workhorse 可以处理一些请求,而不涉及 Rails例如Javascript 文件和 CSS 文件直接从磁盘载入
- Workhorse 可以修改 Rails 发送的响应:例如,如果你在 Rails 中使用 send_file那么 gitlab-workhorse 将打开磁盘上的文件,并将其内容作为响应体发送给客户端
- Workhorse 可以在从 Rails 请求权限后接管请求。 例如:处理 git clone 动作
- Workhorse 可以在将请求传递给 Rails 之前对其进行修改。 例如:处理 Git LFS 上传 Workhorse 首先向 Rails 请求权限,然后将请求主体存储在临时文件中,然后它将包含临时文件路径的修改后的请求发送到 Rails
- Workhorse 可以管理 Rails 的长期 WebSocket 连接。 例如:处理环境的终端 websocket
- Workhorse 不连接 Redis 或 Postgresql只连接到 Rails
- 我们假设所有到达 Workhorse 的请求首先通过一个上游代理,如 NGINX 或 Apache
- Workhorse 不接受 HTTPS 连接
- Workhorse 不清除空闲客户端连接
- 我们假设所有对 Rails 的请求都通过 Workhorse
#### **Gitaly组件**
Gitaly是一个Git RPC服务使用gRPC协议与客户端通信用于处理GitLab发出的所有git调用。[详细介绍](https://gitlab.com/gitlab-org/gitaly-proto)
[![GitLab实战三——Gitlab架构组件详解](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/ueditor/php/upload/image/20181217/1545034531481913.png "1545034531481913.png")[![GitLab实战三——Gitlab架构组件详解](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/wp-content/plugins/Ueditor/ueditor/themes/default/images/spacer.gif)
#### **Gitlab老版架构图< 9.0**
[![GitLab实战三——Gitlab架构组件详解](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/wp-content/plugins/Ueditor/ueditor/themes/default/images/spacer.gif)[![GitLab实战三——Gitlab架构组件详解](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/ueditor/php/upload/image/20181217/1545034544666644.png "1545034544666644.png")
## 2.Gitlab结构及配置
`~/git` 表示 git 用户的主目录,通常是 `/home/git`
GitLab 在安装时,会创建 git 用户,并安装在 `/home/git` 目录中。在主目录中是 gitlabhq 服务器软件以及 repository 所在的位置repository 的位置可以单独配置。
repository 位于 `/home/git/repositories` 中。GitLab 是一款 Ruby on Rails 应用程序,因此可以通过研究 Ruby on Rails 应用程序的工作方式来了解内部工作的细节。
要通过 SSH 提供 repository可以使用 gitlab-shell 这个附加应用程序,该应用程序安装在 `/home/git/gitlab-shell` 中。
#### **Gitlab目录结构:**
[![GitLab实战三——Gitlab架构组件详解](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/ueditor/php/upload/image/20181217/1545034668930982.png "1545034668930982.png")
`/home/git/.ssh` \- 包含 openssh 设置。指定由 gitlab-shell 管理的 authorized_keys 文件。 `/home/git/gitlab` \- GitLab 核心软件。 `/home/git/gitlab-shell` \- GitLab 核心的附加组件。包括 SSH 复制和其他功能。 `/home/git/data/repositories` \- 由命名空间组织的所有项目的裸仓库bare repository。这是为所有项目维护推/拉的 git repository 的地方。这是项目的关键数据最好备份。注意repository 的默认位置可以在 GitLab 的 `config/gitlab.yml` 和 gitlab-shell 的 `config.yml` 中配置。
#### **Gitlab配置文件**
Gitlab 的配置文件在 `/home/git/gitlab/config/*`目录下, 常用的有:
- `gitlab.yml` \- GitLab 配置.
- `unicorn.rb` \- Unicorn web server 配置.
- `database.yml` \- 数据库连接配置.
- `gitaly.yml` \- Gitaly 配置.
gitlab-shell 的配置文件在 `/home/git/gitlab-shell/config.yml`.
#### **Gitlab备份与恢复**
\# 执行备份命令
bundle exec rake gitlab:backup:create RAILS_ENV=production  
\# 备份成功,你会找到一个类似 /home/git/data/backups/1531046569\_2018\_07\_14\_10.6.4\_gitlab\_backup.tar 的文件
\# 执行恢复命令
bundle exec rake gitlab:backup:restore RAILS_ENV=production
详情请看官网。
#### **Gitlab进程:**
作为系统用户它需要持久数据库MySQL/PostreSQL和 redis 数据库。它还使用 Nginx 来代理 Unicorn。作为 git 用户,它启动 Sidekiq 和 Unicorn默认情况下运行在端口 8080 上的基于 ruby 的 HTTP 服务器)。在 GitLab 用户下,通常有 4 个进程:`gitlab-workhorse` (1进程) `unicorn_rails master`1进程`unicorn_rails worker`2进程`sidekiq`1进程`gitaly`1进程具体启动进程数以各组件配置文件为准。
#### **Repository访问**
可以通过 HTTP 或 SSH 访问代码库。HTTP 中的 cloning/push/pull 使用 GitLab APISSH 克隆由 gitlab-shell 处理。
#### **Gitlab环境检查**
GitLab 还提供了 rake 任务,可以用来查看版本信息或检查配置是否正确。详情可以参考 [maintenance rake tasks](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/administration/raketasks/maintenance.md)。简而言之:
sudo -i -u git
cd gitlab
bundle exec rake gitlab:env:info RAILS_ENV=production
bundle exec rake gitlab:check RAILS_ENV=production
注意:建议使用 `sudo -i -u git``sudo su - git` 登录 git 用户。虽然 gitlabhq 提供的 sudo 命令在 Ubuntu 中工作,但它们并不总是在 RHEL 中工作。
#### **Gitlab服务日志**
gitlabhq (includes Unicorn and Sidekiq logs)
- `/home/git/gitlab/log/` contains `application.log`, `production.log`, `sidekiq.log`, `unicorn.stdout.log`, `githost.log` and `unicorn.stderr.log` normally.
gitlab-shell
- `/home/git/gitlab-shell/gitlab-shell.log`
ssh
- `/var/log/auth.log` auth log (on Ubuntu).
- `/var/log/secure` auth log (on RHEL).
nginx
- `/var/log/nginx/` contains error and access logs.
Apache httpd
- [Explanation of Apache logs](https://httpd.apache.org/docs/2.2/logs.html).
- `/var/log/apache2/` contains error and output logs (on Ubuntu).
- `/var/log/httpd/` contains error and output logs (on RHEL).
redis
- `/var/log/redis/redis.log` there are also log-rotated logs there.
PostgreSQL
- `/var/log/postgresql/*`
MySQL
- `/var/log/mysql/*`
- `/var/log/mysql.*`
#### 参考:
- https://github.com/gitlabhq/gitlabhq/blob/master/doc/development/architecture.md
- https://blog.mallux.me/2017/02/27/gitlab/
- [https://blog.csdn.net/kikajack/article/details/8035477](https://blog.csdn.net/kikajack/article/details/80354774)
[![anzhihe](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2060%2060%22%3E%3C/svg%3E "GitLab实战三——Gitlab架构组件详解")](https://cdn.chegva.com/wp-content/uploads/2016/06/179f8716-60x60.png)
安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:[https://chegva.com/3229.html](https://chegva.com/3229.html "GitLab实战三——Gitlab架构组件详解") | *☆★★每天进步一点点,加油!★★☆* | 
**![](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E) 标签:** [持续集成](https://chegva.com/tag/%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90/) [Gitlab](https://chegva.com/tag/gitlab/)
### ![](data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20210%20140%22%3E%3C/svg%3E) 您可能还感兴趣的文章!
* * *
- [Gitlab调用CAS新用户登陆报422错误无法获取邮箱问题](https://chegva.com/3715.html "Gitlab调用CAS新用户登陆报422错误无法获取邮箱问题")
- [Gitlab sidekiq队列频繁崩溃问题解决](https://chegva.com/3712.html "Gitlab sidekiq队列频繁崩溃问题解决")
- [GitLab实战十五——Gitlab 11.0.6 升级至 11.4.14](https://chegva.com/3591.html "GitLab实战十五——Gitlab 11.0.6 升级至 11.4.14")
- [GitLab实战十四——Gitlab 10.8.7 升级至 11.0.6](https://chegva.com/3590.html "GitLab实战十四——Gitlab 10.8.7 升级至 11.0.6")
- [GitLab实战十三——Gitlab 10.0.6 升级至 10.8.7](https://chegva.com/3589.html "GitLab实战十三——Gitlab 10.0.6 升级至 10.8.7")
- [GitLab实战十二——Gitlab 9.3.11 升级至 10.0.6](https://chegva.com/3588.html "GitLab实战十二——Gitlab 9.3.11 升级至 10.0.6")
- [GitLab实战十一——Gitlab 8.11.3 升级至 9.3.11](https://chegva.com/3587.html "GitLab实战十一——Gitlab 8.11.3 升级至 9.3.11")
- [GitLab实战十——Gitlab 8.11 手动编译升级至 11.4](https://chegva.com/3586.html "GitLab实战十——Gitlab 8.11 手动编译升级至 11.4")
- [GitLab实战九——Gitlab CI yaml文件示例](https://chegva.com/3585.html "GitLab实战九——Gitlab CI yaml文件示例")
- [GitLab实战八——Gitlab CI yaml使用](https://chegva.com/3584.html "GitLab实战八——Gitlab CI yaml使用")
- [GitLab实战七——Gitlab CI使用](https://chegva.com/3521.html "GitLab实战七——Gitlab CI使用")
- [shell + python脚本监控gitlab ci停滞任务数](https://chegva.com/3497.html "shell + python脚本监控gitlab ci停滞任务数")
- [shell脚本监控进程挂掉自动重启](https://chegva.com/3471.html "shell脚本监控进程挂掉自动重启")
- [Gitlab使用system hooks新建项目时自动添加webhooks](https://chegva.com/3457.html "Gitlab使用system hooks新建项目时自动添加webhooks")
- [Gitlab Disable /explore and /help](https://chegva.com/3413.html "Gitlab Disable /explore and /help")
- [Gitlab更改项目的owner](https://chegva.com/3375.html "Gitlab更改项目的owner")
- [GitLab实战六——Gitlab集成Openldap & Cas3认证](https://chegva.com/3315.html "GitLab实战六——Gitlab集成Openldap & Cas3认证")
- [Shell脚本更改Gitlab所有用户创建项目限制数](https://chegva.com/3366.html "Shell脚本更改Gitlab所有用户创建项目限制数")
- [GitLab实战五——Gitlab认证授权机制及权限管理](https://chegva.com/3314.html "GitLab实战五——Gitlab认证授权机制及权限管理")
- [GitLab实战四——Gitlab扩展与高可用](https://chegva.com/3234.html "GitLab实战四——Gitlab扩展与高可用")
## 文章导航
[上一 上篇文章: 看一部机器人爱情片——《机器管家 Bicentennial Man》](https://chegva.com/3302.html)
[继续 下篇文章: 《出师表》](https://chegva.com/3211.html)
### 发表评论
<a id="email-notes"></a>电子邮件地址不会被公开。 必填项已用*标注
姓名 *
电子邮件 *
站点
在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。
© 2016-2023
**安志合** 版权所有 | [*订阅*](https://chegva.com/feed/)  [| 站点地图](https://chegva.com/sitemap.html) [| 站点统计 |](http://tongji.baidu.com/web/welcome/login) 京 ICP17028760 | [由WordPress自豪地提供](http://cn.wordpress.org/ "优雅的个人发布平台"). Theme: Flat by [Themeisle](https://themeisle.com/themes/flat/ "Flat WordPress Theme").