赞
踩
时值 GitLab 14 大版本更新,官方对于这个版本给出了非常高的评价,让我非常好奇,所以为了探究新版本到底有哪些变化,我对 GitLab 社区版、极狐版做了试用对比。
作为一个 GitLab 老用户,从 2013 年开始使用它,并在过去的四年中,我写过十几篇 GitLab 相关的文章,介绍了如何在容器环境中更简单的使用和维护 GitLab,以及如何进行数据迁移。
在官方版本发布的版本更新公告中,对于这次更新的评价非常高:寄托 GitLab 的未来,以及 DevOps 的未来。
“Even more than that, GitLab 14 represents the future of GitLab, and the future of DevOps.”。
所以,对于这个版本到底更新了哪些内容?引起了我强烈的好奇心。
此外,之前看到极狐团队官方采访视频,了解到这个项目自去年年底就启动了。在本地化功能上做了一些改善,所以我非常好奇这七个月以来,这个针对中国市场的版本到底有哪些不同,接下来如果使用 GitLab 作为协作工具,是否能够直接上车本土化的极狐版本呢?
为了保障测试过程相对顺畅,这里能使用官方镜像的软件,直接使用官方镜像。而像暂时没有提供镜像的极狐版,我会试着基于官方镜像进行容器镜像封装,尽可能避免折腾。
如果你也希望快速的进行体验,可以使用下面的脚本来初始化 Docker 环境(代码仓库 https://github.com/soulteary/linux-scripts):
curl -o- https://raw.githubusercontent.com/soulteary/linux-scripts/main/docker-with-mirror.sh | bash
curl -o- https://raw.githubusercontent.com/soulteary/linux-scripts/main/docker-compose.sh | bash
在安装完毕 Docker 环境后,就可以开始进行软件新版本试用啦。
使用容器启动 GitLab 14 社区版,还是比较容易的:
version: "3"
services:
gitlab:
restart: always
image: gitlab/gitlab-ce:14.0.2-ce.0
container_name: gitlab
hostname: gitlab.soulteary.com
ports:
- "80:80"
- "443:443"
- "2222:22"
volumes:
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
environment:
TZ: Asia/Shanghai
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.soulteary.com'
gitlab_rails['lfs_enabled'] = true
gitlab_rails['time_zone'] = 'Asia/Shanghai'
将上面的内容保存为 docker-compose.yml
,使用 docker-compose up -d
启动服务。
稍等片刻,使用 IP 或者域名访问网站,就能看到熟悉的 GitLab 登陆界面啦。
不过,从几个版本之前,GitLab 在安装完毕之后就取消了初始化管理员密码的引导。所以,此刻在不知道管理员初始密码的状况下,我们将无法登陆系统。
在官方文档中的“Install GitLab using Docker swarm mode”小节中,对于首次登陆时的管理员密码的处理使用了 “compose secrets” 的方式来进行定义。
实际上,我们还有更简单的方式来解决 GitLab 首次安装不知道管理员密码,无法登陆的问题。在官方文档中,介绍了如何重置密码,结合我们上面的配置,使用下面的命令,可以快速手动重置管理员账号的密码:
docker exec -it gitlab gitlab-rake "gitlab:password:reset[root]"
Enter password:
Confirm password:
Password successfully updated for user with username root.
输入两次长度在8位以上的相同密码后,我们就能使用管理员账号 root 和刚刚修改的密码登陆系统了。
可以看到界面和之前差别不大,或许是最近一直在使用 Gitea ,总感觉 GitLab 14 界面尺寸上略有微调。
相比较老版本,比较明显的变化是顶部导航被折叠到了一起,虽然官方说这样效率更高,但是作为开发过若干云平台界面的老前端来说,我个人觉得虽然看起来简洁了,但是高频按钮明显还是拿出来更具有“效率”,单纯追求视觉简洁,在效率工具场景设计上属于“开倒车”行为呀。
打开系统提供的一个“默认仓库”,可以看到侧边栏“丰富”了不少,许多功能都被从之前的 CI 中抽了出来。相比较之前的版本,这个版本的 GitLab 默认会创建一个新的项目,复用容器内提供的 Prometheus Grafana 用于监控 GitLab 实例本身的运行状况,这个设计比较巧,值得点赞。
如果你不需要这个项目或者功能,打开管理后台关闭这个功能,仓库就会被自动删除掉了。
在个人偏好设置界面,能够看到官方提供了语言切换功能,可以看到中文是完成度最高的语言,顺手切换掉。点击保存设置,页面会提示“Preferences saved.”,刷新后能够看到界面已经变更为了部分中文。再次访问系统默认项目,挨着翻一下项目侧边栏,看看会有什么变化:好像确实如翻译提示的那样,有一半左右的内容被汉化了,其他包括界面功能、排版并没有任何变化。
再次打开默认创建的项目,可以看到“安全合规”被提升到了一级菜单,不过除了第一项之外的功能都需要付费使用,阻挠了我继续探索的脚步。
在 v13 版本中,GitLab 出现了部署环境管理功能,这个功能支持通过调整动态版本功能开关进行小范围的部署测试。不过这个功能在免费版本中有 200 个功能标记的限制。另外,这个功能并不是零门槛使用,需要关联一个 K8S 集群。对于小团队而言,这个功能的定价或许会直接影响开发过程与 GitLab 绑定有多深入。毕竟,如果定价便宜,远低于招聘成本,应该还是挺香的。
前文提到了 GitLab 默认集成了 Prometheus ,在这个版本中,可以轻松的创建和定制看板,做到一站式监控业务状态。
这个看板包含并不仅限于常规的 QPS / 性能指标,还支持你自定义的业务指标。不过个人建议如果做业务监控,还是优先使用平台提供的 PaaS 服务,或者根据自己的业务量,预估资源占用,进行自建更靠谱一些。毕竟单机模式下,CPU 和磁盘 IO 都比较有限,难以保障可靠性。至于 GitLab 高可用模式,是否能够提供生产级别的监控服务,还需要进一步验证。
基础设施部分,目前支持的有 AWS EKS 和 Google GKE 的 K8S 集群,Serverless 平台支持自家的“GitLab First Look”,还支持 HashCorp 提供的Terraform 功能。官方在配置集群的界面添加了一个导购链接,文案上说和 GCP 合作,通过这个地址注册可以多获得一定的试用免费额度。
相比较自建仓库,比如 Nexus、Harbor、Registry,GitLab 内置了支持多种语言的软件包仓库,比用户自建要省事一些。不过还是之前的顾虑,单机情况下,存储可靠性、系统升级、备份还原的数据可靠性,以及整体的服务稳定性的保障承诺需要明确给出,至于多机版本,有待进一步探究。
“价值流分析”这个功能是我最喜欢的,如果正式用起来,或许可以把一堆项目管理软件都省掉,就在 GitLab 里就能完成整个软件开发生态的全部工作。恰逢 Phabricator 被官方宣布停止维护,或许在开源软件候选清单里,GitLab 的排位会再上升一些。
最后,我想围观一下 GitLab 14 系统集成有什么新的应用,但很可惜的是没有看到什么新鲜的“家伙”。
接着来看看极狐版本的 GitLab 吧。
极狐版的 GitLab 下载页面暂时没有提供 Docker 容器,所以我们需要封装一个镜像,为了保持客观,我们直接复用英文版本的容器环境进行体验。
英文版的 GitLab 镜像,目前基于 Ubuntu 20.04 构建,所以这里我们需要先下载 极狐版的 GitLab 软件包:
wget https://omnibus.gitlab.cn/ubuntu/focal/gitlab-jh_14.0.1-jh.0_amd64.deb
顺手看一下文件校验值:
c4ae070ac043c33b665ca42380dfc5ef473410e1cc6a5aa6f4a6177e432f6d66 gitlab-jh_14.0.1-jh.0_amd64.deb
既然极狐版本是 14.0.1 ,那么我们也优先使用 14.0.1 的社区版镜像为基础环境进行尝试,直接使用 deb 包进行覆盖安装,来尽可能复用“原汁原味”的镜像环境。
FROM gitlab/gitlab-ce:14.0.1-ce.0
COPY gitlab-jh_14.0.1-jh.0_amd64.deb /tmp/
RUN dpkg -i /tmp/gitlab-jh_14.0.1-jh.0_amd64.deb && \
rm /tmp/gitlab-jh_14.0.1-jh.0_amd64.deb
将上面的内容保存为 Dockerfile
,使用 docker build -t soulteary/gitlab:14.0.1-jh.0 .
进行镜像构建,不出意外,你将看到类似下面的内容:
Sending build context to Docker daemon 1.027GB
Step 1/3 : FROM gitlab/gitlab-ce:14.0.1-ce.0
---> f85d08f83476
Removing intermediate container b6f7f5e13d10
---> 3a1e7f9792ac
Step 2/3 : COPY gitlab-jh_14.0.1-jh.0_amd64.deb /tmp/
---> 95dd6ee6b868
Step 3/3 : RUN dpkg -i /tmp/gitlab-jh_14.0.1-jh.0_amd64.deb && rm /tmp/gitlab-jh_14.0.1-jh.0_amd64.deb
---> Running in f3e874f1a980
Selecting previously unselected package gitlab-jh.
dpkg: considering removing gitlab-ce in favour of gitlab-jh ...
dpkg: yes, will remove gitlab-ce in favour of gitlab-jh
(Reading database ... 87432 files and directories currently installed.)
Preparing to unpack .../gitlab-jh_14.0.1-jh.0_amd64.deb ...
Unpacking gitlab-jh (14.0.1-jh.0) ...
Setting up gitlab-jh (14.0.1-jh.0) ...
It looks like GitLab has not been configured yet; skipping the upgrade script.
*. *.
*** ***
***** *****
.****** *******
******** ********
,,,,,,,,,***********,,,,,,,,,
,,,,,,,,,,,*********,,,,,,,,,,,
.,,,,,,,,,,,*******,,,,,,,,,,,,
,,,,,,,,,*****,,,,,,,,,.
,,,,,,,****,,,,,,
.,,,***,,,,
,*,.
_______ __ __ __
/ ____(_) /_/ / ____ _/ /_
/ / __/ / __/ / / __ `/ __ \
/ /_/ / / /_/ /___/ /_/ / /_/ /
\____/_/\__/_____/\__,_/_.___/
Thank you for installing GitLab!
GitLab was unable to detect a valid hostname for your instance.
Please configure a URL for your GitLab instance by setting `external_url`
configuration in /etc/gitlab/gitlab.rb file.
Then, you can start your GitLab instance by running the following command:
sudo gitlab-ctl reconfigure
For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md
Help us improve the installation experience, let us know how we did with a 1 minute survey:
https://gitlab.fra1.qualtrics.com/jfe/form/SV_6kVqZANThUQ1bZb?installation=omnibus&release=14-0
Removing intermediate container f3e874f1a980
---> a9861f84aa94
Successfully built a9861f84aa94
Successfully tagged soulteary/gitlab:14.0.1-jh.0
镜像构建完毕后,还是使用几乎相同内容的配置文件,来准备启动服务:(修改了镜像名称)
version: "3"
services:
gitlab:
restart: always
image: soulteary/gitlab:14.0.1-jh.0
container_name: gitlab
hostname: gitlab.soulteary.com
ports:
- "80:80"
- "443:443"
- "2222:22"
volumes:
- ./config:/etc/gitlab
- ./data:/var/opt/gitlab
environment:
TZ: Asia/Shanghai
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.soulteary.com'
gitlab_rails['lfs_enabled'] = true
gitlab_rails['time_zone'] = 'Asia/Shanghai'
启动服务后,会发现出现系统出现报错而无法运行:
gitlab | Relevant File Content:
gitlab | ----------------------
gitlab | /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/libraries/gitlab_rails.rb:
gitlab |
gitlab | 97: # rubocop:enable Metrics/PerceivedComplexity
gitlab | 98:
gitlab | 99: def parse_external_url
gitlab | 100: return unless Gitlab['external_url']
gitlab | 101:
gitlab | 102: uri = URI(Gitlab['external_url'].to_s)
gitlab | 103:
gitlab | 104>> raise "GitLab external URL must include a schema and FQDN, e.g. http://gitlab.example.com/" unless uri.host
gitlab | 105:
gitlab | 106: Gitlab['user']['git_user_email'] ||= "gitlab@#{uri.host}"
gitlab | 107: Gitlab['gitlab_rails']['gitlab_host'] = uri.host
gitlab | 108: Gitlab['gitlab_rails']['gitlab_email_from'] ||= "gitlab@#{uri.host}"
gitlab | 109:
gitlab | 110: case uri.scheme
gitlab | 111: when "http"
gitlab | 112: Gitlab['gitlab_rails']['gitlab_https'] = false
gitlab | 113: Nginx.parse_proxy_headers('nginx', false)
gitlab |
翻看官方社区,发现这个问题应该早在三年前的v10.1.4就被修复了,虽然在这个帖子中,没有提到是如何解决的,但是这并难不倒使用了 GitLab N 年的老用户。
编辑 config/gitlab.rb
文件,将文件中的 external_url 'GENERATED_EXTERNAL_URL'
修改为 external_url='GENERATED_EXTERNAL_URL'
,再次使用 docker-compose down && docker-compose up -d
启动镜像,第一次启动会出现错误,再次执行命令,会看到程序对错误内容进行了修复,倒杯饮料稍等片刻,将看到极狐版本的登陆界面。
相比较社区版本,这个版本的界面默认换成了中文,我们使用同样的方式重置 root 用户的密码,并尝试登陆,体验软件功能。
登陆进去后,第一感觉是发现除了左上角的 Logo 不同之外,似乎和社区版没有任何区别。翻看顶部导航菜单、系统默认创建的监控仓库的侧边栏,发现和社区版本还是完全一致。
或许切换语言后,界面功能会有不同,抱着幻想,同样使用用户“偏好设置”里的语言切换功能,对界面语言进行切换:将语言切换为中文。
然而,在语言切换界面切换语言之前,看到中文汉化进度居然和社区版本一致,心想莫非…
切换语言后,“故地重游”了一番,发现和社区版还真没有什么太大的不同。
深入体验,点击默认仓库中的 “安全与合规”功能中的 “启动GitLab Ultimate试用”按钮,或者打开管理后台点击购买许可证,发现官方网站居然出现了 404 Not Found,看来这个版本还在迭代开发中,并不是完全体。
打开后台首页,我们会看到版本上方醒目的“尽快更新”(ASAP)的提示,这里估计是 GitLab 官方版本检查接口还没有做好?这个版本已经是最新版的中国发行版了啊。
其实对于用户来说,上述都是小问题,如果本地版本在集成上添加了适应国情的钉钉、微信、飞书,这个版本还会是一个比较香的选择,毕竟有官方团队维护嘛。
然而,在我打开管理后台的应用集成界面时,发现和之前社区版还是没有差别…
看到上面的试用结果,我陷入了自我怀疑,难道是因为我使用的是社区版本的镜像作为基础运行环境造成的?那换成企业版本镜像又如何?
这次为了避免镜像中原有软件对于测试的影响,虽然 GitLab 支持使用 deb 包进行替换安装,但是这次我先对原有软件进行卸载,再进行软件的安装。
FROM gitlab/gitlab-ee:14.0.3-ee.0
RUN dpkg -P gitlab-ee
RUN rm -rf /opt/gitlab/sv/sshd/
COPY gitlab-jh_14.0.1-jh.0_amd64.deb /tmp/
RUN dpkg -i /tmp/gitlab-jh_14.0.1-jh.0_amd64.deb && \
rm /tmp/gitlab-jh_14.0.1-jh.0_amd64.deb
构建镜像和启动镜像,依旧使用上文中的配置。过程中还是会遇到那个“GitLab external URL must include a schema and FQDN”的错误,解决方式依旧是修改 gitlab.rb 配置文件,并重新启动,直到 GitLab 成功运行起来。
然而,基于企业版镜像再次构建之后,软件似乎也没有什么区别。甚至打开管理后台,软件版本检查展示的还是上文中提到的“尽快更新”提示,这里为了确认到底是我封装容器环境问题,还是官方服务问题,进入容器翻了下软件的具体实现:
# cat ./embedded/service/gitlab-rails/lib/version_check.rb
# frozen_string_literal: true
require "base64"
# This class is used to build image URL to
# check if it is a new version for update
class VersionCheck
def self.data
{ version: Gitlab::VERSION }
end
def self.url
encoded_data = Base64.urlsafe_encode64(data.to_json)
"#{host}/check.svg?gitlab_info=#{encoded_data}"
end
def self.host
'https://version.gitlab.com'
end
end
VersionCheck.prepend_mod
在浏览器看到页面实际调用地址如下:
https://version.gitlab.cn/check.svg?gitlab_info=eyJ2ZXJzaW9uIjoiMTQuMC4xLWpoIn0=
结合上面的实现,针对请求参数进行 base64 decode 可以得到版本为:{\"version\":\"14.0.1-jh\"}
。那这个问题的原因,就和封装软件镜像无关了,或许是官方工作人员没有来得及更新页面上的版本号,以及还没有安排上本土化功能吧。
极狐官方提醒软件下载用户,准备 4GB 以上的资源来准备运行 GitLab,实测目前版本,如果不进行配置调整,至少需要 6GB 到 7GB 的内存空间,所以针对国内用户,或许应该在 GitLab 官方版本上做一些快速配置调整,尽可能让用户以更少的资源将软件运行起来,投入使用。
说实话,对于 GitLab 14 大版本更新,还是有一些惊喜,因为对于非头部大厂,参与研发的工程师完整的使用 DevOps 理念进行工作的门槛变的更低了,公司低成本搭建一套“开发工作平台”的成本也变的非常低。但是也有不少比较失望的地方,比如一味推云服务绑定,SaaS 绑定,抹杀了许多了技术架构出现创新的可能,也不利于与内部系统进行快速集成。更让我失望的是,看到视频宣传,原本以为已经可用的 GitLab 中国版还处于非常初级的阶段。
不论如何,作为一个老用户,看到官方开始重视和认可中国市场,并创建独立的公司进行运营,还是会对它充满期待,希望未来的 GitLab 和中国版可以越来越好。
–EOF
如果你觉得内容还算实用,欢迎点赞分享给你的朋友,在此谢过。
我们有一个小小的折腾群,里面聚集了几百位喜欢折腾的小伙伴。
在不发广告的情况下,我们在里面会一起聊聊软硬件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术沙龙的资料。
喜欢折腾的小伙伴欢迎扫码添加好友。(添加好友,请备注实名,注明来源和目的,否则不会通过审核)
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
本文作者: 苏洋
创建时间: 2021年07月08日
统计字数: 11871字
阅读时间: 24分钟阅读
本文链接: https://soulteary.com/2021/07/08/try-gitlab-14-and-the-chinese-release-jihu.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。