# (2)Giteaからソースを取得してビルド&テスト _**最終更新日:2022/05/15**_ 第二部、Jenkinsおじさんにパシらせる。 {{toc}} ## はじめに このページは「Jenkinsで.NET用環境構築を作る」の第二部です。 [[(1).NET用Jenkinsを立ち上げる]] [[(2)Giteaからソースを取得してビルド&テスト]]←イマココ! [[(3)SonarQubeで静的解析&コードカバレッジ集計]] 第二部ではGitからソースを取得するように指示し、取得したソースをビルドできるようにします。 この解説ではGiteaを使い、最終的にはWebhookを通してプッシュ時に自動的にビルドするように構築していきます。 もし自動ビルドが不要な場合は、通常のGitでも可能です。(ソース引っ張ってくるだけなので) Giteaについてはこちら(大した解説ないのでググって調べたほうが早い) →[[gitea:wiki|サーバー/Gitea]] ## Gitea構築 ### (1):DockerCompose編集 まずは前回のdocker-compose.ymlにGiteaを追加する。 Giteaの環境設定で「GITEA\_\_webhook\_\_ALLOWED_HOST_LIST=*」を追加している。 これはWebhookの呼び出しホストの設定で、すべてのホストを許可にしている。 ローカルや閉じたネットワークの場合はこれでいいが、もし外部に公開されているネットワークの場合は確認すること。 Config Cheat Sheet - Docs https://docs.gitea.io/en-us/config-cheat-sheet/ ``` yaml version: '3.8' services: jenkins: image: localhost/jenkins_net:1.0.0 container_name: jenkins_cont ports: - '8080:8080' - '50000:50000' environment: - JENKINS_USERNAME=user - JENKINS_PASSWORD=bitnami volumes: - 'jenkins_data:/bitnami/jenkins' # ★Giteaを追加! gitea: image: gitea/gitea:1.16 container_name: gitea_cont ports: - "3000:3000" - "3022:22" environment: - GITEA__webhook__ALLOWED_HOST_LIST=* volumes: - gitea_data:/data volumes: jenkins_data: driver: local gitea_data: driver: local ``` ### (2):立ち上げ 「http://(IPアドレス):3000」にアクセスして初期設定ページが表示されたら立ち上げは成功。 設定としては「サーバードメイン」と「GiteaのベースURL」をアクセスしたIPアドレスに設定するぐらい、他はデフォルト。 最後に「Giteaをインストール」を選択してインストールする。 {{thumbnail(gitea_01.png, size=400, title=初期設定)}} インストール後は下記のページが表示されるので、赤枠の新規アカウント登録をする。 最初に登録したアカウントが管理者となる。 {{thumbnail(gitea_02.png, size=400, title=アカウント登録1)}} {{thumbnail(gitea_03.png, size=400, title=アカウント登録2)}} ### (3):リポジトリ作成 ここはリポジトリを作ってソースをアップするだけなので、知ってる人はパスしていい。 ユーザーページの赤枠のところからリポジトリを新規作成する。 {{thumbnail(gitea_04.png, size=400, title=リポジトリ登録1)}} リポジトリ名はなんでもヨシ! 「リポジトリを作成」を選択してリポジトリを作成する。 {{thumbnail(gitea_05.png, size=400, title=リポジトリ登録2)}} リポジトリ作成完了、ここに確認用のソースを追加する。 追加方法は各自に任せるが、確認用のソースは例として「[[csharp:WindowsFormsで遊戯王を交えながらMVVMっぽく作って単体テストもやってみる]]」で作ったものを置いておきます。 [DL] attachment:RunRunGridLiner-develop.zip {{thumbnail(gitea_06.png, size=400, title=ソース追加1)}} 最後にJenkinsファイルをリポジトリのルートに追加する、ファイル名は「Jenkinsfile」(拡張子なし)となる。 中身は前回.NETの環境確認に使用したもの、後々これにビルドの指示を記載していく。 ``` shell pipeline { agent any stages { stage('Hello') { steps { echo 'Hello World' sh 'dotnet --info' } } } } ``` {{thumbnail(gitea_07.png, size=400, title=ソース追加2)}} ## Jenkins連携 ここからはJenkinsに先程のリポジトリからソースを取得するように指示していきます。 ### (1):ジョブ作成 ジョブ作成でパイプラインのジョブを作成する。 {{thumbnail(gitea_08.png, size=400, title=ジョブ作成1)}} ジョブの設定でパイプラインを先程のリポジトリに合わせていく 「定義」を「Pipeline script from SCM」に変更、すると画像のようにSCMを設定できるようになる。 「SCM」は「Git」を選択、「リポジトリURL」に先ほど作成したリポジトリを入力する。 今回ソースの取得のみなので認証情報は未設定でOK、もしプライベートリポジトリにしてたら必要かも? 「ビルドするブランチ」は変更していなければ「*/master」のままでOK。 入力が終わったら「保存」を選択してジョブを作成する。 {{thumbnail(gitea_09.png, size=400, title=ジョブ作成2)}} ### (2):ビルド実行 作成したら左のメニューから「ビルド実行」を選択しビルド実行。 成功するとビルド結果#1が緑色で表示される。 {{thumbnail(gitea_10.png, size=400, title=ビルド実行1)}} ビルド結果のページから、ビルド時のログ出力を確認する。 先ほど作成したリポジトリからのチェックアウトと、Jenkinsfileの中身が実行されていることが確認できる。 {{thumbnail(gitea_11.png, size=400, title=ビルド実行2)}} ### (3):.NETビルド記述 無事にリポジトリからソースを取得できたので、実際に.NETのビルドをJenkinsファイルに記述していく。 ここではLinux上でビルドするため、Windowsのコンポーネント(WindowsFormsとか)を含むビルドはエラーになるので注意。 もしWindows上でJenkinsを構築しているならビルドできる・・・はず! 先程のJenkinsファイルにクリーンとビルドとテストのステージを追加する。 最初にクリーンを行い、.NET Coreのプロジェクト(RunRunGridLinerCore)をビルドし、それのテストプロジェクト(RunRunGridLinerCore_Test)の単体テストを実行するようにしている。 「Clean」ステージでは今回の対象のプロジェクトのクリーン。 「Build」ステージでは.NET Coreのプロジェクトのビルド。 「Test」ステージではテストプロジェクトのテスト実行。 ``` shell pipeline { agent any stages { stage('Hello') { steps { echo 'Hello World' sh 'dotnet --info' } } stage('Clean') { steps { echo 'Clean' sh 'dotnet clean ./RunRunGridLinerCore/' sh 'dotnet clean ./RunRunGridLinerCore_Test/' } } stage('Build') { steps { echo 'Build' sh 'dotnet build ./RunRunGridLinerCore/' } } stage('Test') { steps { echo 'Test' sh 'dotnet test ./RunRunGridLinerCore_Test/' } } } } ``` それぞれのステージのdotnetコマンドでプロジェクトを指定しているが、これは他のプロジェクトにこの環境ではビルドできないプロジェクトが含まれているため。 プロジェクトを指定しないとソリューション全体でのクリーンやビルドになり、エラーが発生してジョブが途中で止まってしまう。 Jenkinsファイルの編集が終わったらリポジトリにプッシュしておく。 ### (4):再度ビルド実行 Jenkinsに戻り、再度ジョブの左のメニューから「ビルド実行」を選択しビルド実行。 成功すると、.NETビルド用に追加したステージ「Clean」「Build」「Test」が追加されているのがわかる。 ビルドやテストでエラーになった場合は、失敗したステージでエラーとなり赤く表示される。 ~~ビルドエラーになるソース上げるな!~~ {{thumbnail(gitea_12.png, size=400, title=再度ビルド実行1)}} 出力ログにもビルドやテストのログが出力されている、特にエラーなくビルドとテストが実行されていれば無事完了! エラー時もこのログに表示されるので、何か問題があった場合はここを見ること。 {{thumbnail(gitea_13.png, size=400, title=再度ビルド実行2)}} {{thumbnail(gitea_14.png, size=400, title=再度ビルド実行3)}} ## Webhookで自動ビルド ここではGiteaのWebhookを使い、Jenkinsがそれを検知して自動ビルドするようにしていきます。 ### (1):Giteaプラグイン追加 「Jenkinsの管理」から管理ページに移り、「プラグインの管理」を選択する。 {{thumbnail(webhook_01.png, size=400, title=プラグイン追加1)}} 真ん中の「利用可能」を選択すると、利用できるプラグインの一覧が表示されるので、右上の検索窓に「gitea」と入力。 するとGiteaプラグインが表示されるので、チェックしてインストールする。 {{thumbnail(webhook_02.png, size=400, title=プラグイン追加2)}} インストール後は再度「Jenkinsの管理」から管理ページに移り、今度は「システムの設定」を選択する。 {{thumbnail(webhook_03.png, size=400, title=プラグイン追加3)}} スクロールしていくと先程追加したGiteaプラグインの項目が追加されているので、そこに立てたGiteaのアドレスを入力する。 正しいアドレスが入力されるとすぐ下に実行中のGiteaのバージョンが表示される。 入力が終わったら保存する。 {{thumbnail(webhook_04.png, size=400, title=プラグイン追加4)}} ### (2):Webhookの設定(Gitea) Giteaの方に戻り、リポジトリの「設定」から「Webhook」を選択する。 {{thumbnail(webhook_05.png, size=400, title=Webhook設定1)}} Webhookの設定ページになるので、右の「Webhookを追加」から「Gitea」を選択しWebhookを追加する。 {{thumbnail(webhook_06.png, size=400, title=Webhook設定2)}} 「ターゲットURL」には「http://(Jenkinsアドレス)/gitea-webhook/post?job=(対象ジョブ名)」と入力する。 Jenkinsアドレスが「192.168.11.10:8080」、対象ジョブ名が「TestJob2」の場合は、「http://192.168.11.10:8080/gitea-webhook/post?job=TestJob2」となる。 {{thumbnail(webhook_07.png, size=400, title=Webhook設定3)}} 「トリガー」の項目ではどのイベントでWebhookを通知するかタイミングを選択できる。 今回はデフォルトの「プッシュのイベント」のままで進める。 入力が終わったら下の「Webhookを追加」で追加する。 その後、追加したWebhookのページに飛び、「テスト配信」を選択して疎通確認を行う。 成功すれば問題ないが、失敗した場合はJenkinsのGiteaプラグインの確認や、入力したURLを再度チェックする。 {{thumbnail(webhook_08.png, size=400, title=Webhook設定4)}} ### (3):Webhookの設定(Jenkins) Giteaの方の設定が終わったので、Jenkinsのジョブの設定を行う。 と言っても簡単で、ジョブの設定で「SCMをポーリング」をオンにする。 ポーリングによる自動ビルドは、一度手動でビルドしてからじゃないとポーリング状態にならないので注意。 {{thumbnail(webhook_09.png, size=400, title=Webhook設定5)}} ### (4):自動ビルド実行 あとはリポジトリに適当にプッシュするだけ。 Jenkinsのジョブのページを開いていれば、自動的にビルドしてくれるところが見れるぞ!失敗したときは悲しいけどね! ポーリングしているかどうかは「Gitのポーリングログ」で見ることができる。 {{thumbnail(webhook_10.png, size=400, title=自動ビルド実行)}} ## おわりに これでGiteaからソースを取得してビルドできるようになりました。 自動でビルドや単体テストまでしてくれると助かりますね、サンキューJenkinsおじさん! 最後はソースを静的解析してガバ具合を確認していきます、お楽しみに! [[(1).NET用Jenkinsを立ち上げる]] [[(2)Giteaからソースを取得してビルド&テスト]]←イマココ! [[(3)SonarQubeで静的解析&コードカバレッジ集計]] --- [[wiki|メインページに戻る]]