[python] Jenkinsでいろいろ自動化してみよう [jenkins]

CEDECなどで便利だというのはよくわかっていたのですが
手を出せずにいたJenkinsを最近触り始めたので
何番煎じかわからないですが自分なりにいろいろメモをば。

準備。

まず、今回はJenkinsともろもろコミット先としてGitが欲しかったので
自宅のサーバーPCにXAMPPを入れて、tomcatを入れることでJenkinsとGitBucketをインストールしました。
XAMPPさえ入れば、JenkinsとGitBucketは指定フォルダにwarファイルをコピペすればOKなので
インストールはらくちんでした。

まず、Jenkinsに対して「GitBucket」プラグインをインストールします。
このプラグインを入れることで、GitBucketにスクリプトをコミットしたときにJenkins
を開始する・・・などの処理がわりと簡単に作ることができます。

とりあえずインストールしたJenkinsを起動して、GitBucketへコミットしたときに実行するJobを作成します。

新規ジョブ作成をクリックして

ソースコード管理を「Git」にして、対象のリポジトリを指定します。
(remisabaというのが、自分のサーバーPC名です)

トリガをGitBucketのPush時に指定します。
この項目は、JenkinsのGitBucketプラグインを入れることで表示されます。

このままだと何も起きないので、GitBucket側にもWebHookを入れます。
URLは JenkinsのURL+ gitbucket-webhook とすればOKです。

以上でGitBucketとJenkinsの連動準備は完了なので、実際に動かしていきます。

ジョブの作成

まず、今回はPythonのモジュールをコミットすると

1 テストを実行
2 テストにクリアしたら、whlファイルにしてから成果物を保存
3 指定の共有ドライブにコピー

の3段階にします。

今のバージョンだとパイプライン(スクリプトによる記述)もあるようですが
今回はスタンダードな方法で、ジョブ終了→次のジョブ
の形式で作っていきます。

今回はこんな構成にしています。
テストはnoseを使用します。(テストの内容などは過去の記事参照

まず、GitBucketのPushに連動して実行されるジョブのビルドコマンドを

 

Windowsのバッチコマンドで記述します。

この設定でジョブを実行すると、

ユーザーフォルダ/.jenkins/workspace/<job_name>/
下にGit上のデータがプルされて、
上のコマンドが走ります。

Jenkinsのコマンドは、このworkspace基準で実行されるので
cd XXX で、モジュールフォルダに入ってからテストを走らせればOKとなります。

テストが問題なく走れば、OKとなり

ビルドが無事に完了したことになります。
Jenkinsを使用すると、ビルドのコンソールのログが残るのがとても良いです。

次に、テストが無事に終了したらWheelを作成します。

新しくJobを作成して、上と同じようにGitにURLを指定します。

トリガを、1つめのテストジョブに指定して、安定している場合のみ起動にします。
こうすることで、テストにクリアしたもののみwhlを作成するようにできます。

最後にwhlを作成するビルドバッチを指定して、
ビルド後の処理として「成果物を保存」を指定します。
このフォルダ指定はJenkinsのworkspaceベースの相対パス指定ができます。
whlは distフォルダ下に出力されるので、ワイルドカードで指定します。

このジョブを実行すると、ビルドの結果に成果物が添付されます。
あとはこれからダウンロードすればOK…なのですが、いちいちJenkinsから
ダウンロードするのも面倒なので
共有ドライブにコピーするジョブを追加します。

この処理には、 Copy Airtifact Plugin というプラグインを使用します。

新しくジョブを作成し、whl作成ジョブを「他プロジェクトの後にビルド」に指定します。

CopyArtifactを入れると、「他プロジェクトから成果物をコピー」というビルドができるので
持ってきたいジョブ名を指定し、成果物を保存と同じ要領でコピー成果物を指定します。
最後にコピー先ディレクトリを指定します。
これは絶対パスで指定ができます。
※\\remi-synology\sdrv というのが、自分のネットワークドライブです※

以上を設定すると、
whlが作成されるとコピー先ディレクトリで指定したフォルダに自動でコピーされます。
ファイルのコピーは、元のパスを保ったまま行われますので、
上の例だと、
//remi-synology/sdrv/test/pythonProj/dist 下に whlがコピーされることになります。

ここまでやると、
GitBucketに対してPythonファイルをコミット→テスト→Whl作成→共有ドライブにリリース
までを自動で実行することができます。

なにこれすごい。

こんな感じで、やればやるほどできることが見えてきて
いろんなことを自動化してJenkinsにつっこめる!!!ゆめがひろがりんぐ!!
となりました。

もっとはやくやればよかった…

これ以外に、Spinxの自動ビルドやらSVNとの連動などを試してみましたが
Jenkinsという枠組みがある分、いろいろと視覚化できてとても便利になりました。

しばらくはGitと連動してのあれこれや、パイプラインやら
Jenkinsのプラグインやら、いろいろ調べてみようと思います。

Jenkinsはいいぞ!!

追記。

BuildPipelineのビューを作ると、複数連続したJobを見やすくできる模様。

↑で作ったジョブを、BuildPipelineで表示するとこうなります。

ジョブの実行をすると、今どこを実行しているのかわかります。
スクリプトでパイプラインを書く方が、今風の使い方っぽいですが
こちらはこちらで簡単に作れるので良いですね。

便利なJenkinsプラグインたくさんあるんだろうなぁ…

コメントを残す

メールアドレスが公開されることはありません。

*