今だと開発のインフラにはGitHubだったり、Dropboxだったり、色々なクラウド上のソリューションがあります。しかし、契約上の理由やデータ容量の問題などでクラウドを使ったシステムには入れることができないデータが沢山あります。そのため、私は内部にオンプレで開発を支えるインフラを整備しているのですが、そこで使っているソリューションを大幅に変更する必要が出てしまいました。
移行した経緯
移行前のシステム
移行前のシステム構成は以下のようになっていました。
OS | Windows Server 2016 |
VCS | Bitbucket Server |
イシュー管理 | JIRA Server |
ドキュメント管理 | Confluence Server |
データベース | MySQL |
Confluenceにはドキュメント作成を便利にするために、次のようなプラグインも組み込んでいました。
- Scroll PDF Exporter
- Scroll Documents
- Gliffy
JIRAにも、イシュー管理の他にテスト管理やロードマップを管理するために、次のようなプラグインを追加していました。
- Xray (テスト管理)
- Advanced Roadmap
このように Atlassian 社の製品にかなり依存した構成になっていました。それぞれの製品は使いやすく、かなり生産性も高い開発を行うことができていました。弱点は毎日深夜に自動実行するバックアップに時間がかかり、朝になっても終わっていないことが多かったことです。バックアップが終わらないまま翌日に食い込み、そこで BitBucket のバックアップスクリプトが走るとお互いにデッドロック状態になり、更に翌日に手動で調整が必要になったこともありました。これは製品の問題ではなく、運用上の問題だったので、製品には満足していました。
移行が必要になった理由
満足していたにも関わらず移行が必要になってしまったのは、 Atlassian 社の方針が変わり、サーバー製品は基本的には廃止となり、維持コストが大幅に上がってしまうことです。クラウドへの移行が推奨されるという方針になりました。
サーバーの販売終了とサポートに関する FAQ | Atlassian
私がクラウド版に移行できない理由は次の1点です。
- 業務の契約上の理由でクラウドにデータを置けない
仮にこれがなかったとしても、データ容量がかなり大きい(数TB)のでクラウドで運用するにはコストが問題になりそうです。
そのため、オンプレで運用できるソリューションに移行する必要が出てしまいました。
インフラ移行
検討ポイント
移行するサービスを決めるのにあたっての検討ポイントは次のようなものです。
- オンプレで運用可能
- 有料の場合はコストを抑えるために少数ライセンスで契約できること
- Windows Server 2016上で稼働できること
- バックアップが容易なこと
- Webインターフェイスを持っていること
Linuxを選択肢に加える
Windows Server上で稼働できるという条件で探すと、自分に合う条件のものは見つかりませんでした。しかし、よく考えてみると、Windows Serverで直接稼働させるよりも、Hyper-Vでサービス毎に独立した仮想マシンでUbuntu Linuxを動かし、その上でサービスを動かした方法が都合が良いことに気が付きました。
Hyper-VでLinuxを選択肢に入れたことで一気に自由度が広がり、OSSで構築できました。
Windows Server
Windows Serverの役割は次のようになりました。
- DNS
- Hyper-Vの管理と実行
- バックアップ
- ファイル共有サーバー
Hyper-Vにしたことで、Windows Server BackupがHyper-Vの仮想マシンをそのままバックアップできるので、バックアップ時間が大幅に削減されました。また、以前のようなデッドロック状態に陥ることもなくなり、バックアップ中でも比較的安定してその上のサービスは使える状態になりました。
Hyper-Vの仮想マシンはサービス毎に独立させました。次のような複数構成となりました。それぞれに別々のIPアドレスとURLを割り当てました。
- Alfresco (ドキュメント管理)
- GitLab (VCS)
- YouTrack (イシュー管理)
- TeamCity (CI/CD)
Alfresco
Alfrescoはドキュメント管理システムです。商用版もありますが、OSSのコミュニティ版を導入しました。OSはUbuntu Linux LTSです。AlfrescoをDockerを使ってコンテナ化して実行します。データの永続化や日本語の文字化け対応など、単純には導入できませんでした。導入方法は別ブログで解説しています。
Dockerを使ったAlfrescoのセットアップ方法 | 現役のプログラマーが書くプログラミング情報
Alfrescoは全文検索が便利なので気に入っています。Alfrescoに入れるドキュメントはWordやExcel、PDFなどです。主に仕様書や規格書などです。
GitLab
GitLabはGitとイシュー管理などを持ったVCSです。イシュー管理はYouTrackを使用するので、Git機能を使うために導入しました。OSはUbuntu Linuxで、aptコマンドで簡単に導入可能です。BitBucketのリポジトリを取り込む機能を持っていたことが決め手になりました。
GitLabにはMarkdownで書けるナレッジベース機能があります。Alfrescoには仕様書などを入れているのですが、How To的なものはGitLabのナレッジベースに入れるようにしました。また、頻繁に変更が発生するドキュメント、特にコードに近いドキュメントは、MarkdownでGit管理するようにしました。
YouTrack
JetBrains社が開発しているイシュー管理システムです。以前は1ライセンスでも有償でしたが、現在は10ユーザーまでは無償になりました。JIRAのデータを取り込む機能を持っていたのが決め手になりました。今まで蓄積した情報をそのまま移行できます。
YouTrack:チーム用の課題追跡・プロジェクト管理ツール
また、YouTrack単体でテスト管理も可能です。専用機能を持っていると言うことではないので、ちょっとカスタマイズするのですが、シンプルなテスト管理が必要という場合には十分対応できます。
Make It Workflow — Part 13: Supporting Test Management Scenarios
TeamCity
継続的インテグレーション・継続的デリバリーのためのサービスです。私の場合はMacアプリなので、今まではMacにBambooをインストールしていましたが、TeamCityに移行しました。
TeamCityの場合はHyper-Vで仮想化したUbuntu Linuxにインストールします。実際のテストを実行するランナーをMacにインストールします。TeamCity本体とランナーが別マシンになるので、テストパフォーマンスも確保できます。
TeamCityもJetBrains社の製品で、ビルド構成が100個までは無償版で対応できます。
TeamCity:JetBrainsによる手間のかからないCIおよびCDサーバー
後記
今回は使っていたソリューションの廃止で急遽移行したのですが、結果としては満足するインフラになりました。バックアップが楽になったことやソリューション毎に仮想化されたことで、組み合わせるDBが自由になりました。また、パフォーマンスが悪化した場合に、サーバーを追加して分散するのも仮想化されているので楽にできます。
この記事を書こうと思ったのは移行した直後だったのですが、それから時間が取れず、移行したシステムが稼働してから1か月ほど経過しています。
操作方法の違いが一番の問題というか悩みになりましたが、それも時間が解決してくれました。