Help us understand the problem. What is going on with this article?

GithubとJenkinsでCI

More than 5 years have passed since last update.

Jenkins 1.463
Jenkins Github plugin 1.5

GitlabよりGithubのがやっぱ使いやすい

今までGitlabとJenkinsでCIやってたのですが、
Gitlabはあんまり使われていなかったw

一部プロジェクトをGithub Organizationの非公開リポジトリで管理して、今まで通りCIやりましょうというお話。

Gitlab時代

ForkやPRという概念がなかった。
リポジトリはひとつで、ブランチ間のマージにMerge Requestという機能はあったけれど。

GitlabのWeb hookからJenkinsのURLを指定して、Jenkins Git pluginが受け取りビルドするという流れだった。

さあ、Github

Organizationに非公開の親リポジトリがあり、そこにメンバーがForkしたリポジトリがぶら下がる形。

OSSの開発と似たような感じだけど、非公開リポジトリなので当然外からは見えない。
(非公開リポジトリをForkしたら、メンバーのGithubアカウントがFreeアカウントでも非公開になるんだね!)

上記の構成で下記を実現する。

  • 親リポジトリのmasterにpushしたら、本番環境にデプロイされる。
  • 親リポジトリの開発ブランチにpushしたら、ステージング環境にデプロイされる。
  • 個々のリポジトリの開発ブランチにpushしたら、個々の専用のステージング環境にデプロイされる。

開発者毎にステージングがあるのがポイント。
開発者毎のステージングで問題がなければ、親リポジトリの開発ブランチへPRを投げる。

それを実現する過程で問題になった点/気になった点をいくつか。

セキュリティ対策

Githubにして問題になったのは、まず外部のネットワークということでセキュリティを気にしないといけなくなった。

ここでは割愛するけれど、Jenkinsの管理から権限をしっかり設定すべき。

Github plugin

これドキュメントがなさ過ぎるんだけど、要するに自分のgithubのid/passwordをJenkinsに入力すると自動でやってくれる。

これ楽だけど、気持ち悪い。。。

JenkinsからGithubへ繋ぐ時の鍵

鍵を作ってDeploy keysに貼っつけてもいいのだけど、そうすると複数リポジトリを持つときに困ったことになる。

今回、Github Organizationの親リポジトリだけでなく、個々のForkしたリポジトリからのデプロイもやるので、複数のリポジトリにJenkinsから繋げないといけない。

それを素直に実現しようとすると、以下のようになるんだけど、

Host production.github.com
  HostName github.com
  User git
  IdentityFile pem_for_production

Host user1.github.com
  HostName github.com
  User git
  IdentityFile pem_for_user1

こうすると、当然、Jenkinsの設定でもGitのリポジトリ名を

git@production.github.com:hogehoge/hogehoge

みたいに書かないといけない。

そうすると、Github pluginがGithubからのHookを違うものと認識してしまって動かない。。。
実装を考えると当然かと思うのだが。

なので、自分のSSH keysにJenkins用の鍵を追加してやらないといけない。。。
気持ち悪い。。。

デプロイ先からGithubに繋げるように

これは素直に

ssh-keygen -t rsa

していただいて、公開鍵をリポジトリ毎のDeploy keysに追加していただく。

分かりやすい。

ここらへんまでやると動く。

感想

個人のアカウントにJenkins用の鍵を追加するのは気持ち悪すぎるので、他の方法があれば採用したい。
(だって個人のリポジトリもJenkinsからgit cloneできちゃうわけだしね!!)

ただ、仕組みとしては最高に使いやすいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした