GitLab 12.1版本发布,支持Pages自动https证书、机密MR请求等

日前,GitLab宣布发布其有一个月度版本12.1,该版本提供了GitLab Pages支持自动Let's Encrypt https证书、Merge Trains、机密PR合并等功能,更多功能,按照惯例请随虫虫一起学习。

重要功能介绍

并行Merge Trains(PREMIUM及以上)

保持主分支干净对于持续交付至关重要。当生产环境构建中断时,会影响代码上线,用户使用和业务。在新代码合并时,100%确定主分支保持干净的唯一方法是使用最新版本的master分支运行管道。对于拥有大量合并的团队而言,这可能很困难甚至不可能。在管道完成一次代码更新时,其他更新会合并到master并可能发生冲突。缓解这种情况的唯一方法是对更新进行排队,这样一旦生产管道启动,其他代码就不会在该更改之前合并。

Gitlab 12.0中增加了功能Merge Trains。他使用GitLab的"合并结果管道"功能。通过该功能GitLab会自动创建一个单独的ref,其中包含合并源和目标分支的结果。合并请求管道在结果引用上运行,取代在源分支上运行的方法。这样,就能知道代码是否可以安全地合并到master中,而无需不断地进行rebase。在此功能的基础上,Merge Trains确保在将合并设置为合并到目标分支后以合适的顺序进行合并。MR中的合并按钮被替换为开始/添加到Merge Trains按钮,该按钮将该合并添加到Merge Trains队列。Merge Train管道按顺序执行。Trains中的优先MR需要在下一个MR的管道开始之前完成,这保持了master分支干净,但可能会影响速度,特别是对于长期运行管道的项目。

在GitLab 12.1中通过让Merge Trains并行运行。基于所有先前的合并请求成功的假设,最多支持四个管道同时执行,包括Trains中先前合并请求的ref。这样,如果先前的合并请求失败,则只需重新运行管道。并行执行Merge Trains管道可以显著加快流程。

发起和合并机密MR请求

在更新合并时候,往往需要一些机密的信息,不希望直接对外公开,比如安全漏洞不希望直接对外披露。之前这种情况需要通过私密库进行。新版本中,支持对机密PR的合并,可以解决这种问题。单击机密问题上的创建机密合并请求按钮允许用户选择在其中创建新分支和合并请求的专用分支,这会使所有内容保持不变,直到通过合并来自私有分支的代码来显示它。

Pages自动获取Let's Encrypt HTTPS证书

GitLab Pages是创建Web站点的很好途径之一,可以用于个人blog,项目宣传网站,文档和工作报告站点等。而时下站点上HTTPS则是一个刚需,新版本中,对自定义域名的GitLab Page站点,都可以自动获取所有GitLab页面自定义域和子域的Let's Encrypt HTTPS证书。只需要启用"Automatic certificate management using Let's Encrypt"配置。GitLab会自动从Let's Encrypt中获取证书,将提供给GitLab中的自定义域,跟踪到期日期并可以自动续订证书。

GitLab 12.1发布的主要功能

Git对象重复数据删除

通过fork工作流程可以复制项目副本到自己仓库并修改,并通过MR合并给项目,而无需项目权限。正是这种便捷社交化的"fork—PR/MR"流程让Git和开源项目协作广泛流行,任何人都可以轻松地为任何项目添砖加瓦。然而对于Git服务器来说这是一个很棘手的问题,对一些热门项目数以千计的副本需要大量存储空间。

在GitLab 12.1中,fork一个公共项目的分支会创建一个对象池并使用"objects/info/alternates"减少fork副本的存储要求。

对象重复数据删除需要启用散列存储,并且父项目要使用散列存储。现有的fork需要手动启用才会使用对象池。在下一个版本中将会通过直接在重复数据删除状态下创建fork来实现快速分叉。

Git的项目别名(PREMIUM及以上)

将Git存储库迁移到GitLab后,系统访问该项目时系统之间使用相同的名称是很有用的。在大多数情况下,没有问题。但是诸如Gitolite一些Git工具允许在没有命名空间的情况下访问项目。而GitLab中每个项目都存在于命名空间中,这样,这些项目迁移会有一些问题。

GitLab 12.1新版本中,管理员可以通过使用新的Project Alias API将短项目别名映射到GitLab中的项目,从而降低迁移到GitLab的风险。

