GitLab 12.0 変更点まとめ

# はじめに

GitLab 12.0が2019年6月22日にリリースされました！  
本記事では新機能についてまとめようと思います。  

内容は正確を期するよう注意を払っておりますが、あくまで個人の備忘録のようなものですので、以下のGitLabの公式ページもご確認ください。

[GitLab 12.0](https://about.gitlab.com/2019/06/22/gitlab-12-0-released/)

# 無料範囲での新機能

## Git integration for JupyterHub

GitLabと連携しているkubernetesクラスタにJupyterHubがインストールされている場合、JupyterLabのgit拡張機能が自動で設定されます。  
※JupyterHubは、PythonなどをWEB IDEでコーディングできるJupyterLabを複数人で使うためのものです。

## Multiple extends support in .gitlab-ci.yml

extendsに複数のエントリ名を指定できます。
変数の値は記載した順にマージされ、同一のキーであれば上書きされていくようです。

```
.only-important:
  only:
    - master
    - stable
  tags:
    - production

.in-docker:
  tags:
    - docker
  image: alpine

rspec:
  extends:
    - .only-important
    - .in-docker
  script:
    - rake rspec
```

上記を実行するとrspecジョブは以下のようになります。

```
rspec:
  only:
    - master
    - stable
  tags:
    - docker
  image: alpine
  script:
    - rake rspec
```

## Collapsible job logs

CIパイプラインのジョブは、実行ログをGitLabの画面上から確認できますが  
そのログの内容をセクションごとに折りたたんだり、展開することができるため、ログが見やすくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433578/0e212afe-a212-fb39-09ce-fc9f89760c6a.png)


## Group-specific notification email addresses

グループごとに通知のメールアドレスを設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433578/6f1eb2e7-792b-5c5d-ef12-3ebb9081658e.png)


## Email notifications for broken master builds

CIパイプラインが失敗した場合に、メール通知する機能があります。  
これまでは、全ての失敗で通知が行われていましたが  
デフォルトブランチでの失敗の場合のみに通知するようにできます。

## Improved support for passing variables to downstream pipelines

CIパイプラインで別のプロジェクトのパイプラインをトリガーする機能が11.8で追加されています。  
これまでは変数のみを下流のパイプラインに渡せましたが、環境変数も渡すことができるようになりました。

## Faster shallow clones by default for all new projects in GitLab CI/CD

CIパイプラインでは、GIT_DEPTHを定義することでshallow cloneする深度を指定可能でしたが  
プロジェクトにこの深度を設定できるようになりました。なおデフォルト値があり、50が指定されているようです。  
※shallow cloneは最新の履歴だけcloneすることで、cloneを高速に完了することができるものです。

## Developers now can delete tags from the Container Registry via API

これまでGitLabコンテナレジストリのイメージタグは、画面上から削除していましたが、APIで削除できるようになりました。

## Git object deduplication (Beta)

この機能はBeta版です。プロジェクトをforkすることで、あるプロジェクトにマージリクエストを出す前に、forkしたプロジェクトで色々な検証をしてからマージリクエストを出すということはよく行われることですが、有名なプロジェクトになると、forkされたプロジェクトによって、サーバ側のストレージを圧迫することがあります。  
この機能がインスタンスの管理者によって有効にされると、Gitオブジェクトの重複を削減して、ストレージを節約できます。

## Enabled Git bitmap hash cache to speedup repacking

リポジトリはbitmap indexという方式で管理されていますが、性能向上のために、bitmap indexにハッシュキャッシュが保存されます。

## Validate Kubernetes credentials provided at cluster creation

既存のKubernetes clusterとGitLabを連携する際、いくつかの設定をGitLabに入力しますが、入力した設定に不備があるとエラーが発生します。  
エラーの原因を切り分けやすくするために、Kuberenetesのエンドポイントへの到達チェック、トークンと証明書の検証を行い、問題があれば画面にエラーを表示するようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433578/5dc145a2-f7af-9ceb-6a53-89b83d360eb6.png)


## Use GitLab Serverless with existing Knative installations

これまでは、GitLabを通したKnativeの構築をすることだけが可能でしたが、既存のKnativeと連携可能になります。

## Link and access a Zoom meeting from an issue

GitLabのIssueからZoomの電話会議へ参加しやすくなりました。
GitLabのIssueにZoomの電話会議へのリンクを貼り付けると、GitLabはZoomへのリンクを検知して、「Join Zoom meeting」ボタンを表示します。

## Link to external dashboards from environment dashboards

