[RealWorld Test Automation. Day 09] To reduce Jenkins operation set disable/enable in bulk 

# Outline

前回までは、Test automationの基本的な学習コンテンツを執筆してきました。
今回からは、実運用上でのtipsを執筆し、よりリアルにTest automationを知る場を提供したいと思ってます

自分のtest automationの環境は、以下であり、これを前提に進めていきます

- Ranorex for test automation
- Jenkins for CI/CD
- PHP for Jenkins support tool
- all test automation script run once a day

今回は、jenkins operationの改善tipsです

# Background

Jenkins serverが多くなると、jenkinsの作業で時間がかかってしまう。
自分の運用上あるのが、一時的にjenkinsの一部jobを停止したいとき。

この場合、各jobを選択し、"プロジェクトの無効化" をクリックする必要がある。
もし、１００個 jobを停止したい場合、100回このoperationを繰り返す必要があり、つまんない作業に時間を要してしまう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/1642abb6-56bf-e83a-1448-21be3381edf7.png)

このjenkins operationを改善するため、一括して"プロジェクトの無効化"、"プロジェクトの有効化"をできるようなphpを作った。

# set up


### 1. environment

- PHP Version 7.3.7
- Smarty Version 3.1
- Jenkins Version 2.250

### 2. jenkins setting

API経由でjenkins情報を取得できるように、"Allow anonymous read access" を on にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/e065c919-2b44-fc1b-30c1-3d292de38ac6.png)

API経由で操作できるように、tokenを取得する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/1bf5352f-46c1-6a67-ff55-c3ea1a933744.png)


### 3. php script setting

下記gitからソースを取得する

<A HREF="https://github.com/rakutentech/jenkins_support_tool">https://github.com/rakutentech/jenkins_support_tool</A>

<B>config</B>
conf_oss.ini で、上記取得したtokenを記述する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f80efba6-415c-75a6-7362-47741013bc1c.png)

<TABLE BORDER=1>
<TR><TD>API_USER </TD><TD> jenkins をAPIでCALLするユーザー</TD></TR>
<TR><TD>JENKINS_TOKEN</TD><TD> jenkins をAPIでCALLするユーザーのtoken。jenkins毎に設定する</TD></TR>
<TR><TD>JENKINS_DOMAIN</TD><TD> jenkins サーバー情報</TD></TR>
</TABLE>


<B>source tree</B>

以下のように配置する
※wwwrootがtop directoryと想定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/889cbba4-3afc-0365-3fdb-4ab9b8f4c24b.png)


# use it

disable/enableができるのは、２つのtypeのjobである

- フリースタイル・プロジェクトのビルド
- パイプライン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/a8aa1899-9a81-e7d8-6cac-e1349aec312d.png)


実際にこのツールにアクセスすると、下記のようなページになる
まず、confに設定した、jenkinsの一覧から、ひとつのjenkinsを選ぶ。
すると、その下に、jenkinsと同じようなフォルダー構成が表示される。
フォルダをクリックすれば、さらに下位のフォルダーに遷移することができる。
左側のcheckboxが、enable/diableの状態を示す。
このcheckboxを全て外し、"update"をクリックすると、すべてのjobのプロジェクトの無効化ができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f99d7a49-4867-f8cc-ed98-ae157f190389.png)


たとえば、以下のようなscriptが50個あるとする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/b354b989-8ea6-1bc0-13d6-7f1c7712fc14.png)

これを全てoffしたい場合、"all off"をクリックし、"update"を押すだけ！
<B>5秒</B>の作業で終わる。
もし、従来のjenkins上で作業する場合、 <B>15 sec * 50 = 12.5 分</B>かかってしまう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/b5b6895b-b980-7c88-db9b-3f5406772ff4.png)

# 仕組

他の方でも流用できるようにシンプルにしています

- confで定義した、jenkins serverのtree情報を取得
- 選んだjenkinsのfolderをクリックしたら、その階層情報をAPIで取得 (json)
- disable/enableの変更情報のあるjobに対して、enable/disableのpostを実施




# summary

jenkinsが多くなり、かつjobの数が多くなると、今回のようなちょっとした操作だけでも、大変な時間を要する。
test automationのoperationでは、そういった無駄な作業を省く工夫を考えることが重要である。


# Finally


次は8月21日（金）頃配信予定です。
引き続き、test automationのreal worldでのtipsを考えています


# back number

- <A HREF="https://qiita.com/emurin/items/af7b91b979159e27286a">[Lesson Test Automation. Day 01] What's Test Automation</A>
- <A HREF="https://qiita.com/emurin/items/750983107471386ea10a"> [Lesson Test Automation. Day 02] Test Layer and Tool</A>
- <A HREF="https://qiita.com/emurin/items/27f057b83bb2206868d3"> [Lesson Test Automation. Day 03] introduce test automation</A>
- <A HREF="https://qiita.com/emurin/items/34eea5255b414b3d1585">[Lesson Test Automation. Day 04] Test Automation Code Design vol.01</A>
- <A HREF="https://qiita.com/emurin/items/7feedeee162d205a1ed8">[Lesson Test Automation. Day 05] Test Automation Code Design vol.02</A>
- <A HREF="https://qiita.com/emurin/items/bb0e79fac43a569ad823">[Lesson Test Automation. Day 06] Test Automation Code Design vol.03</A>
- <A HREF="https://qiita.com/emurin/items/e9d7f26262eb599a2c7f">[Lesson Test Automation. Day 07] Test Automation Code Design vol.04</A>
- <A HREF="https://qiita.com/emurin/items/7aaa3f481cc57a340188">[Lesson Test Automation. Day 08] Test Automation Operation</A>


<!--
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/7a7a19b0-d4a5-3779-1a07-9676c438b0ca.png)
-->