このアプリケーションノートでは、Linux用Jenkinsツールを使用してバッチモードでRiviera-PROを使用する方法について説明します。プロセス全体を理解するために、すべての重要なセグメントについて説明します。まず、Jenkinsというツールについて理解しましょう。
Jenkinsとは何ですか?
Jenkinsは自己完結型のオープンソース自動化サーバーで、ソフトウェアのビルド、テスト、デプロイなど、あらゆるタスクの自動化に使用できます。Jenkinsは、ネイティブシステムパッケージやDockerを通じてインストールでき、Javaランタイム環境がインストールされている任意のマシンでスタンドアロンで実行することができます。これは作業しているプラットフォームに関係なく、プロジェクトの継続的インテグレーションと継続的デリバリーを可能にする強力なアプリケーションです。オープンソースのアプリケーションであり、あらゆる種類のビルドや継続的インテグレーションに対応できます。
なぜJenkinsなのか?
Jenkinsは継続的ンテグレーションを可能にするソフトウェアです。Jenkinsは、セントラルビルドが行われるサーバーにインストールされます。下記のフローチャートは、Jenkinsがどのように機能するかを示す非常に単純なワークフローを示しています。
Figure 1: Jenkins フローチャート
継続的インテグレーションとは?
継続的インテグレーションとは、開発者が定期的にコードを共有リポジトリに統合することを要求する開発手法です。継続的インテグレーションでは、開発者が頻繁にビルドを行う必要があります。一般的なプラクティスは、コードのコミットが発生するたびにビルドをトリガーする必要があります。スタンドアロンのJenkinsディストリビューションは、Java 8以上を推奨しています。以下の手順に従って、Jenkinsをダウンロードして実行します。
Jenkinsをダウンロード
Jenkinsが保存されているディレクトリでターミナルを開き、jar -xvf jenkins.warを実行します。
http://localhost:8080をアクセスし、指示に従ってインストールを完了します。
Jenkinsを使ったRiviera-PROのサンプルの実行について、ステップ・バイ・ステップで理解していきます。
Jenkins
ユーザー名とパスワードを入力すると、ユーザーホーム画面になります。
Figure 2: Welcome to Jenkins
Jenkinsの管理
Jenkinsを管理するには、左側のメニューからManage Jenkinsオプションをクリックします。これにより、ユーザーはJenkinsの様々な設定オプションを取得できるようになります。
Figure 3: Manage Jenkins
Configure System
ここでは、JDK、AntとMavenのバージョン、セキュリティオプション、電子メールサーバー、そのほかのシステム全体の詳細構成など、ビルドで使用するさまざまなツールへのパスを管理できます。Jenkinsはプラグインのインストール後に、必要な構成フィールドを動的に追加します。
Manage Plugins
Jenkinsの機能を拡張するプラグインを追加、削除、または無効化/有効化します。
Reload Configuration from Disk
Jenkinsは、すべてのシステムおよびビルドジョブ構成の詳細をXMLファイルとしてJenkinsのホームディレクトリに保存します。ビルド履歴もJenkinsのホームディレクトリに保存されます。あるJenkinsインスタンスから別のインスタンスにビルドジョブを移行する場合、または古いビルドジョブをアーカイブする場合、対応するビルドジョブディレクトリをJenkinsのビルドディレクトリに追加または削除する必要があります。単純に "Reload Configuration from Disk "オプションを使用すると、Jenkinsシステムとビルドジョブの設定を直接リロードできます。
System Information
この画面には、現在のすべてのJavaシステムプロパティとシステム環境変数のリストが表示されます。ここで、Jenkinsが実行されているJavaのバージョンとすべてを正確に確認できます。
System Log
Jenkinsのログファイルをリアルタイムで表示する便利な方法です。トラブルシューティングに使用されます
Load Statistics
同時ビルド数やビルドキューの長さなど、Jenkinsインスタンスがどの程度ビジー状態であるかをグラフィカルに表示し、ビルドが実行されるまでにどれくらいの時間が必要かを把握することが出来ます。これらの統計は、インフラストラクチャの観点から余分な容量または余分なビルドノードが必要かどうかの良いアイディアが得られます。
Prepare for Shutdown
JenkinsまたはJenkinsが稼働しているサーバーをシャットダウンする必要がある場合、ビルドの実行中はシャットダウンしないことをお勧めします。Jenkinsを正常にシャットダウンするために、ユーザはPrepare for Shutdownリンクを使用して、新しいビルドが開始されない様にすることが出来ます。
ダッシュボードの左側にあるNew Itemをクリックする。
Figure 4: New Item
Freestyle projectをクリックする。
Okをクリックする
項目名が確定すると、下図のような設定ウィンドウが開きます。
Figure 5: Itemの設定
設定ウィンドウでBuild Triggersタブをクリックする。
Jenkinsは、テストを実行するためのビルドステップを提供します。ビルドステップ内には様々なサポートレベルが用意されているため、ユーザは自分に都合の良いものを利用することができます。異なるステップとは Windowsバッチコマンドの実行、シェルの実行、およびトップレベルのMavenターゲットの起動します。このサンプルでは、Linuxを使用してRiviera-PROを起動しているするため、"Execute Shell"オプションを選択します。それを選択するとすぐに次のウィンドウが開きます。
Figure 6: ビルドウィンドウ
コマンドウィンドウ内でsetenvファイルを呼び出し、Riviera-PROの環境変数を設定します。
次に、vsimsaファイルを実行するためにshコマンドを実行します。
sh ./vsimsa -do /edatools/Aldec/Riviera-PRO-2020.10-x64/examples/coverage/coverage_database/keyboard_controller/src/runme.do
以下は、ビルド時に実行されるスクリプトコマンドです。
Figure 7: スクリプトコマンド
次にSaveをクリックする。
Build Nowをクリックする。
Build Historyで、最新のビルドをクリックします。バッチモードツールが起動し、スクリプトが実行されます。Jenkins内部でビルドが成功すると、次のコンソールログとRiviera-PROコンソールログが表示されます。
Figure 8: コンソール出力
Figure 9: Riviera-PROのスクリプト実行
スクリプトが保存されているホームディレクトリに移動します。シミュレーションデータベースはそこに保存されます。
注意: カバレッジ結果のhtmlファイルを作成する場合は、実行するスクリプトにそのコマンドを含めることが出来ます。
Figure 10: 累積カバレッジ結果
Figure 11: Test 1の結果
Figure 12: Test 2の結果
Jenkinsは継続的インテグレーションサーバーです。
これには、すべてのテストが機能しているかどうかを常に把握し、迅速なフィードバックを得られるという大きな利点があります。迅速なフィードバックは重要で、ビルドを失敗した(コンパイル/ビルドサイクルまたはテストのいずれかを失敗させる変更を導入した)直後に、失敗した内容とそれを元に戻す方法を常に知ることができます。
テストを時々しか実行しない場合、前回実行したときから多くのコード変更が行われている可能性があり、どの変更で問題が発生したのかを把握するのが難しくなります。プッシュするたびに自動的にテストが実行されると、何が誰によって問題を引き起こされたかが常に明白になります。
CIは、ほとんどの開発者がコードベースを無傷に保つために従うプロセスになります。ほとんどの場合、グループ環境で作業する場合によく行われます。たとえば、新しい家を建設するようなものです。現場では複数の業者が作業を行います。窓ガラスを取り付けた後、塗装業者が来てペンキを塗ると、ガラスにペンキを落としてしまったり、ガラスを割ってしまったりする可能性が高くなります。そこで、検査員が毎日来て、何か壊れていないかどうかチェックします。新しいコードを構築する際にも同じプロセスが適用されます。CIシステムは、さまざまなエンジニアから全てのコードを集め、それが適切にコンパイルされ、ビルドされることを確認します。
このアプリケーションノートのテキストの多くは、提供されているオープンソースツールに関する参照したソース(Jenkins.com)から抜粋したものです。このアプリケーションノートの目的は、アルデック ユーザーの利益のためにデータを統合および整理し、簡素化されたツールフローを提示することです。