GitLab内のMonitoringのページに、外部の監視ダッシュボード（例：Zabbix,Grafana)へのリンクボタンをつけることができます。

## Issue API now responds with task completion statistics

Issueに紐づけたタスクの進捗状況をAPIで取得可能になりました。

## New threaded discussion design

マージリクエストやissues内のdiscussionのデザインが改善されます。

## Additional issue stats from the issues API

issuesの統計（クローズ数、オープン数など）をAPIで取得可能になりました。

## Support for AsciiDoc include directive

AsciiDocのincludeが使えるようになりました。includeで同じブランチ、タグ内のテキストファイルを表示できるようになります。
※AsciiDocはmarkdownのようなマークアップ言語で、markdownとの違いは表に強い等

## GitLab Runner 12.0

GitLab Runner 12.0が利用可能になりました。
主要な変更は以下です。

* Docker Credentials helper support
* Add configuration of access_level for runners on registration
* Allow configuration of Pod Security Context by Kubernetes Executor
* Make PowerShell default for new registered Windows shell executors
* Support windows docker volumes configuration

# 有料範囲での新機能

## Visual Reviews

GitLabで開発しているアプリケーションの画面に対して、フィードバックコメントを残すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433578/58feea90-08c8-59b1-a58f-4497fd727aa0.png)


## Project dependency list

プロジェクトで使用している依存パッケージのリストを表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433578/a4090737-ec5f-65d8-8781-acd40db24593.png)


## Restrict access by IP address

グループにアクセス可能なIPアドレスを設定することで  
特定のコンテンツにアクセス可能なIPアドレスを限定することができます。

## File syncing to Web Terminal

WEB IDEでのファイルの変更をWEB Terminalに反映することができます。  
※WEB Terminalは、WEB画面からRunnerと対話する機能です。

## Sequential merge trains

masterまたはreleaseのブランチを正しい状態に保つための機能です。  
マージリクエストの複数のパイプラインを、キューに入れて順番に処理することによって実現します。

## Vulnerability database available for viewing and accepting contributions

Gemnasiumの脆弱性データベースで、自分が関心のある脆弱性がチェックの対象かを確認できます。
※Gemnasiumは、プロジェクトで使用しているライブラリに問題がないかといったチェックをするサービスでしたが、GitLabに2018年に買収されました。既存のGemnasiumのユーザはGitLabへ移行するように案内されています。

## Add a reason when dismissing vulnerabilities

プロジェクトで見つかった脆弱性の修正を却下した場合、  
レビューに役立てるために、その却下理由を記載できます。

## Lock all memberships to LDAP

LDAPでユーザを管理している場合、LDAP以外でユーザの権限を変更できないようにできます。

## Prevent non-admins from deleting projects

adminユーザ以外がプロジェクトを削除するのを防止できます。

## GitLab Insights

issuesがクローズされるまでの時間やマージリクエストがマージされるまでの時間などの確認することができます。

## Dependency proxy is enabled per-group by default

Dependency proxyがグループごとにデフォルトで有効になります。  
Dependency proxyは11.11で導入されました。Dockerイメージをキャッシュし高速に利用可能になる機能です。

## Maven template now automatically pushes to the Maven Repository

Maven.gitlab-ci.ymlを変更することで、CI/CDパイプラインからJava dependenciesを、11.3から導入されたGitLab Maven Repositoryに簡単にアップロードできます。

## Add ability to query epics in GraphQL

GraphQL APIで、epicsをクエリできるようになります。
GraphQL APIは無料範囲の機能ですが、epicsのみ有料範囲の機能になります。
※epicsはあるテーマについて、複数のissuesをプロジェクトを跨いで管理することが可能な有料機能です。
※GraphQL APIは、Facebookにより開発されたオープンソースのAPIのための言語です。RESTAPIが概念的なものだったのに対し、型決めされた仕様をもつことが特徴です。

## Enhancements for system notes for adding and removing epic relationships

epicの親子関係が追加・削除されたときにsystem notesとして保存されるようになりました。

## Add and remove child epics via quick actions

GitLabのquick actions機能で、”/child_epic”と”/remove_child_epic”を使用して、子epicを素早く追加・削除できるようになりました。
※quick actionはepicだけでなく、マージリクエストなどでも使用可能なテキストショートカットです。

## No longer require Docker in Docker for DAST

Dynamic Application Security Testing (DAST) の機能はこれまで、Docker in Dockerを使う必要がありましたが、不要になりました。
※DASTは、CI/CIパイプラインの延長で、アプリケーションに脆弱性が存在するかチェックして、教えてくれる有料機能です。