2017-11-19

Jenkins上でPython3の定期実行ジョブを作った時のメモ

# やりたいこと

- Jenkins上でpython3のスクリプトを、定期実行します。
- JenkinsはCI(継続的インテグレーション)ツールとして利用されますが、同時に定期実行の機能を持ち合わせています
- かつ、サーバー上で実行を行ってくれるので、パソコンを起動しなくても定期実行を行ってくれるようになります。

# 背景知識

- そもそもJenkinsとは何か?


Javaで書かれたオープンソース継続的インテグレーションツール
(英:Continuous[継続した] Integration[結合])である。(Jenkinsとはなんぞや?)

- 継続的インテグレーション(CI)とは?


継続的インテグレーションとは、ソフトウェア開発において、ビルドやテストを頻繁に繰り返し行なうことにより問題を早期に発見し、開発の効率化・省力化や納期の短縮を図る手法。 特に、専用のツールを用いてこのプロセスを自動化あるいは半自動化し、効率的に実施する方式。(Jenkinsとはなんぞや?)


- 継続的インテグレーションのメリットとは


毎日、最新版のアプリケーションをサーバーにデプロイすることで、最新のアプリケーションに対するテストを行えます。テストのカバレッジを毎日収集することで、テストの進捗状況を細かく確認することができます。静的解析を行うことで、手動では見つけにくいバグや品質低下を発見することができます。これらを毎日人力で行うことは非常に手間です。Jenkinsはそれらを自動化する手助けをしてくれます。(Jenkinsで実現するJava EEアプリケーションの自動ビルドと自動デプロイ)


- Jenkinsは定期実行するために有効なツール?


で、Jenkinsで今回やりたいのは継続的インテグレーションではなく、定期実行プログラムなのです。Jenkinsが強いのは、Cronをサーバー上で設定できるので、非常に便利です。
Jenkinsは継続的デリバリーとか継続的インテグレーションの文脈で語られることが多いので、ソースコードのビルドだったりテストの実行だったりをエンジニアの代わりに実行してくれるツールだと思われていることが多いです。(当たり前のことを長々と何言ってんだって感じですが)しかしJenkinsの機能を、そういったような開発管理ツールではなく汎用的なバッチツール、要は「すごいcron」として使用できることも分かったのでちょっと試してみました。(Jenkinsをすごいcronとして使う)

# 前提


 - すでにJenkinsがのっかっているサーバーが存在することを仮定
- 実行したい処理を書いたスクリプトも前提として存在する

# 手順


- Jenkinsに新規アカウントを作成し、ログインする
- ShiningPanda Pluginのインストールを行う


ShiningPandaは、JobごとにPythonの環境を構築してくれる、virtualenvを作成してくれます。これを利用することで、ほかのPython環境との依存性を低め、切り分けることができるようになります。

今回は、Jenkins ShiningPanda Plugin(輝くパンダ?)プラグインを利用して、ジョブ固有のPython環境を作る方法を紹介します。 ShiningPanda Pluginではvirtualenvを利用して、複数(ジョブ毎)のPython環境を切り替えます。Jenkins ShiningPanda Pluginによるジョブ固有のPython環境(virtualenv)

Amazon LinuxなどRedhat系Linuxでは、Pythonのシステム依存度が非常に高く、下手にアップデートなどを行うと悲劇となることがよく知られています。 デフォルトのモジュール空間へのライブラリ追加も極力避けたいところです。 特にJenkinsでPythonのシステムをテストする場合や、Pythonのスクリプトを実行したい場合は、ジョブ毎にモジュール空間を分けることがベストプラクティスです。Jenkins ShiningPanda Pluginによるジョブ固有のPython環境(virtualenv)

- Jenkins > 設定でpython3の設定を行う

Pythonの実行プログラムは、Python3系のことを行わなければならないが、もともと対応しているバージョンが2.0にしか対応していない。すでにPython2の実行ファイルが存在する場合、新規にPython3を設定します。





- 新規ジョブの作成を選ぶ

- ジョブ名を設定する

- フリースタイル・プロジェクトのビルドを選択する

- Jenkins / その他 / 「作成したプロジェクト名」を選択する

- 設定を選ぶ

- 詳細設定を記入する

ここには、ビルドでVirtualenv Builderを選択し、Python環境を構築します。もろもろのライブラリなどをここでインストールさせます。


- ビルド実行を選択

- ビルドに成功すればOK

- ビルドトリガを設定し、CRONを書きます。

この辺を設定すればわかる。[Jenkins] ビルドトリガ(定期的に実行)設定についてのまとめ

これで定期実行された。

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...