はじめに
JenkinsはオープンソースのCI/CDのツールとして広く用いられ、ファームリリース、テスト等の自動化に使われています。今回は既にJenkinsが運用されている前提で、そのJobの作成方法を学んでいきます。Jenkinsの環境自体はITインフラチームなどが準備してくれても、Jobはそれを使用するチームに委ねられます。
急にJenkinsの管理を任されたといった時にも、本記事によって一連のJob作成を学べば、あとはスクリプトの作成に集中できます。今回はローカルPCにインストールされたJenkinsを使って説明していきますが、リモートにインストールされた環境でも、場所が違うだけで操作方法等は同じです。尚、JenkinsがインストールされたPCへのログイン方法等はお使いの環境の管理者に問い合わせてください。
レッスン1.ジョブをつくる
Jenkinsの基礎を学ぶために、お試しで簡単なスクリプトを実行するジョブの作成を行います。ジョブとはJenkins上で扱われる作業の単位となります。ジョブの分け方は様々で、製品A、製品Bといったように製品ごとに分けるケースや、ビルド、テスト、デプロイのようにステージごとに分けられるケースなど、プロジェクトの進め方に応じて決めることができます。
では、まずは新規ジョブを作っていきましょう。Jenkinsのページにログインしたら、左側のツリーから「新規ジョブ作成」を選択します。
ジョブの作成画面になるので、ジョブ名を入れます。入力したら「フリースタイル・プロジェクトのビルド」を選択します。選択したら、画面下部にある「OK」を押してください。
ジョブの作成が完了すると、引き続きジョブの設定画面に移行します。ここではジョブの動作内容を細かく決めるメニューが並んでいます。
設定画面を下にスクロールしていくと、「ビルド」というカテゴリがありますので、「ビルド手順の追加」を押し、「シェルの実行」を選択します。
するとシェルコマンドを入力するボックスが出てきますので、下記のように入力してみます。$JOB_NAMEという部分は環境変数といって、Jenkinsに組み込まれている定数になります。今回入れた$JOB_NAMEは、実行時にこのジョブの名前に変換されます。実際の変換結果は、改めて実行時に確認しましょう。
他に使えそうな環境変数が無いか見たい場合はそのすぐ下にある「ビルドから利用可能な環境変数の一覧」を押すと確認できます。
ではスクリプトの入力が済んだら画面左下にある、「保存」を押します。
続いて実行します。左のツリーの「ビルド実行」を押すと実行されます。
数秒で実行は完了するかと思います。実行が終わると、ビルド履歴に#1と青色の丸いアイコンが表示されます。これはビルドを実行した記録です。では、ビルドの記録を確認するために「#1」の部分を押してください。
続いて左のツリーから「コンソール出力」を押します。
すると実行内容が表示されますので、先ほど入力したシェルスクリプトが正しく実行されていることを確認してください。$JOB_NAMEと書いた部分がジョブ名(Test_Job)に変換されていることも確認できます。
新規ジョブを作る方法は以上になります。
レッスン2.既存のジョブを複製して作成する
既に運用されているJenkins環境であれば、ジョブを複製して作成するケースが多いと思います。その場合の手順を見ていきましょう。
左のツリーから、「新規ジョブ作成」を押します。
ジョブ名を入力した後、一番下の「Copy from」という欄にコピーしたいジョブ名を入力したら、OKを押します。プロジェクトのタイプを選ぶ必要はありません。
設定画面に移行しますが、コピー元のプロジェクトの設定がそのまま移行されていることが分かります。そのまま「保存」を押してみましょう。
トップに戻ると、ジョブが複製されたことが確認できます。
レッスン3.外部スクリプトを実行する
続いて作成済みの外部のスクリプトを実行する方法です。まずは先ほどの設定画面に移行して、スクリプトファイルを作りましょう。ツリーの上にあるジョブ名を押してください。
左のツリーから「設定」を押します。これでジョブの設定画面に移行できます。覚えておきましょう。
先ほどのスクリプトを以下に変更して、バッチファイルを作ってみます。今回使っている環境変数の$WORKSPACEはジョブ単位で割り当てられるディレクトリのパスを示します。ここにフォルダを作ることで、ジョブ毎に必要なファイルを格納しておくことができます。
設定を保存したら、実行してみましょう。実行が完了したら、先ほどの手順でコンソール出力を見てください。エラーになっている場合、シェルコマンドどこかを打ち間違っている可能性があるので、見直してください。成功したら、赤枠で囲まれたパスをコピーしてエクスプローラで移動します。
リモートの場合は、「リモートデスクトップ」などでJenkinsが稼働しているPCにログインして確認してください。
先ほどのパスに移動すると「test.bat」ができていることが確認できるかと思います。今回は保存先のパスが分からなかったためディレクトリとファイルをJenkinsで作成しましたが、今後このディレクトリに他のスクリプトファイルを入れておくと呼び出しができます。
では、このバッチファイルを編集します。空になっているので、下記のコードを入れて保存してください。
echo Hello batch file!
では、バッチファイルができたところで、Jenkinsに移動し、このバッチファイルを実行する命令を入れます。
ジョブの設定から、シェルスクリプトの内容を変更しましょう。下記を参考にしてください。
編集できたら実行して、またコンソール出力を確認します。バッチファイルの中に書いた命令が実行されていることが確認できたでしょうか?
今回シェルスクリプトで用いたbash命令を使えば、vba、Python(実行環境のインストールが必要)等の他のスクリプト言語のファイルでも実行できますので、応用がききます。シェルスクリプトの文法は本や検索エンジン等で調べてみてください。
レッスン4.定期的に実行する
今回のように手動で実行していては、ただスクリプトを実行するのと何も変わらないので、スケジュール通りに定期的に実行する仕組みを入れてみましょう。まずは、その頻度を設定するためのコマンドを学びます。
ジョブの設定からビルドトリガのカテゴリで「定期的に実行」にチェックを入れます。
ここに定期実行を設定するコマンドを入力しますが、コマンドのフォーマットは下記のようになっています。(各文字列の間に半角スペース)
これは主にUNIXで用いられる、cronと呼ばれる書き方になります。
分 時間 日 月 曜日
・特定しない場合は * を入れる
・ランダムの場合は H を入れる(複数のジョブを動かしていると、前のジョブの実行が終わらない場合もあるので、実行時間に幅を持たせるために使用を推奨)
これを踏まえて、いくつ例を挙げます。これを参考にスケジュールを作ってみてください。
毎日9時に実行
H 9 * * *
平日毎日15時に実行
H 15 * * 1-5
土日の10時に実行
H 10 * * 0,6
cronは少々癖があるフォーマットになりますが、詳しい内容はヘルプがあります。(英語のみになります)また、jenkins cron等で検索をかければ、日本語のサイトなども見つかりますので、参考にしてください。
入力したものが意図する内容になっているかは、入力後にテキストボックスからフォーカスを外すと、すぐ下に実行される日付や時間が例として出てきますので、そちらを確認してみてください。
レッスン5.ログの肥大化を防ぐ
定期実行すると、ビルド履歴が増えていき、それに伴ってログが肥大化していきます。ファームウェア等の成果物は別サーバに保存するようにすれば、実際に必要なログは直近のいくつかである場合が多いので、それだけを残すように設定します。
設定画面から、「古いビルドの破棄」にチェックを入れます。ここで、最大保存数を5に変更して保存します。
保存したら、ジョブを実行してみましょう。ビルド履歴が5つ以上増えなくなります。
但し最新のビルドがエラーの場合は一時的に5を超える場合もあります。その場合、次にビルドが成功するとまた5つに戻ります。
おわりに
今回はJenkinsのジョブ作成について学びました。Jenkinsは手動で行っていた定型作業を自動化するのに向いています。最も向いている作業はやはりファームリリースです。ファームリリースは定期的に行われ、作業内容も固まっているので、自動化しやすいです。一度自動化してしまえば、あとは手離れするので、他の作業に時間を割くことができます。また、リリース担当などを特に立てなくてもよくなるので、人的リソースも節約できます。効率化のために是非自動化を進めていきましょう。最後までお読みいただきありがとうございました。
No Comments