やっとJenkinsを導入しました。CI/CDをどんどん進めるぞ!
ってことで、ローカル開発が完成してGithubにpushしたタイミングで自動でテスト環境でgit pullをするように設定を行いました。
結構手こずったのでメモしておきます。
全体構成図
- ローカル環境でgit commit後、git pushでGitHubにアップロード
- GitHub Actionを利用してテストサーバ上のJenkinsのジョブをAPI経由で起動
- Jenkinsのジョブの中でpullと同時にユニットテスト、composer updateやnpm buildを実行
Jenkinsのインストール
Jenkinsのインストールは以下を参考に行いました。
何も問題なくインストールが完了し、Jenkinsが起動
GitHubへのアカウント登録とリポジトリ作成
既にアカウント登録とリポジトリ作成は完了していたので今回は省略
JenkinsでGitHub情報の設定とジョブの登録
以下のページを参考にJenkinsのジョブを登録。
GitHubのリポジトリを設定しようとすると'jenkins host key verification failed'が起こってしまいました。原因はknown_hostsファイルにgithub.comの情報が書き込まれていないことが原因のようです。いくつか対応策はあるみたいですが、私は以下の方法で対応しました。
- 「Jenkinsの管理」>「グローバルセキュリティの設定」をクリック
- 画面の一番下までスクロールし、「Git Host Key Verification Configuration」の「Host Key Verification Strategy」で「Accept First Connection」を設定
ビルドスクリプトとしてJenkins画面で直接スクリプトを記述するとgit pullの際に.git/index.lockファイル作成時にPermissionエラーが出たのでスクリプトファイルをテストサーバ上において、Jenkinsの画面ではそのファイルを起動するコマンドだけ記載しました。
GitHubとJenkinsのWebhook連携
これが結構手こずりました。ネットで検索すると多くの方がやり方を投稿してくれているのですが、それぞれ設定方法が微妙に異なり、色々と試しましたがなかなかうまくいかず。。。
最終的には検索した時点で一番最新記事だった以下のページを参考にしたところやっとうまく行きました。
注意すべきポイントは以下かと思います。
- JenkinsのGitプラグインを使用(私の場合、インストール時点で入っていました)
- Jenkins側のビルドトリガには「GitHub hook trigger for GITscm polling」を利用
- GitHub上で「Integrations & services」という項目はないので「Webhook」から設定
- PayloadURLには[jenkinsのURL]/github-webhook/を記述(最後の/を忘れないように)
これでやっとやりたいことが全てうまくできるようになりました👍