返回 登录
0

GitLab 7.12:SAML、Merge Request Approvers和.gitlab-ci.yml

阅读26923

GitLab,是一个利用Ruby on Rails开发的开源应用程序,实现自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

GitLab进入了新的里程碑——GitLab 7.12正式到来。以下为官方发布日志摘译:

这次的发布带来了大量的新特性和修复,主要是面向Community Edition (CE)、Enterprise Edition (EE)和Continuous Integration (CI)。在CE和EE中,GitLab开始支持使用SAML身份验证,这一点曾被广泛要求,我们也非常高兴CERN参与了贡献。在GitLab Enterprise Edition中,你可以邀请多个人来批准某个合并请求。在GitLab CI中,我们推出了.gitlab-ci.yml文件,使得更容易管理job 脚本。

这个月的MVP很好选择,他是来自CERN的Alexandre Lossent,Alexandre 贡献了他们写的SAML代码。我们很高兴有这个贡献,以及确信你会受用。感谢Alexandre!

SAML 支持

由于得到Alexandre的贡献,GitLab现在可以成为一个SAML 2.0 Service Provider。这使得GitLab 以SAML 2.0 Identity Provider(IdP,如Microsoft Active Directory Federation Services)身份来提供一个用户认证机制。

参见如何设置SAML集成的文档

Web Hook评论

现在有了一个新的可用的Web Hook,它将连接所有的评论。你可以用它来增加额外的自动化和集成至GitLab。例如,当有人评论一个合并请求时,你可以把它连接至内部的系统,或者你可以根据评论内容运行一个特定的构建。

更好的Web Editor性能

每一个GitLab新版本都比过去的更快,但这个版本中,我们做了一些其他的工作。简而言之,不再是通过克隆一个空的仓库至一个临时的位置来执行Web界面代码更改,在那儿提交,然后Push更新回至空的仓库,而是我们现在可以直接提交更改至空仓库。这显著提高了Web Editor的性能。

UI更新

每个月我们都尝试和调整我们的UI,让它变得更好、更美观和更加直观,这个月依然这么做了。

我们已经迁移你的个人资料页,将它链接到底部左下角,以及更新各个UI部分的外观。

图片描述

Merge Request Approvers(仅支持EE版本)

如果你想确保你最喜爱项目在合并请求前可以有超过一个人的review,在新版本中,你就可以配置一个最低Merge Request批准的数值。

图片描述

图片描述

Git Hook来检查Maximum File Size(仅支持EE版本)

我们增加了一个新的Git Hook,允许你限制即将提交的大文件。你可以很简单地设置一个门槛,GitLab 将会阻止所有包含太大文件的Git pushes。

LDAP Group Sync改进(仅支持EE版本)

我们在GitLab EE上改进了LDAP Group同步。当同步时它会检查更多的特殊属性,防止因为同步而删除最后组里的owner。

.gitlab-ci.yml文件替代jobs(CI)

在5月6日,我们用存储在代码仓库中的.gitlab-ci.yml文件替换GitLab CI jobs。优点被列出在公告中,但主要的是:

  1. 既然构建脚本是由版本控制的,更多人可以看到它且提出修改建议;
  2. 较旧的和较新的分支都可以正确地构建,因为他们能够包含一个不同的构建文件;
  3. Forks自动获得一个正确的构建脚本,当他们向上合并获得更新时;
  4. 在没有破坏其他分支的情况下,你可以在你的分支中尝试CI构建设置;

上面的事情不可能用类似Jenkins脚本实现,因为它与整个项目相关联。

它是如何工作

GitLab发送web-hook和.gitlab-ci.yml内容至CI Coordinator,基于YAML文件来创建builds。反过来,这些builds通过Runners来执行。

这里是一个YAML文件例子:

before_script:
  - gem install bundler
  - bundle install
  - bundle exec rake db:create

rspec:
  script: "rake spec"
  tags:
    - ruby
    - postgres
  only:
    - branches

spinach:
  script: "rake spinach"
  tags:
    - ruby
    - mysql
  except:
    - tags

staging:
  script: "cap deploy staging"
  type: deploy
  tags:
    - capistrano
    - debian
  except:
    - stable

production:
  script:
    - cap deploy production
    - cap notify
  type: deploy
  tags:
    - capistrano
    - debian
  only:
    - master
    - /^deploy-.*$/

我们包含了一个Lint工具来检查你的语法。它现在可以在每一个 GitLab CI中获得,通过url /lint的方式。如果你在push 你的代码后 .gitlab-ci.yml出现问题,你将能够在提交页中看到错误。

