# (1).NET用Jenkinsを立ち上げる _**最終更新日:2022/05/15**_ 第一部、Jenkinsおじさんを仲間にする。 {{toc}} ## はじめに このページは「Jenkinsで.NET用環境構築を作る」の第一部です。 [[(1).NET用Jenkinsを立ち上げる]]←イマココ! [[(2)Giteaからソースを取得してビルド&テスト]] [[(3)SonarQubeで静的解析&コードカバレッジ集計]] 第一部ではLinux向けJenkinsに.NET 5用のツールを入れて、Docker上に立ち上げるところまで解説します。 「もうJenkinsも知ってるし、ソースもあるから環境だけ作れればいいぜ!」って方はこの部で終わりです! Jenkinsについては、Jenkins自体がどのようなものかと、簡単なジョブを作れる程度の知識が必要です。 一応流れは説明しますが、詳しい解説はないので、各自調べるか勉強してください! ちなみに、これからやることはAzure DevOpsで大体できるらしいですよ・・・(未確認) Azure DevOps Services | Microsoft Azure https://azure.microsoft.com/ja-jp/services/devops/ ## .NET環境インストールイメージ作成 いつも通りDockerイメージをDockerfileで作っていきます。 解説はPodmanなので、Dockerの方は適宜置き換えてお読みください。 イメージは公式とBitnami版があるが、Bitnami版のほうがカスタムしやすかったのでこっちで。 bitnami/bitnami-docker-jenkins: Bitnami Docker Image for Jenkins https://github.com/bitnami/bitnami-docker-jenkins ### (1):ファイル取得 Bitnami版Jenkinsのリポジトリからクローンして取得する。 ### (2):Dockerfile編集 「2/debian-10」フォルダに移動し、「Dockerfile」をエディタで開く。 今回追加するのは5点。 まずは「wget」を追加でインストール。 「install_packages 」の最後に追記する。 ``` docker # Install required system packages and dependencies RUN install_packages (長いので中略) wget ``` 次に.NET用の環境変数を設定する。 「DOTNET_CLI_HOME」は.NETの作業フォルダ的なもの、これを設定しないとビルド時にエラーになる。 「PATH」には追加する.NETツールを使用するためのパスを追加。 「HOME」は色々あって固定、作業フォルダなので別のフォルダでも可能。 「SONAR_USER_HOME」は第三部で使用する「SonarQube」用、第三部までいかないなら不要。 ``` docker # .NET Environment ENV DOTNET_CLI_HOME="/home/dotnet" \ PATH="/home/dotnet/.dotnet/tools:$PATH" \ HOME="/home/dotnet" \ SONAR_USER_HOME="/home/dotnet" RUN mkdir /home/dotnet ``` その次は.NET SDKをインストールさせる。 公式の手順をそのまま追加。 Debian に .NET をインストールする - .NET | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-debian ``` docker # Install .NET SDK RUN wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb RUN dpkg -i packages-microsoft-prod.deb RUN rm packages-microsoft-prod.deb RUN apt-get update && apt-get install -y apt-transport-https RUN apt-get update && apt-get install -y dotnet-sdk-5.0 ``` 第三部で使用する「SonarQube」用のツールもインストールする。 第三部までいかないなら不要なのでパスしていい。 どちらにせよ作業フォルダに権限を付与しておく。 ``` docker # Install .NET Tools RUN dotnet tool install --global dotnet-sonarscanner RUN dotnet tool install --global dotnet-reportgenerator-globaltool RUN chmod 777 -R /home/dotnet ``` 最後に.NETのロックファイルを削除させる。 削除しないと結構な確率でJenkinsでのビルドが失敗する。 ``` docker # Remove .NET Lock RUN rm -r /tmp/NuGetScratch/lock/ ``` もし下記のようなのエラーが出た場合は、このロックファイルを削除する必要がある。 ``` /usr/share/dotnet/sdk/5.0.407/NuGet.targets(565,5): error : Unable to obtain lock file access on '/tmp/NuGetScratch/lock/aae88f3c14dc199495b9493acae97ac082428280' for operations on '/home/dotnet/.nuget/NuGet/NuGet.Config'. This may mean that a different user or administrator is holding this lock and that this process does not have permission to access it. If no other process is currently performing an operation on this file it may mean that an earlier NuGet process crashed and left an inaccessible lock file, in this case removing the file '/tmp/NuGetScratch/lock/aae88f3c14dc199495b9493acae97ac082428280' will allow NuGet to continue. ``` 最終的にはこんな感じ。 {{collapse(長いので折りたたみ(クリックして展開)) ``` docker FROM docker.io/bitnami/minideb:buster LABEL maintainer "Bitnami " ENV HOME="/" \ OS_ARCH="amd64" \ OS_FLAVOUR="debian-10" \ OS_NAME="linux" ARG JAVA_EXTRA_SECURITY_DIR="/bitnami/java/extra-security" COPY prebuildfs / # Install required system packages and dependencies RUN install_packages acl ca-certificates curl fontconfig gzip libc6 libcom-err2 libcurl4 libffi6 libfontconfig1 libgcrypt20 libgmp10 libgnutls30 libgpg-error0 libgssapi-krb5-2 libhogweed4 libidn2-0 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 libnettle6 libnghttp2-14 libp11-kit0 libpsl5 librtmp1 libsasl2-2 libssh2-1 libssl1.1 libtasn1-6 libunistring2 openssh-client procps tar unzip zlib1g wget RUN . /opt/bitnami/scripts/libcomponent.sh && component_unpack "render-template" "1.0.1-10" --checksum 97c2ae4b001c5937e888b920bee7b1a40a076680caac53ded6d10f6207d54565 RUN . /opt/bitnami/scripts/libcomponent.sh && component_unpack "java" "11.0.14-7" --checksum 900545c4f346a0ece8abf2caf64fd9d4ab7514967d4614d716bf7362b24f828b RUN . /opt/bitnami/scripts/libcomponent.sh && component_unpack "gosu" "1.14.0-7" --checksum d6280b6f647a62bf6edc74dc8e526bfff63ddd8067dcb8540843f47203d9ccf1 RUN . /opt/bitnami/scripts/libcomponent.sh && component_unpack "git" "2.35.1-6" --checksum 75c0294b7af868721549926139e6ddbec9548fbd0e69c7e199d640a4531d858b RUN . /opt/bitnami/scripts/libcomponent.sh && component_unpack "jenkins" "2.332.2-0" --checksum 410401ac5e9594fe22684f8f1d4b9605e52c381cb5438303a01d4f493ebca3e9 RUN apt-get update && apt-get upgrade -y && \ rm -r /var/lib/apt/lists /var/cache/apt/archives RUN chmod g+rwX /opt/bitnami COPY rootfs / RUN /opt/bitnami/scripts/java/postunpack.sh RUN /opt/bitnami/scripts/jenkins/postunpack.sh ENV APP_VERSION="2.332.2" \ BITNAMI_APP_NAME="jenkins" \ JAVA_HOME="/opt/bitnami/java" \ PATH="/opt/bitnami/common/bin:/opt/bitnami/java/bin:/opt/bitnami/git/bin:$PATH" # .NET Environment ENV DOTNET_CLI_HOME="/home/dotnet" \ PATH="/home/dotnet/.dotnet/tools:$PATH" \ HOME="/home/dotnet" \ SONAR_USER_HOME="/home/dotnet" RUN mkdir /home/dotnet # Install .NET SDK RUN wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb RUN dpkg -i packages-microsoft-prod.deb RUN rm packages-microsoft-prod.deb RUN apt-get update && apt-get install -y apt-transport-https RUN apt-get update && apt-get install -y dotnet-sdk-5.0 # Install .NET Tools RUN dotnet tool install --global dotnet-sonarscanner RUN dotnet tool install --global dotnet-reportgenerator-globaltool RUN chmod 777 -R /home/dotnet # Remove .NET Lock RUN rm -r /tmp/NuGetScratch/lock/ EXPOSE 8080 8443 50000 USER 1001 ENTRYPOINT [ "/opt/bitnami/scripts/jenkins/entrypoint.sh" ] CMD [ "/opt/bitnami/scripts/jenkins/run.sh" ] ``` }} ### (3):ビルド ビルドしてイメージを作成する。 ``` shell podman build ./ -t jenkins_net:1.0.0 ``` 終了後はイメージ一覧コマンドで作成され追加されているか確認する。 ## 動作確認 ### (1):立ち上げ さっとdocker-compose.ymlファイルを作って立ち上げましょう。 ``` 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' volumes: jenkins_data: driver: local ``` 「http://(IPアドレス):8080」にアクセスしてログインページが表示されたら立ち上げは成功。 アカウント名とパスワードはdocker-compose.ymlで設定したやつ。 {{thumbnail(jenkins_01.png, size=400, title=ログイン)}} ### (2):ジョブ作成 ログインすると「プラグインのアップデートしろ」通知があるが、無視してまずは.NETがインストールできたか確認する。 左のメニューから「新規ジョブ作成」を選びジョブ作成ページへ。 ジョブ名を入力し、「パイプライン」を選択したら「OK」でジョブを作成する。 {{thumbnail(jenkins_02.png, size=400, title=新規ジョブ作成1)}} {{thumbnail(jenkins_03.png, size=400, title=新規ジョブ作成2)}} ジョブの設定に関してはすべてすっ飛ばして、パイプラインの定義のみ行う。 右のメニューから「Hello World」を選択しサンプルを呼び出し、8行目に.NETの情報を呼び出すコマンドを追記する。 入力が終わったら「保存」でジョブを保存する。 ``` shell sh 'dotnet --info' ``` {{thumbnail(jenkins_04.png, size=400, title=新規ジョブ作成3)}} ### (3):ビルド実行 作成したら左のメニューから「ビルド実行」を選択しビルド実行。 成功するとビルド結果#1が緑色で表示される。 {{thumbnail(jenkins_05.png, size=400, title=ビルド実行1)}} {{thumbnail(jenkins_06.png, size=400, title=ビルド実行2)}} ### (4):ログ出力確認 ビルド結果のページからログを確認し、.NETが使えるか確認する。 ビルド結果には赤枠のリンクからビルド結果ページに飛んでいける。 {{thumbnail(jenkins_07.png, size=400, title=ビルド結果1)}} 左のメニューから「Console Output」を選択し、ビルド時のログ出力を確認する。 .NETの情報がログに出力されていれば無事に環境構築は無事完了! ``` shell + dotnet --info .NET SDK (reflecting any global.json): Version: 5.0.407 Commit: 1a1785612e (以下略) ``` {{thumbnail(jenkins_08.png, size=400, title=ビルド結果2)}} ## おわりに これでJenkinsに.NET環境を入れる作業は終わりです。 これも.NETが様々なプラットフォームで動かせるようになったおかげです、サンキューMS! 次は実際にソースを取得してビルドと単体テストをします、お楽しみに! [[(1).NET用Jenkinsを立ち上げる]]←イマココ! [[(2)Giteaからソースを取得してビルド&テスト]] [[(3)SonarQubeで静的解析&コードカバレッジ集計]] --- [[wiki|メインページに戻る]]