在实例级强制包含管道模板(PREMIUM及以上)

实例管理员可以指定必需的include:,在该实例中创建的每个管道上运行,这可以用于确保遵守合规性或标准化流程,这些流程应该无异常运行,有助于在整个公司的CI/CD流程实施一致性。

分配组为代码所有者

将代码所有者分配给文件可以轻松实现。分配后,就可以在查看文件时查看代码所有者,并自动将其添加为合并请求批准者。

在GitLab 12.1中,除了GitLab用户名和电子邮件作为代码所有者之外,现在还可以支持分配给组。分配给组可防止代码所有者在团队更改时失去同步,尤其是在使用LDAP管理组成员身份时。

即将发布功能

在发布之前创建和沟通很有帮助。新版中可以通过Releases API创建一个即将发布的版本,通过修改和编辑带有未来日期的released_at值,在发布页面上的即将发布可以按时间顺序在发布版本中查看,并显示未来日期版本的"即将发布"标签。

如果不修改released_at日期,默认会使用created_date。

改进的AsciiDoc格式

AsciiDoc在Markdown标准格式的基础上实现了更多的格式标记,比如下划线,删除线,高亮,小型和警告(警告框)等等标记。新版本中在存储库和wiki中查看AsciiDoc文件时(注意以.adoc为后缀),这些格式标记现在可以被渲染显示。

每个Rails会话的cat-file进程池

在GitLab中,有一些接口可以显示任意提交的详细信息,例如合并请求讨论或CI管道列表。每次都提取提交提交信息很慢。GitLab现在为每个Rails请求会话共享相同的Git cat-file进程。在GitLab在线托管网站上启用该功能后FindCommit和TreeEntry RPC的中值延迟显著降低。

实例级别的群集Web终端访问

Web终端提供了一种很好的方法来通过浏览器在线调试问题。在GitLab 12.1中,Web终端现在可用于实例级Kubernetes集群进行的部署。

组级别集群Web终端访问

GitLab 12.1的也新增了对组级别Kubernetes集群进行部署的Web终端的功能。

Kubernetes GitLab托管应用卸载JupyterHub

在GitLab 12.1中支持从Kubernetes集群中卸载JupyterHub应用程序。

部署用于实例级Kubernetes集群的板(PREMIUM及以上)

Deploy Boards提供了在Kubernetes上运行的每个CI环境的当前运行状况和状态的统一视图,显示了部署中pod的状态。

从GitLab 12.1开始,使用实例级群集进行的部署支持部署板功能。

部署组级级别Kubernetes集群的面板(PREMIUM及以上)

Deploy Boards提供了在Kubernetes上运行的每个CI环境的当前运行状况和状态的统一视图,显示了部署中pod的状态。

从GitLab 12.1开始,使用组级群集进行的部署支持部署板功能。

从Kubernetes GitLab托管应用程序卸载Ingress

使用GitLab 12.1,现在可以从Kubernetes集群中卸载Ingress应用程序。

Knative版本更新为0.6

Knative应用程序图表已更新至v0.6,提供了许多改进,包括更好的扩展和alpha自动TLS支持。

在存储库中定义和存储指标仪表板

根据观察应用程序状态所需的重要指标创建自定义仪表板。从12.1开始,可以在应用程序代码旁边控制这些仪表板的定义,支持区域和单统计图表类型。通过在项目根目录建立.gitlab/dashboards/目录,并在这个目录下生成.yml文件,在文件中定义仪表盘代码,然后可以在Operations > Metrics下查看生成仪表盘:

使用Prometheus警报属性注释GitLab事件(ULTIMATE版本)

当事故发生时,定位问题的原因及需要修复的Bug非常困难。在12.1中,新增加了对Prometheus警报属性添加GitLab事件问题的注释。这个实现是一个MVC,后续版本会持续更新完善。

NPM Registry的子分组支持(PREMIUM及以上)

GitLab NPM Registry允许node.js开发人员发布和共享NPM包。但是,由于缺乏对子分组的支持,该功能使用有限。,在12.1中,NPM Registry包名称被格式更新为@root_namespace_path/any-name,以允许在组/子组级别进行身份验证和提取包。

改进GitLab Package功能的发现和导航

