JenkinsをDockerコンテナで構築しようと思い、GitHubのプライベートプロジェクトからチェックアウトしてくる過程でちょっと手こずったのでメモ。
環境
- ホストOS:Ubuntu 14.04
手順
- JenkinsのオフィシャルイメージをDocker Hubからpull
- コンテナにssh keyを生成して格納
- 2の処理を元にimageを作成
- 3で作成したimageからJenkinsを起動
Jenkinsイメージの取得
Docker Hubにオフィシャルのイメージがあるので今回はそれを使うことにする。
https://registry.hub.docker.com/_/jenkins/
$ sudo docker pull jenkins ...省略 $ sudo docker images jenkins latest d89693226e95 2 weeks ago 670.8 MB
SSHキーの作成
GitHubに対してJenkinsからコードをチェックアウトするにはGitHubに対してSSHキーの登録が必要なので、https://help.github.com/articles/generating-ssh-keys を参考に作業を行う。
コンテナの起動
$ sudo docker run -t -i jenkins /bin/bash
SSHキーの作成
jenkins@0213dffe4304:/$ cd /var/lib/jenkins jenkins@0213dffe4304:/var/lib/jenkins$ ssh-keygen -t rsa -C "your.address@hoge.com" Generating public/private rsa key pair. Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): Created directory '/var/lib/jenkins/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /var/lib/jenkins/.ssh/id_rsa. Your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub. The key fingerprint is: ...省略
ssh-agent への秘密鍵の追加
ssh-addする時の秘密鍵のパスがGitHubのページのものとは異なるので注意。
$ eval "$(ssh-agent -s)" $ ssh-add /var/lib/jenkins/.ssh/id_rsa
SSHキーをGitHubに登録
公開鍵の内容をGitHubに登録する。pbcopyコマンドが無いのでcatで標準出力したものをコピーしてGitHubに登録する。
$ cat /var/lib/jenkins/.ssh/id_rsa.pub
確認
最後に接続確認。成功したらexitして処理を抜ける。
$ ssh -T git@github.com The authenticity of host 'github.com (207.97.227.239)' can't be established. # RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. # Are you sure you want to continue connecting (yes/no)? Hi username! You've successfully authenticated, but GitHub does not # provide shell access.
イメージの作成
SSHキーを登録したのでそのコンテナを元にイメージを作る。直前の操作状況をps -lで確認。hungry_hooverという名前のコンテナが作成されている。
sudo docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0213dffe4304 jenkins:latest "/bin/bash" 28 minutes ago Exited (1) 16 seconds ago hungry_hoover
$ sudo docker commit -m "Added ssh key" -a "Your Name" hungry_hoover yourname/jenkins $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE yourname/jenkins latest 536ba4d0ed1e 12 seconds ago 670.8 MB
Jenkins起動
コマンドの確認
作成したイメージを引数無しで起動するとJenkinsではなくbashが起動してしまうので、jenkinsコマンドを確認する。docker inspect でjenkinsがデフォルトで実行しようとしていたShellを確認。
$ sudo docker inspect -f "{{.ContainerConfig.Cmd}}" jenkins [/bin/sh -c #(nop) CMD [/usr/local/bin/jenkins.sh]]
起動
sudo docker run --name home_jenkins -p 8080:8080 -d -v /var/jenkins_home yourname/jenkins /usr/local/bin/jenkins.sh