Vagrant環境のDockerでJenkinsサーバを構築し、スレーブのWindowsマシンを接続する(後半)

## イントロ

前回の記事のつづきです。Jenkinsサーバを構築したのち **スレーブとなるWindowsPCをそのJenkinsにぶらさげて、JenkinsからそのWindowsマシンに何か処理をさせて**みようというはなしでした。

![Vagrant_Docker_jenkins.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/51fc688d-9c3a-7cca-274c-da699784671a.png)

- [Vagrant環境のDockerでJenkinsサーバを構築し、スレーブのWindowsマシンを接続する(前半)](https://qiita.com/masatomix/items/4607065c309c6034a6a1)

ちなみにこのあとの作業は、今回構築したJenkinsでも、ご自身で別途用意したJenkinsでもどちらでもかまいません。適宜Jenkinsをご用意ください。

## Jenkins側の設定

まずはJenkins側の設定から。任意の端末からブラウザでJenkinsにアクセス(``http://[vagrantが動いているマシンのIP]:8888/jenkins/``)し、

- ``Jenkinsの管理 >> ノードの管理 >> 新規ノード作成`` と遷移、「ノード名」を 「windows-slave」

として「OK」を押下
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/7fac980c-fbd0-6155-969e-8fe9f046cf06.png)

つぎの設定画面では

- リモートFSルート は、WindowsPC側のjarファイルなどが展開されるディレクトリで、とりあえず「c:/temp/」としました。もちろん、WindowsPC側に存在するパスを指定してください。
- 起動方法は「Launch agent by connecting it to the master」


最後に「保存」をクリック。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/9e178ded-b6cb-b243-01c5-0726d50b21e3.png)

保存されました。が、まだWindowsPCから接続していないので、アイコンには×がついている状態です。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/2508d1d1-18c2-1d13-cd52-efe77f2ac5ae.png)


## WindowsPC側の設定

### Jenkinsサーバへ接続
つづいてスレーブにしたい WindowsPCで操作します。ブラウザでJenkinsにアクセス(``http://[vagrantが動いているマシンのIP]:8888/jenkins/``)し、``Jenkinsの管理 >> ノードの管理 >> 「windows-slave」``  へ遷移。

かつては下記の画面上の「Launch」アイコンのクリックでおしまい、だったのですが、セキュリティ上どうも動かないこともあるようなので、もう初めから手動でいきます。

少し下の ``agent.jar`` へのリンクがあるのでクリックしてダウンロードします。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/a6401596-9607-1526-21f8-e7fc3181aeb0.png)

今回は、最終的にjarは「``c:/temp``」においておきました。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/a442392c-9f84-e180-3038-45e113acabf6.png)

さて画面をよく読むと、画面上に表示されている、

```
java -jar agent.jar -jnlpUrl http://localhost:8888/jenkins/computer/windows-slave/slave-agent.jnlp 
-secret 0d2612f004fbbeab7a0e18cf48def8475f7cdf5eebf1a2a8a29e9e5ee66723d8 
-workDir "c:/temp/"
```

をコマンドプロンプトから実行することで、WindowsPCからJenkinsサーバへ接続をしにいくみたいなので、さっそく上記を実行します。注意点は

- コマンドプロンプトを管理者権限で開くこと
- agent.jarを置いたディレクトリ ``c:/temp`` で実行すること
- URLを localhostではなく、WindowsPCから見たときのJenkinsサーバのIP(ようするにブラウザバーに表示されているIPのこと) にすること

などなどです。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/83d9d8b3-4ea9-f8d8-eddc-e0c209073ff1.png)

実行します。


```bash
Microsoft Windows [Version 10.0.17763.615]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>cd c:\temp

c:\Temp>java -jar agent.jar -jnlpUrl http://192.168.2.205:8888/jenkins/computer/windows-slave/slave-agent.jnlp -secret 0d2612f004fbbeab7a0e18cf48def8475f7cdf5eebf1a2a8a29e9e5ee66723d8 -workDir "c:/temp/"

... 割愛
情報: Trying protocol: JNLP4-connect
7 29, 2019 11:05:03 午前 hudson.remoting.jnlp.Main$CuiListener status
7 29, 2019 11:05:07 午前 hudson.remoting.jnlp.Main$CuiListener status
情報: Connected
```

