6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

組み込みLinux開発でJenkinsを使った自動ビルド環境の構築

Posted at

背景

組み込みソフトウェアの開発で、OSとCPUのポーティングを行う事になり、開発環境を一から構築し直す事になりました。
今までは自動化などはしていなかったため、思い切って自動化をしてみました。

使用したツール

  • Jenkins
  • Hyper-V
  • Cppcheck
  • Git

概要

手元にあまり使われていないPCがあったため、それをサーバーとしてコード編集以外の作業をサーバーに任せる形で環境を構築します。

構成図.jpg

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 pluginGit Pluginだと思います。

基本的にはJenkinsのワークディレクトリを使用しています。
(あまり良くないかもしれませんが。。。)
ワークディレクトリのい位置は、Jenkinsの管理 - システムの設定 から確認できます。

1.1.ジョブ作成

1.ログイン後、新しいジョブをクリック。
2.ジョブの名前を設定。とりあえずsampleという名前で作成。
3.フリースタイル・プロジェクトのビルドを選択してOK。
4.下記のようにビルド設定をします。

  • ソースコード管理
    • Gitを選択
      • リポジトリURLにリモートPCのディレクトリを設定(E:\git\sample.git)

ソースコード管理.jpg

  • ビルド・トリガ
    • リモートからビルドをチェック
      • 認証トークンに任意の文字列を設定(sample)

ビルド・トリガ.jpg

1.2.リモートビルド

次に、要のビルド手順の設定を行います。
リモートホスト側は git clone 済みです。
鍵認証ではなく、パスワード認証としています。

1.2.1.SSH

こちらを参考にさせていただきました。

(1) 認証情報

  • Jenkinsのトップページから、認証情報Systemをクリック
  • グローバルドメインをクリック
  • 認証情報の追加を選択

グローバルドメイン.jpg
認証情報の追加.jpg

(2) 認証情報の追加

  • 種類ユーザー名とパスワードを選択
  • スコープグローバルを選択
  • ユーザー名パスワードにリモートホストのユーザー情報を入力
  • IDは未入力
  • 必要なら説明も入力。
  • 保存を選択

認証情報.jpg

(3) SSHリモートホストの追加

  • トップページから、Jenkinsの設定システムの設定を選択
  • SSHリモートホストから 追加をクリック
    • ホスト名にリモートホストのホスト名またはIPアドレスを入力
    • ポートに接続ポート番号を入力(デフォルトは22)
    • Credentialsに先程作成したユーザーを選択
    • Check connectionをクリック
    • Successfull connectionが出れば接続成功
    • 保存をクリック

SSH.jpg

(4) ビルド設定

  • トップページから作成したsampleジョブを選択して、設定をクリック
  • ビルド手順の追加からリモートホストでシェルを実行を選択
    • SSHサイトを先程作成した認証情報
    • シェルスクリプトに実行したいコマンドを入力
    • 保存をクリック

ビルド.jpg

(5) ビルド後の処理

  • ビルド後の処理の追加から成果物を保存を選択
    • 保存するファイルを入力
      • カレントディレクトリはJenkinsのワークディレクトリです。
      • ビルドで作成した実行ファイルを選択しました。

ビルド後.jpg

1.3.Cppcheck

(1) Cppcheck

CppcheckはリモートPCのWindows側にインストールしています。
パスは事前に通してあります。

(2) ビルド設定

  • トップページから作成したsampleジョブを選択して、設定をクリック
  • ビルド手順の追加からWindowsバッチコマンドの実行を選択
    • コマンドにCppcheckを実行するコマンドを入力
      • 作業ディレクトリは、Jenkinsのワークスペースで行われます。
      • 詳細は省きますが、cppcheck --xml --enable=all . 2> report.xmlを入力しました。
  • ビルド後の処理で、出力されたファイルを選択します。
    • こちらもカレントディレクトリはJenkinsのワークスペースになります。
    • report.xmlと入力しました。
  • 保存をクリック

cppcheck.jpg

上記の設定でビルド処理は完成です。
この状態で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が組み込み開発で使えないかなどを調べていきます。

以上です。最後までご覧いただきありがとうございます。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?