節約プログラマー雑記

JenkinsでGitHub連携ジョブ

前書き

前回、Seleniumを利用して、ブラウザの自動テストをするところまで行いました。せっかくだから、Jenkinsのジョブの練習として構築するとともに、作ったテストスクリプトをGitHubからソースを取得して実行するようにしてみたいと思います。

1. Jenkinsの設定

今回実行するテストはPythonのスクリプトのため、Windowsのpythonコマンドで実行しようと思います。
そのため、Jenkinsからpythonコマンドが実行できるように、「Jenkinsの管理 > システムの設定」から、環境変数のPATHにPythonへのパスを下記のような形で登録します。

環境変数のPATHにPythonへのパスが登録できたら、のちのジョブにて、pythonコマンドが使えるようになります。

2. テストジョブ作成

pythonコマンドが利用できるようになったので、メニューバーの「新規ジョブの作成」からジョブを作っていきます。
今回は、「1. Githubからソースの取得」、「2. 取得したpythonスクリプトの実行」を目標として、進めていきます。

2-1. ジョブの作成

「新規ジョブの作成」をクリックすると、プロジェクトの名前とプロジェクトの種類を選択する画面が起動します。とりあえず、適当なプロジェクト名を記入、プロジェクトの種類は、「フリースタイルのプロジェクト」を選択します。

2-2. General

「新規ジョブの作成」が完了したら、下記のような画面で項目を入力していくことになりますので、まずはGeneralの項目を入力していきます。

説明の部分には、適宜、ジョブの内容を記載します。また必須ではないですが、GitHub projectにURLを登録することで、プロジェクトの画面から、GitHubのサイトに移動できるようになるので、今回は一応登録しました。

また、Generalの「高度な設定」をクリックし、カスタムワークスペースの項目をチェックして、実際にジョブが実行されるディレクトリを選択します。
この後、GitHubからソースを取得する際のディレクトリになります。 (本来、ここを入力しなくとも、実行できると思うのですが、logontypeをローカルシステムアカウントにしたからなのか、GitHubからソースをfetchする際に失敗しました。。。)

2-3. ソースコード管理

次は、GitHubからのソースを取得するための設定です。
入力内容は単純で、ソースコード管理の部分で「Git」を選択、対象のリポジトリURLと高度な設定でユーザー、パスワードを入力すればOKです。

ただ、注意が2点あり、一つは、GitHubの認証時にGUIを立ち上げないようにする必要がある点です。
Gitの設定として、基本、認証確認のためのダイアログが立ち上がる設定となっており、このためにジョブが終了しなくなります。そのため、管理者権限でコマンドプロンプトを起動して、git config --global credential.helper managerのコマンドを実行し、この設定を止めておく必要があります。

(参考:WindowsでGitBucketとJenkinsを連携させるときの注意点メモ

もう一つが、ビルドするブランチの設定です。Jenkinsのジョブの初期値が「master」となっていますが、自分のプロジェクトの対象のブランチ名に合わせて変更する必要があります。2021年以降GitHubでプロジェクトを作成したときに自動で作られるブランチは「main」になので、基本は「main」に変更することになります。
(Gitに慣れていればすぐに気付いたのかもしれませんが、Git初心者のため、1時間以上悩むはめになりました。。。)

2-4. ビルド

最後に、ビルドの部分にて、ソース取得後の処理を記述します。
今回は以前作成した「selenium_test.py」のスクリプトを実行したいので、「Windowsバッチコマンドの実行」を選択。ワークスペースに取得したソースがあるので、「%WORKSPACE%」でフォルダを選択して、バッチを実行します。

3.実行結果・感想

3-1. 実行結果

実際に構築したジョブを実行し、実行結果を左のメニューバーの実行履歴から確認します。 一番上の実行結果をクリックして、下の画面のようにステータスが青色の丸になっていれば、成功です。
(オレンジの場合は失敗で、コンソール出力にエラーメッセージが表示されるので、そこからエラー原因を調査します。)

jenkins_job07.png

3-2. 感想

簡単ですが、GitHubからソースを取得して、テストを実行するという基本的なJenkinsの用途を実現することができました。今回の作業は簡単だったので、タスクスケジューラでもできるようなレベルかもしれませんが、Jenkinsの基本を学ぶという点では良かったと思います。

今度はビルドするようなアプリを組んで、テスト実行ともう一段レベルアップできるようにしていきたいです。