接続出来たようですね。。ブラウザをリロードしてみると、、
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/c148f324-bab7-4364-03e9-736115da2580.png)

確かにWindowsPCから接続が出来ているようです。

### UiPath Studioでワークフロー作成

そういえば、Jenkinsから実行する Hello Worldなワークフローを UiPath Studioで作っておきましょう。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/58682f6e-6e6f-4b18-f45d-4ac2094f3503.png)

Publishして一度実行することで、
``%userprofile%\.nuget\packages\HelloWorld2019\1.0.7149.20355\lib\net45``
などに project.jsonなどが配置されることを確認しておきます。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/c8088bf2-1fa9-0c18-3f3d-21311924a001.png)

スレーブのWindowsPC側の準備は完了です。

## Jenkinsのジョブを作成

さて、UiPathのワークフローを実行するためのJenkinsのジョブを作成します。
任意の端末で Jenkinsを開き、「新規ジョブ作成」を選択
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/0cd42eb7-baf9-4622-10cc-79e5ff892846.png)

名前を「UiPathTest」として「フリースタイル・プロジェクトのビルド」を選択し「OK」をクリック。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/844d1806-f3f4-cddc-c054-2ea6c1dd2e58.png)

設定画面では、一番上の General にある「実行するノードを制限」のラベルに、先ほど設定したWindowsPCのノード名「windows-slave」を指定しておきます。Jenkinsは通常ジョブをマスター(このLinux上のJenkinsサーバ)で実行するので、それをスレーブのWindowsPC実行に制限するための設定です。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/5003d734-758f-20e1-7e37-b13f9fc690e4.png)

さてずーと下に行って「ビルド手順の追加」プルダウンから、Windowsバッチコマンドの実行 を選び、、
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/ef757af3-4b2b-d5a3-7fc1-9f8f82785875.png)


コマンドのテキストエリアに

```
"c:\Program Files (x86)\UiPath\Studio\UiRobot.exe"  -file "%userprofile%\.nuget\packages\HelloWorld2019\1.0.7149.20355\lib\net45\project.json"
```

と入れて、保存をクリックします。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/b71329e1-a3f6-a658-e2b5-cd064f4ccbde.png)

さてJenkinsのジョブを実行します。左のメニューの「ビルド実行」をクリックします。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/bbb3f1c8-2261-62b6-062e-f7b480c9c07d.png)

処理が開始されたようなので、、、
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/af779d0c-2d3e-03bf-fcdc-3c9d26086fd6.png)

スレーブのWindowsPCを見てみましょう。。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/b1fa6b59-c39b-4621-9a18-a7bd2956715b.png)

おお、WindowsPCで UiPath のワークフローが実行されました！MessageBoxをとじてワークフローは終了させておきましょう。

Jenkins側のログを確認しておきます。下記の通りビルド履歴のプルダウンから、コンソール出力を選択します。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/600ae357-3427-22fc-d141-b27a30f475ac.png)

今回の実行で処理されたログが表示されています。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73777/6b0d74c0-dd47-d2d2-cdf3-7a86895dd23a.png)

JenkinsからUiPath Robotの操作ができることが確認出来ましたね！


## まとめ

- 特定のアカウントでログイン済みのWindowsをJenkinsのスレーブとして設定することで、JenkinsからUiPath Robotのワークフローを実行することができそう
- ただスケジュール実行などはライセンス規約上許可されていないので要注意
- OrchestratorのUnattended RoboはWindowsにログインしてない状態でもワークフローを実行できて使い勝手がよい
- 当然ですが Orchestratorが持っているようなワークフローの配布、野良ロボの統率などの機能はない

おつかれさまでした。



## 関連リンク

- [Vagrant環境のDockerでJenkinsサーバを構築し、スレーブのWindowsマシンを接続する(前半)](https://qiita.com/masatomix/items/4607065c309c6034a6a1) 前回の記事
- [UiPath Orchestrator Community Edition](https://platform.uipath.com/) Unattended Robotの操作感など、こちらから試用できます
- [商用トライアルとCommunity エディションの違い | UiPath(ユーアイパス) 日本](https://www.uipath.com/ja/freetrial-or-community) 
- [UiPath Robots の外部トリガーによる実行について](https://www.uipath.com/ja/resources/knowledge-base/2019-06-03)