クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

クイックでのJenkinsの活用方法について

こんにちは、インフラチーム所属のにっしーです。半年前くらいから体重が5kg増えたのが最近の悩みで、良いダイエット法がないか模索しています。

普段の業務ではAWSやDatadogをよく扱っています。自分はクイックに入社してから初めてJenkinsに触れたのですが、開発・運用の自動化をサポートするツールとしてとても便利だなと感じました。 今回は、そのJenkinsのクイックにおける活用方法について紹介してみたいと思います。

Jenkinsとは

最初に、Jenkinsを知らない人向けに、Jenkinsがどのようなものであるかの簡単な説明をこちらの記事から引用します。 (記事: https://openstandia.jp/oss_info/jenkins/)

Jenkins(ジェンキンス)は、開発作業の自動化を目的としてJavaで実装されたオープンソースのサーバーソフトウェア(CIツール)です。 Jenkins(ジェンキンス)は、主に以下の2つの技術的な実現に役立ちます。

ソフトウェア開発プロセス全体の単純作業を自動化すること

  • 継続的デリバリー(CD)

継続的インテグレーションにより出来上がったソフトウェアを、テスト環境や本番環境に自動的にリリースすること

クイックでは、上記の開発・運用で発生する単純作業を自動化するために、数百以上のさまざまなジョブを日々実行しています。

↓Jenkinsのアイコン(エンジニアの方なら、見たことある方も多いはず)

Jenkinsを使うことのメリット

個人的に感じるJenkinsを使う上での利点として、

  1. オープンソースであるため、誰でも無料で使うことができる
  2. インストール手順などがネット上にたくさん存在するため、インストールが簡単
  3. プラグインシステムにより、簡単に機能を拡張できる
  4. ジョブの作成や実行、実行結果の確認などが全てGUI(ブラウザ)で操作できる

を挙げたいと思います。

特に、「4. ジョブの作成や実行、実行結果の共有などが全てGUI(ブラウザ)で操作できる」が自分の中で最も便利だと感じています。 このように感じる背景として、前職では個人のPCで自動化用スクリプトを実行しており、その場合だと、

といったものは当然チーム内で共有されている状態にありませんでした。 それに比較して、クイックでは自動化用スクリプトをJenkins上で実行することで、上記の各内容がサーバーに保存され、チームメンバーがブラウザからすぐに確認することができます。このように、 「ジョブの作成や実行、実行結果の共有などが全てGUI(ブラウザ)で操作できる」ことで、作業自動化の情報共有をチーム内で速やかに行える点がとても便利だなと感じています。

クイックでのJenkinsの活用方法

クイックでJenkinsを活用する代表的な目的としては、下記が挙げられます。

  • バッチ処理実行
  • デプロイジョブ実行
  • インフラリソースの構築
  • コスト削減を目的とした、サーバー起動/停止

このそれぞれの目的に応じてどのようにジョブを実行しているのか紹介します。

バッチ処理

JenkinsサーバーからWebサーバー/バッチ専用サーバーに接続し、Laravel等で書かれたプログラムを実行しています。 バッチ処理でパラメータを指定する必要がある場合には、Jenkinsのパラメータ付きビルドの機能で指定することが可能です。また、定期実行の設定により、時間を指定してのジョブ実行も可能です。

デプロイジョブ実行

クイックでは主なデプロイツールとしてcapistranoを使っており、

Jenkinsサーバー内でcapistranoによるビルド
↓
WebサーバーにSSH
↓
ビルドで生成されたファイルをデプロイ

といったデプロイ処理をJenkinsジョブの中で実行します。 この仕組みの利点としては、ジョブのパラメータ指定により、

  • 各環境 (Dev/Stg/Prd)
  • デプロイ時のアプリケーションファイルのブランチ
  • デプロイ先のサーバー

などを変えてデプロイすることができます。

インフラリソースの構築

クイックではインフラリソースの構築をJenkinsジョブから実行できるようにしています。 例えば、下記のような処理になります。

  1. EC2インスタンス起動
  2. ミドルウェア設定
  3. アプリケーションファイルのデプロイ
  4. サーバーの動作確認

この際、ジョブのパラメータを変えることにより、PJや役割に合わせて異なるサーバを起動できるようになっています。 Jenkinsジョブで上の処理を行えるメリットとして、複数人でのパラメータチェックを簡単に実施できる、というものがあります。例としては、本番環境のサーバーを起動する場合にパラメータの指定を間違えないように慎重に行う必要があります。JenkinsだとGUI(ブラウザ)から操作できるため、ブラウザを画面共有することでそのようなチェックをスムーズに行うことができるようになります。

コスト削減を目的とした、サーバー起動/停止

DevやStgなど、24時間起動する必要がない環境については、指定時間にサーバーを起動/停止することで、コスト削減を図ります。 具体的には、下記のようなジョブの実行設定になります。

  • 07:00 サーバー起動ジョブ実行
  • 22:00 サーバー停止ジョブ実行

このようにすることで、07:00-22:00以外の業務時間外はサーバーを停止し、サーバー費用を削減することができます。 また、指定時間にジョブが自動で実行されるのとは別で、手動でジョブを実行することにより任意のタイミングでサーバー起動/停止することもできます。

あとがき

最後までお読みいただき、ありがとうございました。 以上、クイックでのJenkinsの活用方法を紹介させていただきました。調べたところJenkinsには自分がまだ知らない機能やプラグインがありそうなので、今後はそういったものについても知識を増やしていけたらと思います。 開発・運用の業務を自動化してみたい方は、一度Jenkinsを試してみてはいかがでしょうか?


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp