背景
組み込みソフトウェアの開発で、OSとCPUのポーティングを行う事になり、開発環境を一から構築し直す事になりました。
今までは自動化などはしていなかったため、思い切って自動化をしてみました。
使用したツール
- Jenkins
- Hyper-V
- Cppcheck
- Git
概要
手元にあまり使われていないPCがあったため、それをサーバーとしてコード編集以外の作業をサーバーに任せる形で環境を構築します。
gitサーバーはGit for Windowsのdaemonを使用しましたが、今後はGitLabに移行したいと考えています。
バージョンとか
ツールとか | ローカルPC | リモートPC(ホストOSM) | リモートPC(ゲストOS) |
---|---|---|---|
Windows | Windows8.1 | Windows8.1 | Hyper-V(Ubuntu 17.10) |
Git | 2.15.1.windows.2 | 2.15.1.windows.2 | git version 2.17.0 |
Jenkins | - | 2.107.3 | - |
Cppcheck | - | 1.83 | - |
1.Jenkinsの設定
プラグインなどはGitとSSH接続ができればOK。
すみません。色々と試してたため覚えてません。。。
多分、SSH plugin
とGit Plugin
だと思います。
基本的にはJenkinsのワークディレクトリを使用しています。
(あまり良くないかもしれませんが。。。)
ワークディレクトリのい位置は、Jenkinsの管理
- システムの設定
から確認できます。
1.1.ジョブ作成
1.ログイン後、新しいジョブ
をクリック。
2.ジョブの名前を設定。とりあえずsampleという名前で作成。
3.フリースタイル・プロジェクトのビルド
を選択してOK。
4.下記のようにビルド設定をします。
- ソースコード管理
-
Git
を選択-
リポジトリURL
にリモートPCのディレクトリを設定(E:\git\sample.git
)
-
-
- ビルド・トリガ
-
リモートからビルド
をチェック-
認証トークン
に任意の文字列を設定(sample
)
-
-
1.2.リモートビルド
次に、要のビルド手順の設定を行います。
リモートホスト側は git clone 済みです。
鍵認証ではなく、パスワード認証としています。
1.2.1.SSH
こちらを参考にさせていただきました。
(1) 認証情報
- Jenkinsのトップページから、
認証情報
のSystem
をクリック -
グローバルドメイン
をクリック -
認証情報の追加
を選択
(2) 認証情報の追加
-
種類
にユーザー名とパスワード
を選択 -
スコープ
にグローバル
を選択 -
ユーザー名
、パスワード
にリモートホストのユーザー情報を入力 -
ID
は未入力 - 必要なら
説明
も入力。 -
保存
を選択
(3) SSHリモートホストの追加
- トップページから、
Jenkinsの設定
のシステムの設定
を選択 -
SSHリモートホスト
から追加
をクリック-
ホスト名
にリモートホストのホスト名またはIPアドレスを入力 -
ポート
に接続ポート番号を入力(デフォルトは22) -
Credentials
に先程作成したユーザーを選択 -
Check connection
をクリック -
Successfull connection
が出れば接続成功 - 保存をクリック
-
(4) ビルド設定
- トップページから作成したsampleジョブを選択して、設定をクリック
-
ビルド手順の追加
からリモートホストでシェルを実行
を選択-
SSHサイト
を先程作成した認証情報 -
シェルスクリプト
に実行したいコマンドを入力 - 保存をクリック
-
(5) ビルド後の処理
-
ビルド後の処理の追加
から成果物を保存
を選択-
保存するファイル
を入力- カレントディレクトリはJenkinsのワークディレクトリです。
- ビルドで作成した実行ファイルを選択しました。
-
1.3.Cppcheck
(1) Cppcheck
CppcheckはリモートPCのWindows側にインストールしています。
パスは事前に通してあります。
(2) ビルド設定
- トップページから作成したsampleジョブを選択して、設定をクリック
-
ビルド手順の追加
からWindowsバッチコマンドの実行
を選択-
コマンド
にCppcheckを実行するコマンドを入力- 作業ディレクトリは、Jenkinsのワークスペースで行われます。
- 詳細は省きますが、
cppcheck --xml --enable=all . 2> report.xml
を入力しました。
-
- ビルド後の処理で、出力されたファイルを選択します。
- こちらもカレントディレクトリはJenkinsのワークスペースになります。
-
report.xml
と入力しました。
- 保存をクリック
上記の設定でビルド処理は完成です。
この状態でsampleプロジェクトのビルド実行
を行って成功すればOKです。
2.Gitの設定
git push をトリガーにするための設定です。
2.1.Gitサーバー
まずは動かす事を前提に、とりあえずでWindows上でサーバーを立てました。
後々GitLabとか使ってみたいと思ってます。
次のコマンドを実行するとサーバーとして立ち上がります。
git daemon --export-all --enable=receive-pack --base-path=E:\git --verbose
オプション | 概要 |
---|---|
--export-all | git-daemon-export-okファイルがなくても許可。 |
--enable=receive-pack | 許可するサービス今回は匿名プッシュを許可。 |
--base-path=C:\git | 許可するディレクトリのトップ。 git以下にxxx.gitフォルダがある。 |
--verbose | 接続してきた相手とファイルを表示。 |
※参考
https://git-scm.com/docs/git-daemon
2.2.hook
こちらの記事を参考にさせていただきました。
git hook はじめの一歩 - Qiita
Git hooks まとめ - Qiita
今回しようしたのは、post-updateになります。
pushを受けた際ブランチ毎に実行されるようです。
ブランチ毎に処理を分けての処理は今後の課題です。
git init
すると.gitフォルダ内にhooksフォルダ作成されます。
その中にサンプルファイルpost-update.sample
がありますので、それを参考にしながらファイルを作成します。
ファイル名はpost-update.sample
ファイルの拡張子を消して、post-update
とします。
Windows版のGit hookは、git-bashで実行されました。
curl --user "(username):(password)" (URL)
という形式です。
もう少し具体的に書くと、
curl --user "user:password" http://192.168.xxx.xxx:8080/job/sample/build?token=sample
です。
ユーザー名、パスワード、IPアドレス、ポート番号の部分は自分の環境に合わせてください。
おわりに
以上で設定は完了です。
周りに聞ける人がいない中で独自に構築したので、普通はこうするなどの教えていただけると助かります。
今後は、GitLab-CEやStackStormが組み込み開発で使えないかなどを調べていきます。
以上です。最後までご覧いただきありがとうございます。