jenkins学習メモ3 githubからクローン～単体テストを走らせる

## はじめに
船井総研デジタルのoswです。業務でjenkinsに触れることになったので学習記録を残します。参考になる方がいらっしゃれば幸いです。

## このシリーズのゴール
下記をゴールとします。
- 閉じたLAN環境にあるマシンにjenkins環境を構築（別マシンからjenkinsにアクセス）
- 手動でジョブを起動し、githubリポジトリをクローン / 単体テストを走らせる

## 学習環境
- Windows 11 (WSL2 Ubuntu)
- Rocky Linux 9.1
- jenkins 2.375.3

## 前回の学習内容
サンプルジョブを作成して実行までを学習しました。

https://qiita.com/fsd-osw/items/b71b2961311c18a33058

## パイプラインジョブの作成
前回のサンプルジョブでは、ジョブの設定画面でパラメータを指定していましたが、Pipeline scriptからUIのパラメータへ反映することも可能なようです。

むしろ、Pipeline scriptをjenkinsfileとして保存、gitで管理してそれをパイプラインに読み込ませる事の方が多いでしょうから、ジョブの扱い方としては上記の方が自然かも知れません。

そこで、今回は用意したjenkinsfileを読み込ませてジョブを作成します。

下記が今回使うリポジトリです。
- jenkinsでクローン/テストさせるリポジトリ
  - 今回はgoで作った[サンプルプログラム](https://github.com/ofsda/gosample)を用意しました。
- パイプラインで読み込ませるjenkinsfileを管理するリポジトリ
  - https://github.com/ofsda/jenkinsfile

### ビルドパラメータをPipeline scriptで定義する
gitで管理しているjenkinsfileを読み込ませるには画像のように[Pipeline script from SCM]を選択し、リポジトリや認証情報、ブランチなどを設定します。[^1]
[^1]:認証情報を追加していない場合は、[+追加]ボタン押下で追加することができます。

![パイプラインにjenkinsfileを読み込ませる.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/804e12f0-893e-38ec-4814-14994f8aeebd.png)

ここで2点注意が必要です。1点目は、設定項目の最後にある「Script Path」にはクローンしたリポジトリからの相対パスを考慮した上でjenkinsファイル名を指定するようです。

![jenkinsfile名を指定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/3031d255-b59d-2108-83f1-d595aa38ff22.png)

2点目は、jenkinsfileに関する注意です。jenkinsfileでparametersセクションを使ってパラメータを定義する場合、その値を参照する際は`${params.branch}`としてください。

jenkinsfileからパラメータを設定する場合、そのジョブを1度実行し終えた段階でUI側にも反映されるようです。`${branch}`はUIから設定されたパラメータを参照しようとしますので、jenkinsfileを読み込んだ時点で`${branch}`とすると、まだ設定されていないUI上のパラメータを参照しようとするためエラーとなってしまうようです。

## jenkinsにビルド/テストさせる
[パイプラインジョブの作成](#パイプラインジョブの作成)で紹介したjenkinsfileを読み込ませ、実行した結果が下記の画像です。意図した通り、jenkinsfileを管理するリポジトリからjenkinsfileを読み込み、それを参照してgoのサンプルをクローン、テストまで行っています。
![jenkinsfile実行結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/1dc083ec-2475-8071-a45e-a3a9d06577a3.png)

コンソールの出力結果を見てもテストが走っていることが確認できます。
![jenkinsfileコンソール出力結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/fa0dd326-a1e0-76ce-d637-b174deccf427.png)

## ジョブ実行後のパラメータを確認する
jenkinsfileで設定するパラメータは、ジョブを実行されるとUI側にも反映されるそうなので、実際に確認してみると画像のように設定されていることが確認できました。
![jenkinsfile実行後のパラメータ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/773aa2e1-bf2d-5145-de16-bdfb1e90d2cf.png)

## ジョブ実行後のパラメータを編集する
jenkinsfileを読み込んでパラメータを設定した場合、次回実行時にパラメータを編集した場合は「そのジョブ内」でだけ有効なようです。ジョブの詳細画面、及び「パラメータ付きビルド」でパラメータを編集しても実行後に元に戻るようです。

先程の実行で`branch`は`main`に設定されていますが、これを`test`ブランチに編集して実行してみます。（もちろんtestブランチは作成されています）
![UIのパラメータを詳細画面で修正する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/f0cdce66-8f5b-c22a-e558-eec707ebd9ac.png)

きちんと編集されています。「ビルド」で実行します。
![UIのパラメータを修正する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/0acb8b02-5fa0-699a-9b21-09edea828c46.png)

下記が実行結果です。問題なく正常終了しているようです。
![パラメータ編集後の実行結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/bf3f843f-94a6-a436-1f56-0b70bce3140c.png)

コンソールの出力結果も確認すると、`test`ブランチに切り替えているようですので成功です。
![パラメータ編集後のコンソール出力結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/ac2f7db2-3445-3bd0-b893-c03963eb7cc7.png)

次に、ジョブのビルド画面で先程編集したパラメータの値がどうなっているか確認します。jenkinsfileで定義した値 `main`に戻っています。
![パラメータ編集したジョブ実行後のジョブ設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820803/1efbac4c-5f01-0da8-6a10-2d2e3edfd309.png)

## おわりに
jenkinsを触る上でのジョブ作成の仕方は最低限は押さえられたのではないかな、と思います。

ゴールは達成できたのでひとまずこのシリーズは終了とします。