投稿日:
2018年3月15日
最終更新日:
【全自動雑用おいたん】Githubへのpushを受け取ってJenkinsのJobを実行してみよう
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
目次
Jenkinsで自動化
毎回同じ作業をするのがつらたん。。。
システム開発等をしていると、Githubにソースをpushまたはmergeしたタイミングで共通の処理を行いたい、というケースが出てくると思います。
ソースをビルドしたり特定のディレクトリに移動したり、Slackに通知を飛ばしたり…etc
そんな時にJenkinsを用いれば共通作業を自動化することが可能です。
Jenkins?
JenkinsとはCIツールの一つです。
CIツールとは、Continuous Integration Tool(継続的インテグレーションツール)という意味の略で、オープンソースのソフトウェアです。
継続的インテグレーションツール?
また小難しい単語が出てきましたね。orz
継続的インテグレーションとは、システム開発において、ソースのビルドやユニットテストを都度繰り返し行なうことによって、システムの問題を早期発見し、開発の効率化・品質向上に繋げるための手法の事を指します。
今回はこの作業をJenkinsというソフトウェアを利用することで自動化を図ることが可能になります。
今回は、Githubのpush操作をJenkins側で認識し、特定のジョブを実行する、という部分までの手順をご紹介致します。
手順
前提
- Git関連のJenkinsプラグインインストール済み(Git, Github)
- JenkinsユーザーのSSHキーは設定して接続確認済み
Jenkins側の設定
まずはJenkins側の設定を行いましょう。
GithubからのWebhookで実行したいJobを選択します。
次にソースコード管理セクションにて、以下の作業を行い、認証情報を新たに設定するので追加>Jenkinsを選択します。
- Gitにチェックを入れる
- 対象のリポジトリを入力
- ビルドするブランチを指定
- ビルドするブランチを指定
- リポジトリをチェックアウトするディレクトリを指定
認証情報の追加ダイアログが表示されたら、以下の項目の入力を行った上で追加ボタンをクリックします。
- 種類をSSHユーザー名と秘密鍵
- スコープをシステム
- ユーザーをSSHキーを作成したユーザー名
- 秘密鍵をJenkinsマスター上のファイルからにチェックを入れ、サーバー上の秘密鍵までのパスを入力
そうすると、上記で登録したユーザー名の認証情報が選択された状態になります。
次にさらに下部のGitHub hook trigger for GITScm pollingにチェックを入れ、サンプルとしてシェルスクリプトの欄に以下のコマンドを入力して保存ボタンをクリックしましょう。
1 |
echo 'Update Success.'
|
Github側の設定
次にGithub側でJenkinsへのWebhook通信の設定を行いましょう。
Webhookを行いたいリポジトリのページを開き、Settings>Webhooks>Add webhookボタンをクリックします。
※リポジトリに対して管理者権限が無いとSettingsメニューが出ません
Payload URLは以下を追記してください。
1 |
http://{Jenkinsサーバー}/github-webhook/
|
Content typeはapplication/jsonを指定して他はデフォルトのままでAdd webhookボタンをクリックします。
サーバー側の設定
最後にAWSのEC2等を利用していて、セキュリティグループでIP制限をかけている場合は、Githubからのアクセスを許可する必要があります。
コチラにアクセスし、hooksとなっている部分のIPを全て許可しましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
{
"verifiable_password_authentication": true,
"github_services_sha": "46d8ca660a3023125e6581aa8c6b912c61fdcb34",
"hooks": [
"192.30.252.0/22", //追加
"185.199.108.0/22" //追加
],
"git": [
"192.30.252.0/22",
"185.199.108.0/22",
"13.229.188.59/32",
"13.250.177.223/32",
"18.194.104.89/32",
"18.195.85.27/32",
"35.159.8.160/32",
"52.74.223.119/32"
],
"pages": [
"192.30.252.153/32",
"192.30.252.154/32"
],
"importer": [
"54.87.5.173",
"54.166.52.62",
"23.20.92.3"
]
}
|
スポンサーリンク
336×280
確認
では、実際にpushを行ってJobが実行されるか確認してみましょう。
まずはGithubにpushをしてみます。
1
2
3
4
5
6
|
git push origin master
Counting objects: 1, done.
Writing objects: 100% (1/1), 198 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/xxxxxx/yyyyyy.git
xxxxxxx..xxxxxxx master -> master
|
お、、、
おぉ〜!!!正常にpush操作を検知してJenkinsのJobが実行されましたね♪
Github側のWebhookの履歴にも成功が追加されています。
終わりに
やや設定が複雑ですが、最初に設定さえしてしまえば後々とても幸せになります。
JenkinsはCIツールとしてとても普及していて、他にも様々なサービス連携を設定する事が出来てとても便利なので、ぜひ使いこなせるようになりましょう。