GitLab 9.2 リリース

# GitLab 9.2 リリース
毎月の定例リリース、[GitLab 9.2 がリリース](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/)されました! 9.2 へのアップグレードは一部のプロジェクト名が強制的に変更されますので、要注意です。


## その前に
### [This month's Most Valuable Person MVP is Dosuken Shinya](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#mvp)
GitLab コントリビューターの中から毎月最も貢献した人を MVP に選出しています。(おそらく、社員の方は除くだとおもうんですが、どうでしょう?)

9.2 では日本人の [Dosuken Shinya](https://gitlab.com/dosuken123) さんが選ばれました!

過去には、仙台で GitLab Meetup をされている Hiroyuki Sato さんも受賞してたりします。日本人の開発者もちらほらいますし、[GitLab Meetup](https://gitlab-jp.connpass.com/) も盛り上がっていますので、GitLab のユーザーはかなり増えているんでしょうね。


### GitLab.com サブスクリプション
2017/05 から GitLab.com のサブスクリプションが開始されました。[先月紹介しています。](http://qiita.com/masakura/items/4cbf0d5ab93c9c97a28a#introducing-paid-subscriptions-on-gitlabcom)

GitLab.com 社の説明を読むと、無料プランでは GitLab EE の機能は使えなさそうに見えたのですが、依然として GitLab EE の機能は使えます。(2017/5/23 時点) ですので、EE の機能が欲しいからお金を払うという必要はなさそうです。

将来どうなるかについては分かりません


### Omnibus Package の Mattermost が起動しません
~~9.2 の Omnibus Package の Mattermost は設定ファイルに不備があって起動しません。Omnibus Package を使っている公式 Docker Image も同様です。~~問題を解消した[GitLab 9.2.1](https://about.gitlab.com/2017/05/23/gitlab-9-dot-2-dot-1-released/) がリリースされました。以下の手順は不要です。

手元で、9.1.3 -> 9.2 のアップグレードをしてみましたが、503 が表示され、Mattermost が起動しませんでした。

対策は [GitLab Mattermost 503 after gitlab-ctl reconfigure in 9.2.0-rc7](https://gitlab.com/gitlab-org/gitlab-ce/issues/32673) に詳しく書いてあります。

`/var/opt/gitlab/mattermost/config.json` フィアルを以下のように修正して、`gitlab-ctl restart` で再起動してください。

```diff
-     "DataSourceSearchReplicas": "[]"
+     "DataSourceSearchReplicas": []
```

なお、このファイルは `gitlab-ctl reconfigure` で再生成されます。お気をつけください。


## 変更点
個人的な気になったを紹介します。


### [Multiple Assignees for Issues](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#multiple-assignees-for-issues) EE Only
GitLab CE では使えませんが、Issue で担当者を複数割り当てられるようになりました。マネージャーの方にとっては嬉しい変更だと思います。

(個人的には、担当者は一人のみの方が好み)


### [Internationalized Cycle Analytics](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#internationalized-cycle-analytics)
GitLab は今後多言語かも視野に入れているそうで、手始めに Cycle Analytics をスペイン語とドイツ語に対応させたそうです。

設定は、`Settings` -> `Profile` -> `Preferred language` で変更できます。

![gitlab1.png](https://qiita-image-store.s3.amazonaws.com/0/103982/d72c31c7-59b9-5e5d-fbca-59a23e83d0fd.png)

翻訳者を募集しています。[Internationalization for GitLab](https://docs.gitlab.com/ce/development/i18n_guide.html) に詳しい方法が書かれていますので、ぜひ!


### [Pipeline Schedules](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
[9.1 でも紹介したパイプラインの定時実行](http://qiita.com/masakura/items/4cbf0d5ab93c9c97a28a#scheduled-pipelines-triggers)ですが、UI を変えて正式となりました!

前回書き忘れたのですが、この機能、実際には思った時間には実行されないようです。

> Attention: The pipelines won't be executed precisely, because schedules are handled by Sidekiq, which runs according to its interval. See advanced admin configuration for more information.

Sidekiq のスケジューリングでしか動作しません。毎時 0 分に実行と設定しても、Sidekiq が 0 時と 12 時でスケジューリングされてたら 0 時と 12 時に実行されます。

[Advanced admin configuration](https://docs.gitlab.com/ce/user/project/pipelines/schedules.html#advanced-admin-configuration) を読んで、Sidekiq のスケジューリングを変更してください。


### [Auto-Refresh on Issue Titles and Descriptions]( https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
前回よく分からくて、 @toricls さんに教えてもらった機能ですが、実装されたようです。

他の人が Issue を変更したら、そのタイトルと内容がリアルタイムに変更されるようになりました。地味に嬉しいですね。

![](https://about.gitlab.com/images/9_2/auto_updates_issue_page.gif)

画像は GitLab の blog のものです。


### [Create Merge Request from Issue]( https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
Issue から Merge Request を作るとき、以前はブランチを作ってから Merge Request を作る必要がありました。

今回の変更で、Issue から空の (なんの変更点もない) Merge Request をすぐに作れるようになりました。

自分はあとから Merge Request を作ることが多いのですが、全ての変更は Merge Request でとかやっているプロジェクトでは重宝しそうです。


### [Rendered Code Preview](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
GitLab のリポジトリビュアーでは、SVG などは画像として表示されます。今回から元のソースコードを見ることができるようになりました。

![gitlab2.png](https://qiita-image-store.s3.amazonaws.com/0/103982/0a7fa584-2765-651f-2171-fbf9aee315e4.png)


### [Job Artifacts Preview in UI](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
CI の成果物 (Artifacts) をリポジトリブラウザーのようにディレクトリやファイルを見ることができましたが、ファイルのプレビューには対応していませんでした。今回からこのファイルプレビューに対応しました。

ある程度のファイルはダウンロードせずに見れるようになりましたので、重宝しそうです。


### [Handling of Ambiguous Routes in Dynamic Paths](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
**要注意事項です。**

GitLab 9.0 よりサブグループが導入されました。これによって、URL のパスがややこしいことになりました。

例えば、`/group1/project1/tree/master` というパスは、以前は `group1` グループの `project1` の `master` ブランチという意味でしたが、サブグループの導入に伴い `/group1/project1/tree` サブグループの `master` プロジェクトという解釈もできるようになりました。

これを防ぐために、グループ名やプロジェクト名の名前 (正確にはパス) で使えないものが増えました。(`tree` という名前は使えません) これに伴い、付けられない名前のプロジェクトはアップグレード時に自動で変換されます。(blog では `badges` プロジェクトは `badges0` のようになると書かれています)

使えない名前のリストは ~~[dynamic_path_validator.rb](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/app/validators/dynamic_path_validator.rb)~~ [path_regex.rb](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/gitlab/path_regex.rb) にあります。

使えない名前のリストが書かれているファイルが path.regex.rb に変更されたようです。@tetsukay さんにご指摘もらいました。

特に、たくさんのユーザーを抱えている GitLab の管理者の方は、[Handling of Ambiguous Routes in Dynamic Paths](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules) を一読することをおすすめします。


### [Deletion of branches after a merge request is merged is now on by default](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
Merge Request の `Merge` のボタン付近に `Remove source branch` チェックボックスがあります。以前はこのチェックボックスはオフがデフォルトでしたが、今回からオンがデフォルトになりました。

何も考えずにマージすると、リモートブランチは削除されます。GitLab のデモとか見てても、チェックボックスをオンにしてからマージしていることが多いので、こちらのほうがいいですね。


### [Omnibus Improvements](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
Omnibus Package に同梱の GitLab 以外のパッケージがバージョンアップされています。

* GitLab Mattermost 3.9
* GitLab Registry 2.6.1

Mattermost の方は[セキュリティアップデート](http://about.mattermost.com/security-updates/)を含んでいます。


### [Manual Actions Respect Protected Branches](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
GitLab には GitLab CD という、サーバーへアプリをデプロイすることができます。これは GitLab CI の機能を拡張したものなので、リポジトリにプッシュできる権限があるユーザー (Developer ロール) は誰でもデプロイできます。

開発者なら誰でもデプロイできるフローになっているプロジェクトも有りますが、殆どの場合はマネージャーの承認なしにはデプロイできないでしょう。今までは、開発者の誰かが誤ってデプロイするのを防ぐことはできませんでした。

今回から、マニュアルジョブの実行はリポジトリのそのブランチにプッシュする権限があるユーザーのみとなりました。Protected Branche や Protected Tag を設定しておけば、リリースタグを打ってサーバーへのデプロイはマネージャー (Master ロール) のみといったことができます。

ちょっと分かりにくいですので、スクリーンショットを取ってみました。

* Developer ロールのユーザー
* `master` ブランチは Protected Branch で、Developer はプッシュできない

9.2 より前のバージョンでは、下のようにプッシュできない `master` ブランチのジョブも実行できます。

![gitlab3.png](https://qiita-image-store.s3.amazonaws.com/0/103982/9392d7a8-5d6f-7b11-6dc0-bc8641208b3a.png)

9.2 では、プッシュできない `master` ブランチのジョブは実行できなくなりました。

![gitlab4.png](https://qiita-image-store.s3.amazonaws.com/0/103982/a54833bd-585e-e0ee-f806-19cc16b88d7f.png)

(スクリーンショットは分かりやすいように合成しています)

今後も GitLab CD のセキュリティについて改善していくそうです。

開発者が悪意のあるコードを書くことを防ぐのは困難なので、何もかも防げるわけではありませんが、少しずつ改善していくのはいいですね。

余談ですが、検討されている対策の中で、Secret Variables が Developer ロールなら誰でも読めてしまう問題への対処も入っています。

> All project variables are accessible by any developer. If one developer adds secure variables to a project with deployment capable creds, any developer could write a trivial CI script to use or output those variables.


### [Docker Registry Cleanup Tool](https://about.gitlab.com/2017/05/22/gitlab-9-2-released/#pipeline-schedules)
アルファリリースのようですが、GitLab Registry のクリーンナップツールが提供されているようです。

GitLab Registry は積極的に使われるとストレージをかなり圧迫されるので、役に立ちそうです。


## 最後に
どのセッションか忘れましたが、[Microsoft Build 2017](https://build.microsoft.com/) の中で GitLab を使っての CI/CD/ReviewApps のデモがありました。特に新しい点があるわけではありませんが、Build でも紹介されるくらい大きなソフトウェアになったのに驚いています。

6 月は GitLab Meetup が二つ開催されます。近隣の方はいかがでしょうか? (私は遠くて行けなくて寂しい...)

* 6/1 (木) 19:30 - [GitLab Meetup Sendai #4](https://gitlab-jp.connpass.com/event/57920/) (宮城県仙台市)
* 6/7 (水) 18:30 - [GitLab Meetup Tokyo #3: GitLab 9.xリリース記念](https://gitlab-jp.connpass.com/event/57152/) (東京都港区東新橋)

来月は 9.3 です。[GitLab Direction](https://about.gitlab.com/direction/) を見ると、結構変わりそうです。個人的に気になるものはこれでしょうか?

* [Protect variables and runners](https://gitlab.com/gitlab-org/gitlab-ce/issues/24196)
* [Persistent deployment keys/tokens to fetch registry images outside of GitLab](https://gitlab.com/gitlab-org/gitlab-ce/issues/19219)

来月も楽しみです!