読者です 読者をやめる 読者になる 読者になる

量産型エンジニアの憂鬱

きっと僕は何物にもなれない。

ウェブでログインが必要なルーチンワークをPythonスクリプト書いてJenkinsさんに実行してもらう

Python Jenkins 自動化

最近、ルーチンワークを少しずつ自動化しています。
ウェブをチェックするようなルーチンはスクレイピングを行うのですが、ログインなどのブラウザ操作が必要な場合もあります。
ブラウザ操作が必要な場合でも自動化するのが今回の目標。

Python + Seleniumで自動操作

ウェブブラウザの自動操作はSeleniumの得意とするところです。
JavaPythonPerlRubyJavaScript(Node.js)など様々な言語で利用できます。

やっぱりパパッと書いて実行するのはスクリプト言語の得意とするところですね。
普段はPerlスクリプトを書くことが多いのですが、今回はPythonで書きました。
理由は、 Selenium Server を実行するのがめんどくさかっただけ(これも後述するDockerfileに書いちゃえばあとは簡単)。

今回は、Facebook
f:id:duck8823:20160903215516p:plain
この部分の新着通知をSlackに通知したいと思います。

書いたPythonスクリプトはこんな感じ。


WebDriverのAPIこちらを見れば書いてあります。
引数に渡されたユーザ名とパスワードを利用してFacebookにログインし、ログイン後のページ要素から情報を取得しています。

Slackへの通知はWebHooksを利用。
WebHooksのURLは適宜変更してください。

このスクリプト


で実行できます。

f:id:duck8823:20160904015408p:plain
ローカルマシンで実行する場合はWebDriverをFirefoxで指定するといいです。

Dockerで実行できるようにする

上のスクリプトをJenkins上で実行できるようにするには、Dockerコンテナを作ってその中で実行するのが楽です。
Python3.5、Selenium、PhantomJSをインストールしたDockerfileはこちら。


これを実行するのは、


Jenkinsに実行させる

ジョブはフリースタイルで作成しました。

ソースコード管理

f:id:duck8823:20160904012339p:plain
スクリプトとDockerfileがあればよいので、gistにのせてそこからcloneするようにしました。

ビルド環境

f:id:duck8823:20160904012624p:plain
パスワードをビルドに直書きしたくなかったので、credentialsに登録したユーザ名とパスワードを利用できるようにします。
(コンソールには表示されてしまいます。)
Credentials Buinding Pluginを利用しました。
参考にしたのは、ここ

ビルド

f:id:duck8823:20160904013052p:plain
Dockerを実行させるスクリプトのユーザ名とパスワードを、ビルド環境のUse secret text(s) or file(s)で指定したものに変更します。

定期的に実行させる

f:id:duck8823:20160904013401p:plain
あとは定期的に実行させるだけです。
ビルド・トリガ定期的に実行にチェックを入れ、cron形式でスケジュールを登録します。
上記の例は毎朝9時に実行する例。



これを応用すれば内部サイトのアップデート確認、実行などいろんなことができます。
JenkinsもDockerがあれば簡単に実行できるいい時代です。
ローカルJenkinsさんを雇ってルーチンワークを肩代わりしてもらいましょう。