before_script 部分将在每一个job前被执行。你可以通过添加type: deploy从而实现定义一个部署job。每个job包含的参数,例如script (shell script)、tags (只有运行这个tag/tags才允许选择这个构建),以及onlyexcept 参数来定义允许运行构建的分支名称。only 部分优先于 “except”。参见:Configuration of your builds with .gitlab-ci.yml

新版本的灵感来自已经使用YAML文件的Travis CI和Circle CI的工作。首先,我们考虑使用开源的Travis CI模块,但是我们最终还是自己编译了,所以我们可以提供:

  1. 定制化的部署jobs;
  2. 能够在Metal、VM和Docker images运行jobs;
  3. 能够每次在同一个台机器上运行(例如性能测试);
  4. 能够运行在特殊的架构上(例如一个Raspberry Pi 2);
  5. 能够运行在特殊地方或特定证书的机器上;
  6. 支持简单和浅显的YAML文件的语法;
  7. 命名jobs,实现轻易地辨别。

因为这些,“one image per architecture and that’s it”不再成立。当你能够tag runners和jobs,这让你在分配一个job给指定的runner时拥有更多的自由。我们希望新版本具有着Jenkins的自由和Travis CI的用户友好。

迁移

当升级到GitLab 7.12,你的CI job脚本将被自动转变成一个示例.gitlab-ci.yml 文件,你可以在GitLab CI项目页查看和下载。

在push引发一个构建后,GitLab会从仓库的根发送.gitlab-ci.yml 文件。如果不存在, GitLab CI 将利用已生成的示例脚本。这意味着你的项目没有更新好。然而,我们建议你尽快添加.gitlab-ci.yml 文件至你的仓库的根。

你应该添加.gitlab-ci.yml 文件至你项目的所有分支中,特别是正进行接受提交中的Git pushes。

BETA: Secret Variables for runner(CI)

我们增加了一个GitLab CI的新功能,允许你面向runners设置私密变量。Secret Variables将通过runner来设置至环境中,且可从构建日志中隐藏。使用它们的密钥、secret keys或者其他任何东西。确保你的runner版本为0.4或更高版本。

目前,此功能处于测试阶段。添加至GitLab CI 7.12 的Secrets被存储在他的SQL数据中,并没有加密。我们将在7.13中进行加密。

图片描述

其他变化:

此版本有太多的改进,包括安全补丁,所有更新请参见更新日志

升级要点

此版本仅是微小的迁移,如果你目前使用GitLab 7.11 CE或EE,你直接可以在线升级7.12。

  • 当使用Omnibus 程序包时,更新行为要用‘secret_token’设置。

如果你针对在 /etc/gitlab/gitlab.rb 中的 gitlab_rails['secret_token']gitlab_shell['secret_token']gitlab_ci['secret_token'] 设置一个自定义的值,那么请仔细检查在 gitlab.rb 中的是否值匹配/etc/gitlab/gitlab-secrets.json 中的值。如果一些值不匹配,从gitlab-secrets.json 复制值到此前升级至GitLab 7.12的 gitlab.rb

在7.12之前,你在 gitlab.rb 中任何的 secret_token 值实际上是忽略了支持所有的gitlab-secrets.json

在大多数的GitLab Omnibus安装中,‘secret_token’仅在gitlab-secrets.json 中设置,并且不需要任何的操作。

这个变化仅适用于GitLab Omnibus程序包。从源头的安装不受影响。

  • 更改操作系统初始化的检测

当运行gitlab-ctl reconfigure omnibus-gitlab 时,需要决定系统是否使用SysV初始化、Upstart 或Systemd,再安装gitlab-runsvdir 服务。

在这个版本之前,这个决定是通过观察该平台,操作系统版本和系统默认的初始化是什么来实现。

这是不可靠的,由于omnibus-gitlab被安装在多个OS代码上,导致处理这个变得复杂和易于出错。

从这个版本开始,这样的做法已经被替换了,检测是通过查询OS初始化系统来完成的。基于这个响应gitlab-runsvdir 服务已经被安装了。

如果你偶然遇到一些如omnibus-gitlab README中描述的问题,请尝试使用一些变通方案,并在omnibus-gitlab问题跟踪器汇总提交问题。

  • 更新了推荐的SSL加密套件

Logjam漏洞,我们更新了推荐的SSL加密套件。详情参加:GitLab.com and Logjam

安装

如果你正创建一个新的GitLab安装请参见GitLab下载页

更新

Updating

Enterprise Edition

上面提到的仅支持EE的特性,如 LDAP group支持也可以在GitLab Enterprise Edition中找到。完整列表参见:GitLab EE


英文原文:GitLab 7.12 released with SAML support, Merge Request Approvers and .gitlab-ci.yml

评论