はじめに
前回のブログでは、CIやCDのデメリットについて説明しました。
前回のブログはこちら
今回は実際にJenkinsというツールを用いてCI/CDを実現する第一歩の内容となります。
登場人物
吉田:転職したてのエンジニア。前職では積極的にCIやCDという事に取り組みながら開発をしていた。
溝口:入社20年のベテラン。現職の部署の開発経験しかなく、従来通りのウォーターフォールでの開発経験しかない。新しい取り組みには積極的だが、どうしても今までの成功体験に寄ってしまいがち。
服部:今回から初登場。配属1年後の新人。CIやJenkinsについては言葉は聞いたことがある程度。もともと開発で今回初めて環境周りを扱う事になった。
連載内容の趣旨
CI/CDについての概要の説明はもちろん、時には実演を伴って一緒に読み進めていくことによりCI/CDを理解し、実践できることを目的としています。
仕組みを導入する際に大切なこと
Jenkinsのメリットデメリットについてなんとなく理解したよ。じゃあ早速導入してみようか。
いいんですか?そんないきなり始めてしまって。前回も導入失敗したんですよね。
前回の失敗は2つ理由があると思っていて、「ノウハウがないまま進めてしまった」「専任者を置かずに実施してしまった」ことにあると思うんだ。
新しく仕組みを導入する際は、専任者を置いたほうが良いと思います。私が専任者として活動するのが良さそうですね。
吉田さんと、ある程度うちの部署の開発現場も知っていた人もセットのほうが良いと思うんだ。去年配属した服部君が環境周りにも興味があるみたいで、彼と一緒にやってみて欲しい。
わかりました。それではある程度定着するまで2人で専任で業務をさせてもらいます。
Jenkinsとは
初めまして、服部です。よろしくお願いします。
よろしく服部さん。これからこの部署にCI環境を定着させていきましょう!
がんばります。そのCIやCDというものについてはこちらのブログでなんとなく把握したのですが、そこで登場した「Jenkins」は何ができるものなのかまだあまりわかっていないんですよね。名前は聞いたことがあるんですが。。。
了解、簡単に説明していくね。
CI/CDを実現するためには継続的インテグレーションサーバ(以下、CIサーバ)が必要になってきます。
CIサーバの役割としては、
- ビルドサーバやテストサーバへ実行指示を行う
- ビルドやテストの結果を開発者へフィードバックする
- ソースコード管理システムを監視する
等が挙げられます。
Jenkinsはこのような機能を持つCIサーバです。
「ソフトウェアのリリーススピードの向上」「開発プロセスの自動化」「開発コストの削減」といったことを利用目的として注目されているオープンソースのツールとなります。
なぜJenkinsなのか
なるほど。Jenkinsというツールを使うことでより良いCI環境構築ができるんですね。
他にもいろいろこういったツールはあるんだけど、今回はJenkinsを利用して環境を構築していこうと思っているの。
確かに [CI環境 ツール] といった内容で検索をするといろいろツールが出てきますね。何でJenkinsを使うか聞いてもいいですか?
私はこういったツールを導入するときに次の3つが重要だと思っているの。
「導入が簡単か」「情報が豊富か」「連携するシステムは豊富か」
それぞれについて説明していくわね。
導入が簡単か
- なぜ重要か?
新しいシステムを導入する際に導入や設定が難しいツールを選んでしまうと環境がなかなか立ち上がらない、環境の移設が難しいなどが運用開始の障壁となることがあります。
できるだけ簡単に導入できるシステムであれば、環境をすぐに構築し導入効果の計測を始めることができます。
- なぜJenkinsか?
Jenkinsのインストールは非常に簡単です。Windowsでしたらインストーラーを実行するだけで完了しますし、Linuxでも実行コマンドを数行実行するのみで環境構築が完了します。また、近年普及が進んでいるDockerコンテナとしても利用することが可能です。
利用自体も無料で利用することができるため、金額的な導入の障壁もありません。
情報が豊富か
- なぜ重要か
情報が豊富な場合、導入時に「そもそもこういったことができるのか」という情報を集めることができ、スムーズな導入が可能になります。
また、環境を導入や運用していく際にはトラブルシュートがつきものです。
過去の情報の蓄積が多い場合、その情報を利用することでトラブルシュートの時間を削減することが可能になります。
- なぜJenkinsか
Jenkinsには長い歴史があります。もともと「Hudson」という名称で2004年からプロジェクトがスタートしました。その後2011年に「Jenkins」と名称を変え、現在も世界中で多くのユーザーに利用されております。
そのためこれまでに蓄積された膨大な情報を利用し、Jenkinsを活用することが可能です。
連携するシステムは豊富か
- なぜ重要か
CIサーバはその特性上様々なツールと連携します。
ソースコード管理であればGitやSubversion。通知であればメールはもちろん近年ではTeamsやSlackといったツール。テストツールについても開発言語によって様々あるでしょう。CIサーバはこういったツールとスムーズに連携する必要があります。
- なぜJenkinsか
Jenkinsには1700を超えるプラグインがあります。開発チームが利用するシステムとの連携機能を提供するプラグインを利用することで、Jenkinsを肥大化させることなくそれぞれの開発環境に適したCIサーバを構築することが可能となります。
実際にWindowsにインストールする
なるほど。それならまずJenkinsを入れてCI環境を作るのは賛成です。
Jenkinsのインストールに関してマシンスペック等の要件はあるんですか?
例えばWindowsにインストールする際の最小のハードウェア要件は
・256MBのRAM
・1 GBのドライブスペース
とされているわね。
詳細は公式のドキュメントを参照するといいわよ。分散ビルド環境にせずに、Jenkinsと同じサーバーにビルド等を行う場合はもう少しスペックが必要になるわね。
特別な要件はなさそうですね。
その「分散ビルド」というのは何ですか?
「分散ビルド」といった用語については今度説明するね。
部署で持ってるサーバーってあったりするの?
あそこの棚にずらっと置いてある筐体ならうちの部署のものなので使って平気です。
元々個人の開発PCだったのでWindowsマシンですが問題ないですよね。
うん、大丈夫。じゃあ早速インストールしていってみようか。
ここからは実際にWindowsマシンにJenkinsをインストールしていきます。前提条件として、Java 8または11のランタイムが必要となりますので、あらかじめインストールしておいてください。
Windowsでインストールする。
インストーラーでインストールする例を記載します(2021/01/19時点の情報を元に作成しております)。
1.インストーラーをダウンロードする。
こちらのJenkinsの公式ページからインストーラーがダウンロード可能です。
https://www.jenkins.io/download/#downloading-jenkins
今回はWindowsのインストーラー利用するのでWindowsをクリックしてください。jenkins.msiファイルを取得できます。
2.インストーラーを実行する。
取得したjenkins.msiファイルを実行するとインストールが始まります。初期のポート番号の指定等の入力が求められますが、インストール後にも変更が可能ですので、そのままNextボタンを押下して進めてください。これでJenkinsのインストールが完了です。
3.Jenkinsを起動する
インストールが完了し、Finishを押下するとブラウザが立ち上がり、Jenkinsのロック解除画面が表示されます。
Jenkinsを利用開始する前に、このロックを解除する必要があります。それぞれの環境によって記載されているパスが異なりますが、画面に表示されている通りinitialAdminPasswordファイルに解除パスワードが記載されているので、その内容をコピペしロックを解除しましょう。
その次にJenkinsの初期プラグインについてどうするかの選択画面が表示されます。一般的に良く利用される主要なプラグインから必要なものを選択してインストールすることもできますが、初めのインストール時は[Install suggested plugins]を選択して進めると良いと思います。
その後、[Create First Admin User][Instance Configuration]という画面が表示されます。[First Admin User]では初期ユーザー情報を登録します。[Instance Configuration]ではJenkins URLを入力します。初期ではhttp://localhost:8080になっております。必要に応じて変更してください。また後からでも変更は可能ですので一旦このままでも問題ありません。
これでJenkinsの利用が可能になります。
そのほかの方法でインストールする
そのほかでのインストール方法も簡単です。例えばDockerを利用した場合、
- docker pull jenkins/jenkins
- docker run -p 8080:8080 -p 50000:50000 jenkins/jenkins
この2つのコマンドを実行するのみで上記で記載した3.Jenkinsを起動するのロック解除のステップから利用が可能となります。
ただし、こちらの方法は本番での利用には適していないので、「簡単にJenkinsを触ってみたい」といった場合の起動にとどめることを推奨します。
Linuxといったそれ以外の環境へのインストール方法についてもJenkinsの公式ページに記載がありますので併せてご確認ください。
https://www.jenkins.io/doc/book/installing/
とっても簡単ですね!もっと大変なものなのかと思っていました。
でしょ。Dockerはこんな風にJenkins自体にも利用できるし、「分散ビルド」時の「エージェント」として利用しても便利だよ。
さっきも「分散ビルド」や今回「エージェント」という単語が出てきましたが、「分散ビルド」や「エージェント」とは何ですか?
次回はその「エージェント」とかの用語について説明していこうか。
まとめ
今回はなぜCIサーバのうち、Jenkinsを利用するメリットであったり、Jenkinsのインストール方法について知っていただけたのではないかと思います。
よりCI/CDとは何かといったことを知りたい方はこれまでのCI奮闘記をご覧いただければと思います。
次回以降も引き続きJenkinsの利用方法であったり、用語についても説明を進めていきますが、体系的Jenkinsを学べる講座としてJenkinsトレーニングというものもございます。こちらも併せてご確認いただけると幸いです。
https://cloudbees.techmatrix.jp/jenkins-training/
CI奮闘記一覧
- 【CI奮闘記】第1章:Jenkinsを使う事=CI/CDではない
- 【CI奮闘記】第2章:CI/CDのメリットって何?
- 【CI奮闘記】第3章:CI/CDの気になるデメリット?
- 【CI奮闘記】第4章:Jenkinsって何?
- 【CI奮闘記】第5章:コントローラー?エグゼキューター?エージェント?
- 【CI奮闘記】第6章:エージェントを作ってみよう!
- 【CI奮闘記】第7章:Amazon EC2のWindows ServerをJenkinsのエージェントとして利用する!
- 【CI奮闘記】第8章:Jenkinsは何が得意なの?
- 【CI奮闘記】第9章:フリースタイルジョブでMavenのビルドを行う!
- 【CI奮闘記】第10章:パイプラインでMavenのビルドを行う!
- 【CI奮闘記】第11章:パイプラインに承認・Webhookを追加する!
- 【CI奮闘記】第12章:パイプラインに通知機能を追加する!
- 【CI奮闘記】第13章:これまでに構築した内容をもう少し詳しく知る!