GitLab Package stage包括Container Registry,Package Registry和Dependency Proxy。此前,所有这些功能都嵌套在顶层导航的不同部分,从而产生了发现和可用性问题。在12.1中,新的顶级导航包下对所有上述功能进行了分组,以易于发现,并确保可以嵌套添加更多的功能,例如与Package stage相关的指标和策略。

在依赖项扫描中支持自定义PyPI registrie(ULTIMATE版本)

通过支持PIP_INDEX_URL和PIP_EXTRA_INDEX_URL环境变量,允许在依赖项扫描中使用自定义PyPIregistries。

PR安全批准(ULTIMATE版本)

为了让团队专注于最关键的安全项目并避免由于结果量导致的丢失,GitLab现在允许客户在没有引入指定严重性的漏洞时自动批准特定标识的合并请求。这使得工作流程允许安全团队参与合并请求批准工作流程,而无需批准每个合并请求。

将Security Dashboard设置为组的默认视图的选项(ULTIMATE版本)

安全团队使用仪表板作为其工作的主要工具。他们应该能够将其设置为组的默认视图,因此转到该组会立即显示它。

在DAST中包含所有扫描的URL列表(ULTIMATE版本)

新版本中对不包括在MR中使用动态应用程序安全测试(DAST)扫描和测试的所有路径/URL,这使用户无需关心扫描的内容以及是否完成了完整扫描。

智能卡身份验证(PREMIUM及以上)

使用智能卡进行硬件令牌身份验证的实例从11.6支持登录GitLab。在12.1中,允许在准许git活动之前使用智能卡登录,将智能卡支持扩展到命令行。

通过此更改,组织现在可以将其用于UI和git活动的完整身份验证解决方案,包括在与LDAP结合使用时。

折叠问题板列表

问题板可以有许多列表,这使得它们难以横向导航。12.1中,新添加了折叠问题板列表的功能,允许您隐藏列表。而且还可以通过折叠打开和关闭列表之间的列表,更轻松地将问题从打开拖动到关闭。

调整时间跟踪小时的设置

并非世界上所有地区都有40小时的工作周,导致GitLab的时间跟踪对那些可能每周工作35小时的地区不准确。在12.1中,引入了实例级设置来配置一周中的小时数,并始终显示绝对小时以进行时间跟踪。

可扩展的runner

在12.1版本中,引入了一种强大的新方法来扩展GitLab Runner的自定义行为,可用于支持不同的配置平台,设置安全环境、实现合规性流程,配置安全变量或运行任何自定义代码。

多个差异讨论

在合并请求中讨论和请求更改是合并请求工作流程的核心,但单个行更改可能需要多次独立讨论。例如,对一行代码的正确性的讨论可能与通过代码库在其他地方讨论它的更广泛含义是分开的。

在GitLab 12.1中可以在合并请求差异中的同一行上存在多个讨论,从而可以并行地进行讨论并减少差异讨论中的干扰。

自动启用Rugged for NFS

删除Rugged并为所有Git操作启用Gitaly后,发现使用NFS时大型GitLab实例的严重性能下降。为了解决这些性能问题,通过添加并反向移植了功能标志,以重新启用Rugged实现,从而提高使用NFS的GitLab实例的性能。

如果GitLab检测到可以安全地启用Rugged,GitLab会自动重新启用Rugged以提高使用NFS的GitLab实例的性能。

.gitlab-ci.yml配置的default关键字

为了改善gitlab-ci.yml中顶级配置选项的组织和清晰度,现在为default的单独关键字移除一下关键字:before_script,after_script,image,services,variables和cache。此更改完全向后兼容,并且仍然遵循默认上下文之外的现有配置选项。

Geo验证附件,LFS对象和作业工件的文件完整性(PREMIUM及以上)

将数据从主节点复制到辅助节点时,数据完整性至关重要。Geo团队目前正在努力改进验证复制数据的方式。在12.1中,Geo现在计算传输后辅助节点上的附件,LFS对象和作业工件的校验和,将其与存储的校验和进行比较,如果不匹配则拒绝传输。请注意,如果和12.1之前版本同步,Geo目前不支持自动验证这些数据的方法。

Container Registry不兼容字符告警

GitLab Container Registry允许您构建,推送和共享Docker镜像/标签到GitLab。组、项目或分支名称中如果有特殊字符(例如前导下划线,尾随连字符/短划线,双连字符/破折号)并导航到项目的Container Registry,则会发生500错误。

