0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Githubのプライベートリポジトリと、EC2上のJenkinsとを連携させ、特定のブランチでの変更をJenkinsに検知させる方法

Posted at

はじめに

本記事では、表題の通りGithubのプライベートリポジトリと、EC2上のJenkinsとを連携させ、特定のブランチでの変更をJenkinsに検知させる方法について記す
Jenkinsが特定のブランチでの変更を検知する方法は、以下の二通りがある

  • Jenkinsが、特定ブランチでの変更があったかどうかをポーリングをする方法
  • 特定ブランチで変更があった際に、GithubがJenkinsに都度通知する方法

本記事では、 後者の「特定ブランチで変更があった際に、GithubがJenkinsに都度通知する方法」について解説する

Jenkinsのインストール

こちらの記事を参考にした。自分はUbuntu20.04を使用しているが、この記事にある方法で問題なくインストールできた
Ubuntu18.04にJenkinsをインストールする
公式のドキュメントはこちら
※Jenkinsをインストールする前に、Javaをインストールする必要があるので注意

JenkinsにGit Pluignを入れる

自分はJenkinsにおすすめされたプラグインを入れたのだが、その際に今回の設定に必要なプラグインがインストールされていた
おそらく今回の設定に必要なプラグインはGit Pluginで、もしインストールされていなければインストールする必要がある(もし他に必要なプラグインがあれば、誰か教えて頂けると嬉しいです)
インストール手順は以下の通り

Jenkinsの管理から、プラグインの管理をクリック
image.png

検索して、もし見つかればチェックしてインストール
image.png

インストール済みであれば、こちらに表示される
image.png

公開鍵・秘密鍵の作成

Githubで公開鍵の登録、およびJenkinsで秘密鍵の登録をする必要があるため、秘密鍵と公開鍵を作成する
まずは、EC2にルートユーザでログインし、ログイン後Jenkinsユーザに切り替える

sudo su jenkins

鍵を生成する方法が書かれた記事は山ほどあるので、あえてここでは書かず、オススメのリンクだけ貼っておく
結果的に、Jenkinsユーザの~/.sshに公開鍵と秘密鍵がある状態になればok
鍵を生成する方法は、以下のサイトが分かりやすいかも
Linuxコマンド【 ssh-keygen 】認証用の鍵を生成 - Linux入門 - Webkaru
公開鍵暗号の方式については、以下の記事が分かりやすいかも
2017年版 SSH公開鍵認証で使用する秘密鍵ペアの作り方

Jenkinsの設定

JenkinsではJobを作成し、同時に秘密鍵を登録する

まず、前準備として、認証トークンを作成する(今回はadminユーザを使用)
Jenkinsの管理からユーザーの管理をクリック
image.png

adminをクリック
image.png

設定をクリック
image.png

APIトークンという項目で、Add new Tokenをクリックし、トークン名を入力したのち、Generateをクリック
image.png

生成するとこんな感じの画面になる
image.png

この11ac5c....b3128の文字列はこのタイミングしか表示されないので注意
確実にコピーしておく

続いて、新規ジョブを作成する
新規ジョブ作成をクリック
image.png

適当なJobの名前を入力し、「フリースタイル・プロジェクトのビルド」を選択
image.png
GitHub projectにチェックを入れ、Project urlを入力
image.png

ビルドのパラメータ化にチェックを入れ、パラメータの追加をクリックし、文字列を選択し、名前の欄にpayloadと入力
image.png

ソースコード管理でgitを選択し、リポジトリURLを入力
image.png

リポジトリURLは、以下の図の真ん中らへんにある、git@から始まるやつ
image.png

認証情報の追加を選択し、Jenkinsをクリック
image.png

種類にはSSHユーザ名と秘密鍵を選択し、ユーザ名をJenkinsにし、先ほど作成した秘密鍵を直接入力する
image.png

ブランチ指定子には、例えばmasterブランチをビルドする場合は、上の画像のように*/masterと入力すれば良い
続いて、ビルド・トリガの項目で、「リモートからビルドを選択」
認証トークンの欄には、先ほど作成した認証トークンの名前を入力する
後は、GitHub hook trigger for GITScm pollingにチェックを入れる
image.png

ビルドのところは、いずれ追記します
今回は保存をクリック
image.png

Jenkinsのジョブ作成は以上です、お疲れさまでした

Githubの設定

Githubに先ほど作成した公開鍵を登録し、その後Webhookの設定をする

Githubで公開鍵を登録

先ほど作成した公開鍵を、リポジトリの作成者の設定画面に行き、SSH and GPG keysからNew SSH keyをクリック
image.png
Titleに適当な名前を入力し、Keyのところには先ほど作成した公開鍵を入力する
image.png

Webhookの設定

リポジトリの画面から、Setting->Webhookを選択し、Add webhookをクリック
image.png

そうるすと、以下の画面が表示される
image.png

Payload URLの欄には
http://<ユーザ名>:<トークン>@<JenkinsのIPアドレスとポート>/job/<ジョブの名前>/buildWithParameters?token=<トークン名>
を入力する
今回、例えばジョブの名前がtest-jobだとすると、
http://admin:11ac5c....b3128@x.x.x.x:XXXX/job/test-job/buildWithParameters?token=aa
のようになる
Content typeはapplicatoin/x-www-form-urlencodedを選択
そして、Add webhookをクリック

以下のサイトをめちゃくちゃ参考にしましたm(_ _)m
【Jenkins】Webhookを設定してみる - ぴよ丸水産
JenkinsとGitHubのWebhook連携の整理 │ Aiming 開発者ブログ

もしうまくいかない場合

以下の記事に書かれているように、EC2のセキュリティグループの設定を変更する必要があるかもしれない
Jenkins で GitHub のイベントを受けてゴニョゴニョする準備 - Qiita
https://api.github.com/meta の"hooks"に記載されたIPを許可すればうまくいくかも
ポート番号については、以下のページを参考にすると良い
ネットワークポート - GitHub Doc

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?