本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 [署名 4.0 国际 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/deed.zh) 本文作者: 苏洋 创建时间: 2021年07月08日 统计字数: 11879字 阅读时间: 24分钟阅读 本文链接: https://soulteary.com/2021/07/08/try-gitlab-14-and-the-chinese-release-jihu.html ----- # 试用 GitLab 14 以及中国发行版:极狐 时值 GitLab 14 大版本更新,官方对于这个版本给出了非常高的评价,让我非常好奇,所以为了探究新版本到底有哪些变化,我对 GitLab 社区版、极狐版做了试用对比。 ## 写在前面 作为一个 GitLab 老用户,从 2013 年开始使用它,并在过去的四年中,我写过十几篇 [GitLab 相关的文章](https://soulteary.com/tags/gitlab.html),介绍了如何在容器环境中更简单的使用和维护 GitLab,以及如何进行数据迁移。 在官方版本发布的[版本更新公告中](https://about.gitlab.com/releases/2021/06/22/gitlab-14-0-released/),对于这次更新的评价非常高:寄托 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](https://github.com/soulteary/linux-scripts)): ```bash 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 社区版 使用容器启动 GitLab 14 社区版,还是比较容易的: ```yaml 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 14 CE 登陆界面](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-login.png) 不过,从几个版本之前,GitLab 在安装完毕之后就取消了初始化管理员密码的引导。所以,此刻在不知道管理员初始密码的状况下,我们将无法登陆系统。 ### 重置 GitLab 用户密码 在[官方文档](https://docs.gitlab.com/ee/install/docker.html)中的“Install GitLab using Docker swarm mode”小节中,对于首次登陆时的管理员密码的处理使用了 “compose secrets” 的方式来进行定义。 实际上,我们还有更简单的方式来解决 GitLab 首次安装不知道管理员密码,无法登陆的问题。在[官方文档](https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password)中,介绍了如何重置密码,结合我们上面的配置,使用下面的命令,可以快速手动重置管理员账号的密码: ```bash docker exec -it gitlab gitlab-rake "gitlab:password:reset[root]" Enter password: Confirm password: Password successfully updated for user with username root. ``` ### 简单浏览 GitLab v14 界面功能 输入两次长度在8位以上的相同密码后,我们就能使用管理员账号 root 和刚刚修改的密码登陆系统了。 ![GitLab 14 CE 登陆后的界面](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-first-look.png) 可以看到界面和之前差别不大,或许是最近一直在使用 Gitea ,总感觉 GitLab 14 界面尺寸上略有微调。 ![GitLab 14 CE 新的顶部导航](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-topnav.png) 相比较老版本,比较明显的变化是顶部导航被折叠到了一起,虽然官方说这样效率更高,但是作为开发过若干云平台界面的老前端来说,我个人觉得虽然看起来简洁了,但是高频按钮明显还是拿出来更具有“效率”,单纯追求视觉简洁,在效率工具场景设计上属于“开倒车”行为呀。 ![GitLab 14 CE 项目侧边栏](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-project-nav.png) 打开系统提供的一个“默认仓库”,可以看到侧边栏“丰富”了不少,许多功能都被从之前的 CI 中抽了出来。相比较之前的版本,这个版本的 GitLab 默认会创建一个新的项目,复用容器内提供的 Prometheus Grafana 用于监控 GitLab 实例本身的运行状况,这个设计比较巧,值得点赞。 如果你不需要这个项目或者功能,打开管理后台关闭这个功能,仓库就会被自动删除掉了。 ![GitLab CE14 切换界面语言](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-change-lang.png) 在个人偏好设置界面,能够看到官方提供了语言切换功能,可以看到中文是完成度最高的语言,顺手切换掉。点击保存设置,页面会提示“Preferences saved.”,刷新后能够看到界面已经变更为了部分中文。再次访问系统默认项目,挨着翻一下项目侧边栏,看看会有什么变化:好像确实如翻译提示的那样,有一半左右的内容被汉化了,其他包括界面功能、排版并没有任何变化。 ![GitLab CE14 项目安全和合规管理](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-security.png) 再次打开默认创建的项目,可以看到“安全合规”被提升到了一级菜单,不过除了第一项之外的功能都需要付费使用,阻挠了我继续探索的脚步。 ![GitLab CE14 项目部署环境](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-deploy.png) 在 v13 版本中,GitLab 出现了部署环境管理功能,这个功能支持通过调整动态版本功能开关进行小范围的部署测试。不过这个功能在免费版本中有 200 个功能标记的限制。另外,这个功能并不是零门槛使用,需要关联一个 K8S 集群。对于小团队而言,这个功能的定价或许会直接影响开发过程与 GitLab 绑定有多深入。毕竟,如果定价便宜,远低于招聘成本,应该还是挺香的。 ![GitLab CE14 项目监控](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-monitor.png) 前文提到了 GitLab 默认集成了 Prometheus ,在这个版本中,可以轻松的创建和定制看板,做到一站式监控业务状态。 这个看板包含并不仅限于常规的 QPS / 性能指标,还支持你自定义的业务指标。不过个人建议如果做业务监控,还是优先使用平台提供的 PaaS 服务,或者根据自己的业务量,预估资源占用,进行自建更靠谱一些。毕竟单机模式下,CPU 和磁盘 IO 都比较有限,难以保障可靠性。至于 GitLab 高可用模式,是否能够提供生产级别的监控服务,还需要进一步验证。 ![GitLab CE14 基础设施](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-k8s.png) 基础设施部分,目前支持的有 AWS EKS 和 Google GKE 的 K8S 集群,Serverless 平台支持自家的“GitLab First Look”,还支持 HashCorp 提供的Terraform 功能。官方在配置集群的界面添加了一个导购链接,文案上说和 GCP 合作,通过这个地址注册可以多获得一定的试用免费额度。 ![GitLab CE14 软件包仓库](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-package.png) 相比较自建仓库,比如 Nexus、Harbor、Registry,GitLab 内置了支持多种语言的软件包仓库,比用户自建要省事一些。不过还是之前的顾虑,单机情况下,存储可靠性、系统升级、备份还原的数据可靠性,以及整体的服务稳定性的保障承诺需要明确给出,至于多机版本,有待进一步探究。 ![GitLab CE14 价值流分析](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-plan.png) “价值流分析”这个功能是我最喜欢的,如果正式用起来,或许可以把一堆项目管理软件都省掉,就在 GitLab 里就能完成整个软件开发生态的全部工作。恰逢 Phabricator 被官方宣布停止维护,或许在开源软件候选清单里,GitLab 的排位会再上升一些。 ![GitLab CE14 系统集成](https://attachment.soulteary.com/2021/07/08/gitlab-14-ce-integrations.png) 最后,我想围观一下 GitLab 14 系统集成有什么新的应用,但很可惜的是没有看到什么新鲜的“家伙”。 接着来看看极狐版本的 GitLab 吧。 ## 使用容器体验 GitLab 14 极狐版 ![GitLab 极狐版](https://attachment.soulteary.com/2021/07/08/gitlab-jh-web.png) 极狐版的 GitLab [下载页面](https://about.gitlab.cn/install/)暂时没有提供 Docker 容器,所以我们需要封装一个镜像,为了保持客观,我们直接复用英文版本的容器环境进行体验。 ### 基于社区版环境封装镜像 英文版的 GitLab 镜像,目前基于 Ubuntu 20.04 构建,所以这里我们需要先下载 极狐版的 GitLab 软件包: ```bash wget https://omnibus.gitlab.cn/ubuntu/focal/gitlab-jh_14.0.1-jh.0_amd64.deb ``` 顺手看一下文件校验值: ```bash c4ae070ac043c33b665ca42380dfc5ef473410e1cc6a5aa6f4a6177e432f6d66 gitlab-jh_14.0.1-jh.0_amd64.deb ``` 既然极狐版本是 14.0.1 ,那么我们也优先使用 14.0.1 的社区版镜像为基础环境进行尝试,直接使用 deb 包进行覆盖安装,来尽可能复用“原汁原味”的镜像环境。 ```bash 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 .` 进行镜像构建,不出意外,你将看到类似下面的内容: ```bash 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 ``` 镜像构建完毕后,还是使用几乎相同内容的配置文件,来准备启动服务:(修改了镜像名称) ```yaml 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' ``` 启动服务后,会发现出现系统出现报错而无法运行: ```TeXT 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就[被修复了](https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/2877),虽然在这个帖子中,没有提到是如何解决的,但是这并难不倒使用了 GitLab N 年的老用户。 编辑 `config/gitlab.rb` 文件,将文件中的 `external_url 'GENERATED_EXTERNAL_URL'` 修改为 `external_url='GENERATED_EXTERNAL_URL'`,再次使用 `docker-compose down && docker-compose up -d` 启动镜像,第一次启动会出现错误,再次执行命令,会看到程序对错误内容进行了修复,倒杯饮料稍等片刻,将看到极狐版本的登陆界面。 #### 简单浏览极狐版 GitLab 功能 ![GitLab 极狐版 登陆界面](https://attachment.soulteary.com/2021/07/08/gitlab-jh-login.png) 相比较社区版本,这个版本的界面默认换成了中文,我们使用同样的方式重置 root 用户的密码,并尝试登陆,体验软件功能。 ![GitLab 极狐版 默认界面](https://attachment.soulteary.com/2021/07/08/gitlab-jh-first-look.png) 登陆进去后,第一感觉是发现除了左上角的 Logo 不同之外,似乎和社区版没有任何区别。翻看顶部导航菜单、系统默认创建的监控仓库的侧边栏,发现和社区版本还是完全一致。 或许切换语言后,界面功能会有不同,抱着幻想,同样使用用户“偏好设置”里的语言切换功能,对界面语言进行切换:将语言切换为中文。 ![GitLab 极狐版 切换语言](https://attachment.soulteary.com/2021/07/08/gitlab-jh-change-lang.png) 然而,在语言切换界面切换语言之前,看到中文汉化进度居然和社区版本一致,心想莫非... 切换语言后,“故地重游”了一番,发现和社区版还真没有什么太大的不同。 ![GitLab 极狐版 项目仓库界面](https://attachment.soulteary.com/2021/07/08/gitlab-jh-project.png) 深入体验,点击默认仓库中的 “安全与合规”功能中的 “启动GitLab Ultimate试用”按钮,或者打开管理后台点击购买许可证,发现官方网站居然出现了 404 Not Found,看来这个版本还在迭代开发中,并不是完全体。 ![中国版 GitLab 似乎有些服务没有迁移过来](https://attachment.soulteary.com/2021/07/08/gitlab-jh-not-found.png) 打开后台首页,我们会看到版本上方醒目的“尽快更新”(ASAP)的提示,这里估计是 GitLab 官方版本检查接口还没有做好?这个版本已经是最新版的中国发行版了啊。 ![后台版本检查提示该升级了](https://attachment.soulteary.com/2021/07/08/gitlab-jh-version.png) 其实对于用户来说,上述都是小问题,如果本地版本在集成上添加了适应国情的钉钉、微信、飞书,这个版本还会是一个比较香的选择,毕竟有官方团队维护嘛。 ![极狐版本应用集成](https://attachment.soulteary.com/2021/07/08/gitlab-jh-integrations.png) 然而,在我打开管理后台的应用集成界面时,发现和之前社区版**还是没有差别**... ### 基于企业版环境封装镜像 看到上面的试用结果,我陷入了自我怀疑,难道是因为我使用的是社区版本的镜像作为基础运行环境造成的?那换成企业版本镜像又如何? 这次为了避免镜像中原有软件对于测试的影响,虽然 GitLab 支持使用 deb 包进行替换安装,但是这次我先对原有软件进行卸载,再进行软件的安装。 ```bash 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 成功运行起来。 ![基于企业镜像构建的极狐版](https://attachment.soulteary.com/2021/07/08/gitlab-jh-base-ee.png) 然而,基于企业版镜像再次构建之后,软件似乎也没有什么区别。甚至打开管理后台,软件版本检查展示的还是上文中提到的“尽快更新”提示,这里为了确认到底是我封装容器环境问题,还是官方服务问题,进入容器翻了下软件的具体实现: ```bash # 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 ``` 在浏览器看到页面实际调用地址如下: ```bash 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