上周,按照管理Gitlab发布了新的一个月度版本 15.1,新版本中新增加了SAML Group Sync、SLSA 2 级构建工件证明、包含CI/CD 配置的链接、通过 DORA指标增强对价值流的可见性等。更多功能请和虫虫一起学习。
GitLab 15.1主要改进
SAML组同步(PREMIUM)
新版本中可以使用SAML组链接将身份提供者中的组映射到自建的GitLab实例组。以前,该功能仅适用于GitLab Saas。当用户通过其SAML提供程序登录到GitLab时,组成员资格会更新。
新功能减少了GitLab管理员的工作量。
使用DORA指标提高对价值流的可见性(PREMIUM)
通过将四个DORA 指标图块添加到价值流分析仪表板,现在可以跟踪从构思到客户交付的团队绩效和价值流。
此外, DORA Time to restore service指标也添加了新的趋势图,以提供对软件稳定性和可靠性趋势的洞察。这个新图表显示了有关组织需要多长时间才能从生产故障中恢复的信息。
这是GitLab中开箱即用的第三个DOR图表。未来计划将继续提高DORA指标的可见性,并为第四个指标添加图表:更改失败率。
构建工件的SLSA-2证明
软件工件的供应链级别(SLSA)是一个安全框架,有助于确保软件供应链的安全性和完整性。默认情况下,GitLab Runner 现在能够为构建工件生成和生成符合SLSA-2的证明元数据。
如果工件存储在注册表中,则证明元数据与工件一起存储在该注册表中。否则,元数据将呈现在与工件一起存储的纯文本.json文件中。
这个新的证明信息可以帮助用户更轻松地验证构建工件没有被篡改。要启用该功能,只需在.gitlab-ci.yml文件配置:
RUNNER_GENERATE_ARTIFACTS_METADATA = "true"
https://youtu.be/MlIdqrDgI8U
管道编辑器链接到包含的CI/CD配置
典型的CI/CD配置使用include关键字来导入存储在其他文件或CI/CD模板中的配置。但是,在编辑或故障排除配置时,可能很难理解所有配置如何协同工作,include配置在.gitlab-ci-yml中不能直接查看。
在新版本中,将所有包含的配置文件和模板的链接添加到管道编辑器。现在,可以轻松访问和查看管道使用的所有CI/CD配置,从而更轻松地管理大型和复杂的管道。
API包含有关谁添加了成员的其他详细信息
成员API现在返回有关谁将用户添加到新created_by字段中的项目或组的更多信息。
改进了价值流分析中的洞察发现
价值流分析仪表板对每个阶段的数据的方式进行了多项增强。在阶段表中,新添加Last even列以显示最近的工作流事件,可以按持续时间对项目进行排序。
这些更改使用户可以更轻松地重新安排事件并更快地发现见解。这些见解可能用于检测减缓交付速度的瓶颈,或寻找减少软件供应链每个阶段所花费时间的机会。
使用API按ID搜索PAT
用户现在可以通过PAT ID 搜索其个人访问令牌 (PAT)。之前,用户只能用 API列出所有的个人访问令牌。而没有接口提供查询。
GitLab Workflow
GitLab Workflowfor VS Code 的入门一直具有挑战性:安装扩展程序,只是为了了解需要遵循几个额外的步骤才能正确设置扩展程序。入门最困难的方面是生成具有正确范围的个人访问令牌并将其添加到扩展中。
GitLab Workflow 的 v3.47.0版本现在支持GitLabOAuth,无需手动生成令牌。这使得VS Code中更轻松地开始使用GitLab。
查看组项目的共享运行器使用情况
对公共项目使用共享SaaS运行程序具有与项目所在的相应层相同的CI/CD时间限制。管理组的用户可以看到整个组的总runner使用情况,但无法在一个地方查看单个项目的使用情况。这使得很难确定组内哪些项目使用的CI/CD时间最多。
新版本中,可以按项目查看组的SaaS运行程序使用情况,就像在个人命名空间中一样。现在可以更轻松地找到使用最多CI/CD项目,并在必要时提高其管道效率。
使用GraphQL Release API创建带注释的标签
以前,只能在使用GraphQL API创建发布时创建轻量级标签。新版中可以添加一个可选tagMessage参数以在创建发布时创建带注释的标签。可以将相关信息与新标签一起包含在内,因此下游用户和应用程序可以拥有额外的上下文。
通过用户API部署密钥
以前,要为一组项目启用部署密钥,需要管理员访问权限才能检索id部署密钥。
此版本添加了一个新的API 接口
GET /users/:id_or_username/project_deploy_keys
检索给定用户可访问的所有密钥,因此无需等待管理员即可完成此任务。在未来的迭代中,API 还将包括公共部署密钥。
改进GitLab Saas的 SAML Group Link 稳健性(PREMIUM)
以前,GitLab群组维护者必须确保为所有使用SAML登录的用户创建群组链接。否则,不在任何链接组中的用户可以成功进行身份验证,但会立即删除他们的访问权限和 SAML 身份。
现在,用户不会被删除,而是自动分配了默认角色。这减轻了组维护者必须确保每个用户都有一个组链接的负担。
Python notebook MR中的渲染图像
Python notebook是数据科学家和机器学习工程师工作流程的关键。这些文件通常通过静态图像显示图表和图形,以帮助可视化笔记本。
在此版本中,在合并请求和提交视图中可以呈现这些图像,从而在查看代码更改(包括带有图像的Python笔记本)时提供更好的用户体验。
从管道图中重试下游管道
以前,要重试下游管道,必须导航到管道并选择重试。这行得通,但是当有多个下游管道时,这是一个具有挑战性的体验。必须进入要重试的每个单独的管道并找到重试选项,这很麻烦。
在新版本中,通过添加直接从管道图重试下游管道的选项来改进用户体验,而无需进入每个管道的详细信息页面。
允许CI_JOB_TOKEN对 Release Links API 进行身份验证
以前,Release links API 只接受个人访问令牌或项目访问令牌进行身份验证。通过此更新,CI_JOB_TOKEN现在接受a进行身份验证,以与 API 一起使用来操 GitLab发布链接。
使用 Releases API 创建带注释的标签
以前,只能在使用Releases API创建发布时创建轻量级标签。新版本中可选tag_message参数以在创建发布时创建带注释的标签。这使能够将相关信息与新标签一起包含在内,因此下游用户和应用程序可以拥有额外的上下文。
强制停止环境
在15.1中, force为停止环境 API 调用添加了一个选项。这允许在不需要on_stop运行这些定义的操作的情况下删除活动环境而不运行指定的作业。
Kubernetes的GitLab代理支持代理连接
许多用户需要代理才能将 ubernetes集群连接到GitLab。之前,Kubernetes 的GitLab代理的默认安装方法不支持代理连接。现在,可以使Helm包HTTP_PROXY中的环境变量agentk来支持代理连接。
Omnibus套件更新
GitLab 15.1中Mattermost版本更新为6.7,其最新版本包括 Playbooks 任务到期日期等等功能,另外还有安全更新,建议从早期版本升级。
Debian 9 (stretch) 将于2022 6月终止长期支持。因此,GitLab 15.1将停止在Debian 9 (stretch) Omnibus安装包。
Gitlab Runner 15.1
同期还还发布了GitLab Runner 15.1。新功能包括:
Docker执行器中使用Podman作为容器运行时,添加软件证明(元数据)以在 GitLab CI 中启用 SLSA 2
Bug修复:
Kubernetes 执行器忽略Docker ENTRYPOINT的runner助手镜像。GitLab Runner 15.0.0 的 Docker Hub镜像只有amd64、没有arm64或ppc64le
GitLab Chart改进
Helm图表中默认启用Kubernetes代理服务器
在自建实例中使用Kubernetes代理的第一步是启用代理服务器,这是Kubernetes代理的后端服务。在GitLab 14.8中,对Omnibus的安装启用了代理服务器。
该功能在过去几个月中已经成熟,因此现在在GitLab Helm中默认启用代理服务器,以简化GitLab管理员的设置。除了默认启用之外,代理服务器还接受各种配置选项以根据您的需要对其进行自定义。
kubectl对代理 CI/CD 工作流程的更多要求
如果使用GitLab Kubernetes代理和GitLab CI/CD,之前无法使用kubectl exec、attach、cp或port-forward调用。基本中。基于SPDY协议支持这些调用。如果负载均衡器或反向代理支持SPDY,现在可以在CI作业中使用kubectl exec、attach、cp或port-forward。GitLab 的 Helm Chart 和 Linux (Omnibus) 安装都使用 NGINX 并配置为支持开箱即用的 SPDY。
不幸的是,一些云供应商不支持 SPDY。GitLab正在与Kubernetes社区合作,在Kubernetes中提供Websockets支持,这将成为许多云托管 GitLab 实例的解决方案,包括GitLab SaaS。
安全和合规性
启用FIPS的红帽UBI依赖扫描镜像(PREMIUM)
Java依赖扫描(gemnasium-maven) 现在可在启用FIPS的Red Hat UBI镜像上使用。启用FIPS模式后,该镜像使RedHat UBI 8 OpenJDK包,而不是asdf-java默认使用的不符合FIPS的包。启用FIPS模式后,仅支持Java 7、11和17。
要开始使用符合FIPS的依赖扫描镜像进行扫描,只需在CI/CD文件中包含依赖扫描模板并将DS_IMAGE_SUFFIX变量设置为"-fips".
静态分析分析器更新
GitLab 静态分析包括GitLab 静态分析团队积极管理、维护和更新的许多安全分析器。15.1版本里分析器更新主要变化:
Kics分析器更新到 1.5.0 版:
为 Ansible、CloudFormation、Docker Compose、Kubernetes 和 Terraform 添加82个新查询(规则);
修复/更新现有查询;
修复扫描和分析中的错误;
提高性能。
秘密检测分析器:新版本提供更好的离线支持和更轻松的调试:
改进日志记录;
git fetch如果失败,请使用存储库的签出副本;
如果自动差异检测失败,则回退到扫描最新提交;
安全代码扫描分析器:
Semgrep分析器更新为使用最新版本的 GitLab 管理的规则集。
删除到Gosec规则 ID G104 的不正确映射。
添加规则G402 以检测1.2之前的TLS版本的使用。
SpotBugs分析器已更新至 SpotBugs 4.7.0和find-sec-bugs 1.12.0。主要更新:
更新gradle并grails支持 Java 17;
将 Java 17 设置为系统范围的默认版本;
对 Gradle 项目使用“assemble”任务,而不是“build”,以支持自定义GRADLE_CLI_OPTS;
添加额外的检测规则。
包含GitLab管理的SAST模板( SAST.gitlab-ci.yml),则无需执行任何操作即可接收这些更新。但是,如果使用覆盖或自定义您CI/CD模板,则需要更新的CI/CD配置。
防止用户使用已知的不安全公钥
当尝试将新的SSH密钥添加到GitLab帐户时,会根据已知已泄露的SSH 钥列表检查该密钥。用户无法将此列表中的密钥添加到任GitLab 帐户。这有助于保护您GitLab实例。
在组级别阻止Git访问协议
为了提高安全性,现在可以阻止非组级别使用的Git访问协议。这类似于 GitLab 管理员设置,但现在可以按组设置。默认情况下,HTTP(S)和SSH均已启用。在组的Settings > General > Permissions中,滚动到启用git访问协议并删除不使用的任何协议。
查看runner的升级状态(ULTIMATE)
随着组织中安装的运行器数量增加到数百或数千,确定哪些运行器已过时变得更具挑战性。未能更新的运行器的GitLab Runner版本不仅意味着没有使用最新功能,还可能意味着可能存在安全隐患。
在管理区域中,现在可以一目了然地查看环境中哪些运行器已过时。徽章指示是否推荐升级(针对补丁)和/或升级是否可用(针对次要或主要升级)。新功能可以更轻松地维护runner并降低使用过时版本的风险。
可选择忽略扫描 NPM 开发依赖项(ULTIMATE)
GitLab Dependency Scanner分析项目中使用的应用程序库中的漏洞,无论这些库是常规依赖项还是开发依赖项。一些用户希望只关注常规依赖项,而忽略在开发依赖项中发现的任何漏洞。
现在可以通过将DS_INCLUDE_DEV_DEPENDENCIES变量设置为NPM项目从扫描中排除这些开发依赖项"false"。
容器扫描分析器更新
GitLab Container Scanning支持Trivy和Grype分析器。新版中更新如下:
Trivy分析器更新到版本0.28.1。
Grype分析器更新到版本0.38.0。
CS_DISABLE_LANGUAGE_VULNERABILITY_SCAN: "false"添加了对设置变量时检测.NET 包中的漏洞的支持。
这些更新带来了额外的覆盖范围、错误修复和改进。
GitLab Geo集群
Geo通过复制视图的链接提高可观察性(PREMIUM)
Geo链接直接从主站点的管理仪表板链接到辅助站点上每种数据类型的复制视图。现在可以使用主站点管理仪表板上的可点击链接深入了解辅助站点上每种数据类型的单个对象列表。
这将有助于解决辅助站点的复制和验证问题,允许系统管理员触发重新同步并重新验证任何无法同步的对象。它还通过显示进度详细信息以及每个对象的下一次同步尝试、上次成功同步和验证时间等信息,提高了复制和验证过程的整体可观察性。
Geo支持 OCI 容器镜像(PREMIUM)
在GitLab 15.1 中,Geo支持OCI 容器镜像格式的复制。OCI容器镜像越来越受欢迎,现在可以跨地理站点复制这些镜像,类似于Docker manifest V1和 V2 镜像。
对特定于站点的URL的Geo代理支持(PREMIUM)
在GitLab 14.6 中,Geo 允许辅助站点透明地将写入请求代理到主站点,同时加速大多数读取请求。到目前为止,该能需要配置统一的URL。
在GitLab 15.1中,Geo 的Web UI代理功能默认使用辅助站点特定URL。喜欢为网站维护不同URL的客户现在可以利用完整的Web UI体验。
对象存储复制的本机Geo支持普遍可用(PREMIUM)
经过广泛的测试和修复一些突出的问题,对象存储复制的原生Geo支持现已普遍可用。Geo现在原生支持在对象存储中复制数据,例如LFS对象、作业工件和上传。以前,可以Geo 配置为使用对象存储,但是内容的复制始终留给对象存储提供者。当用户依赖不支持任何复制逻辑的本地存储设备时,这会施加限制。
可以使用Geo将数据复制到不同地区的不同对象存储提供商(例如欧洲的 Amazon 和美国的 Microsoft),以及使用本地存储(例如通过 MinIO)并使用 Geo 将数据复制到辅助网站。
数据验证将在以后的迭代中添加。
Bug修复
GitLab 15.1 中一些值得注意的错误修复是:
PyPI包不符合PEP 503。
审核员无法查看依赖代理页面。
未达到 Debian 版本的最后一个正则表达式组。
项目的非成员可以订阅新的发布通知,但不会发送给他们。
当作业存在结构完整性问题时,部署记录保持在运行状态。
修复标签页上关联的发布链接。
从问题列表中删除需求。
Epic 批量更新意外复制和删除标签。
错误:NoMethodError: undefined method 'key_from_fallback_message_id' for Gitl。
错误:Encoding::UndefinedConversionError: "\xEF" from ASCII-8BIT to UTF-8。
错误:NoMethodError: undefined method 'find' for nil:NilClass。
切换到旧版本时,新设计版本消失。
在导航栏中显示活动的CRM路线。
组访问令牌(机器人用户)不应是最后一个明确的顶级组所有者。
修复2FA提示阻止QR码扫描。
传递COVFUZZ_ADDITIONAL_ARGS到下划线模糊器引擎。
身份验证配置字段无法正确处理转义序列 (\H)。
错误:ActiveRecord::NotNullViolation: PG::NotNullViolation: ERROR: null value。
确保在后续扫描中显示的已解决漏洞标记为已检测到。
author_id在数据库中设置时删除用户失败。
GitLab 14.5 迁移UpdateVulnerabilityOccurrencesLocation不会将自身标记为完成。
审计员看不到项目政策。
项目导出失败。
Gitlab 迁移的合并请求评论导入不一致。
迁移组和项目时的竞争条件。
删除时未从 Elasticsearch 中清除提交。
用户未登录时导航栏搜索字段无法正确展开。
在 GitLab 15.0 中使用 OpenSearch 在 UI 中显示错误“Elasticsearch version not co。
跨具有不同默认分支的多个存储库进行查询时,代码搜索返回 404。
CI_DEPLOY_*gitlab-deploy-token如果在组设置中定义了变量,则未设置。
自定义SVG徽标在某些邮件客户端中未正确显示。
未经身份验证访问 Terraform 模块的行为不一致。
500删除基于证书的 Kubernetes 集群时出错。
KAS不使用相对URL。
内部服务器关闭顺序不正确。
从v14.8.4升级到v14.9.1时的Redmine 集成问题。
测试报告屏幕应包括矩阵 ID 作为作业名称的一部分,以区分矩阵元素。
覆盖图上的x轴不成比例。
未显示JUnit测试报告。
在问题板侧边栏上,受让人弹出框不显示数据。
Vue 问题列表过滤栏中的标记行为不正确。
迭代报告错误。
错误:ActiveModel::MissingAttributeError: missing attribute: noteable_id。
不发送“漏洞”Slack 通知。
性能改进
在GitLab15.1 中,在问题、项目、里程碑等提供了性能改进,其主要改进包括:
减小包页面包大小;
优化Notes::CopyServiceSQL 查询;
提高 Elasticsearch 限制项目和命名空间检查的性能;
使用 Kubernetes 代理提高部署速度;
问题创建很慢,因为它尝试更新项目计数器缓存;
转换为新的 GraphQL 解释器运行时。
可用性改进
在GitLab 15.1 中,在问题、项目、里程碑等提供了可用性改进。其主要改进包括:
.gitlab-ci.yml架构缺少对!reference。
重新设计包细节加载体验。
改进容器注册表复制工具提示。
使用时澄清allow_failure默认值rules。
在组使用配额页面上显示子组中的项目。
按使用配额页面上使用的分钟数对项目进行排。
允许OPTIONSOAuth2 令牌接口的方法。
功能删除和变更
相关信息请查看官方页面实时在线信息。
升级更新
Omnibus
通过Omnibus安装的自建实例可直接使用Linux包管理器可以升级。例如对CentOS:
yum updata/install gitlab-ce
就能自动完成升级。
Docker
先停止和删除旧的容器:
sudo docker stop gitlab
sudo docker rm gitlab
然后Pull官方最新镜像:
sudo docker pull gitlab/gitlab-ce:latest
重新启动容器(启动参数和以前保持一致)即可,比如:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
Docker compose
通过:
docker-compose pull
docker-compose up -d