Gitlab 12.1更新了Container Registry的登录页面,如果无法连接到Container Registry会提供错误的提示,并提供指向修复问题的文档的链接。

用于检索依赖关系列表数据的API (ULTIMATE版本)

现在可以通过API利用依赖关系列表中包含的数据,以便可以创建自动化流程或提供其他外部工具。此API应该可以更轻松,更快速地生成合规性报告所需的依赖关系数据。该API是公共的,可以以JSON格式检索此列表的信息。

开发人员角色可以修改/删除Git标记

Git标记对于引用特定的commit很有用,通常用于标记特定的版本。为了使开发团队更容易使用git标记,新版本中添加了允许开发人员修改和删除未受保护的标记的功能。受保护的标签仍需要Maintainer或Owner权限。

组级别更改问题里程碑(PREMIUM及以上)

用户可以在特定项目中同时更改许多问题的里程碑。在GitLab 12.1中,支持在组级别批量编辑许多问题里程碑的功能,从而可以更轻松地管理里程碑和问题。

Omnibus改进

GitLab 12.1 引入Mattermost 5.12,一个开源的Slack替代品,其最新版本包括无限滚动,僵尸网络帐户,更深入的Jira集成等等。此版本还包括安全更新,建议从早期版本升级。

OpenSSL依赖更新到OpenSSL 1.1.1c。

升级Chef版本至14。

支持自动处理pg-upgrade-script中的Geo节点。

GitLab Runner 12.1

同步也发布了GitLab Runner 12.1。主要变化包括:

添加自定义执行程序;

使用配置注入扩展自定义执行程序;

修复Windows Docker容器的artifact上传;

使用字符串包装子模块命令;

添加STOPSIGNAL到gitlab-runner docker镜像;

为Docker authConfig解析添加跟踪事项;

修复并发更新。

性能改进

对于各种规模的GitLab实例,持续提高GitLab的性能表现。GitLab 12.1的改进包括:

在计算问题参与者时减少Redis的使用。

当字段访问git存储库时,增加GraphQL复杂性比重。

在分支列表上异步加载分支差异信息以减少初始加载时间。

功能弃用

Kubernetes部署选择器中删除"app"标签匹配

GitLab 12.1删除了Kubernetes部署选择器的app标签匹配。要在部署板中查看这些部署,需要做的就是推送新部署,GitLab将使用新标签进行部署。

移除日期:2019年7月22日

删除对创建非RBAC Kubernetes群集的支持

GitLab 12.1在使用GKE集成时删除了创建非RBAC Kubernetes集群的功能。

从Kubernetes版本1.12开始,GKE集群默认情况下禁用基本身份验证和客户端证书颁发。

移除日期:2019年7月22日

openSUSE 42.3软件包的弃用

GitLab 12.1是openSUSE 42.3软件包的最后一个版本,从12.1开始使用 openSUSE 15.0软件包

迁移日期:2019年7月22日

Omnibus中删除MySQL客户端

在GitLab 12.1中,从GitLab包中删除了mysql-client,同时删除了对MySQL的支持。

移除日期:2019年7月22日

删除错误报告和日志记录的Sentry来自于UI的设置

错误报告和日志记录的Sentry设置将从GitLab 12.1中的UI中删除。自GitLab 11.11以来,这些设置已在gitlab.yml中提供。此外,还可以定义Sentry环境,以区分开发,登台和生产等多个部署。

移除日期:2019年7月22日

升级更新

对于Omnibus安装的自建实例,可以使用包管理器可以升级。CentOS下可以直接通过yum updata/install gitlab-ce自动完成升级过程。

有关升级到GitLab 12.1的重要说明

GitLab 12.1会升级Rails版本到5.2,这可能会导致零停机升级的问题。如果需要零停机时间,建议使用负载均衡器并逐渐踢出节点再进行升级。

与GitLab 12.0类似,GitLab 12.1会自动将PostgreSQL版本升级到10.7。

可通过创建/etc/gitlab/ disable-postgresql-upgrade来跳过PostreSQL 10.7的自动升级。

与GitLab 12.0相比,GitLab 12.1支持在主节点和所有辅助节点上更新GitLab Geo。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190724A0FAGM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励