求めるJenkinsおじさん
- Jenkins >= 2.0
基盤
- AWS(使い慣れているので/ public ip あればなんでもいいです)
AWS上の構成
EC2(publicにさらしたくない) + ELB(SSL終端させたい、ここでポート変換) の構成でいく。
ELBのSecurity Groupは自分家(自拠点)とGitHubのhookだけ許可する様に設定GitHubのIPはhttps://api.github.com/metaで調べて開けておく。
Jenkins
サクッと作りたいのでdockerを使う。
packageからinstallとかでもいいが、jenkinsのアップデートする時に面倒なのでdockerでold versionとnew versionの2つ立てて置いて切り替える時にポートだけ変更してアクセスするようにしたかった。(ALBのtarget groupとか使ってもいいけど面倒なので)
officialのdocker imageがある様なのでそこから作成する。
$ docker pull jenkins
$ docker run -p 8080:8080 -p 50000:50000 jenkins
8080がJenkinsのweb用のポートで、50000がslaveとの連携用のポート
alpineベースのimageもある様でそちらを使用する場合は、
jenkins:alpine
起動させる時にJekinsのhome directoryとか(jobなど)をhost側に出して置きたい場合は、
$ docker run -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins
起動する時にadminのパスワードが流れるのでそれをコピーしておく。
------省略------
*************************************************************
*************************************************************
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx <= これをコピー
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************
------省略------
ログイン後におすすめpluginのinstallが選択されているのでとりあえずinstall
imageがでかくなるのが嫌な場合は個別でpluginをinstall。
Jenkinsの管理 >> Pluginの管理 >> 利用可能 から GitHub Pluginを選択してinstall
ここまできておもむろにhttps://elb.endpoint/scriptを開いて
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
を実行する。結果をコピってplugins.txt
として保存する。
- あとで使いまーす。
Job
とりあえず、Free Styleのprojectを作成して、
- General
- GitHub project
- Project url
- GitHub project
- ソースコード管理
- Git (通知だけしたい場合でもここを指定する必要あり)
- リポジトリURL
- 認証情報
- Git (通知だけしたい場合でもここを指定する必要あり)
- ビルド・トリガ
- GitHub hook trigger for GITScm polling (旧: Build when a change is pushed to GitHub)
あとは好きに設定しておく。
GitHub
Settings >> integration & services >> serviciesのadd services >> Jenkins (GitHub plugin)
を選択
Jenkins hook url にhttps://elb.endpoint/github-webhook/ (例にしたがって)
を入れてactivate。
上の方にtest用のボタンがあるのでそれを押すこともできるが実行されちゃうので気をつけましょう
連携
連携自体はこれで終わりです。
余談 Jenkins Update する時
/var/jenkins_homeにjobやconfigなどの情報があるので引き抜いて置きます。
FROM jenkins:alpine
VOLUME /var/jenkins_home
COPY plugins.txt /usr/share/jenkins/plugins.txt
USER root
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
USER jenkins
こんな感じして/var/jenkins_homeを新しいおじさんに食わせてあげるとサクッと新しいversionのjenkinsができちゃいます。(imageを移してもいいです。)