さて、jenkinsのインストール&セキュリティ設定も終わったので、ついに自動デプロイの設定になります。

参考

実際に実行されるフローとしては
1. Bitbucket にコミット
2. Bitbucket から jenkins にPOSTでコミットされた事を通知
3. jenkins が Bitbucket から最新データを取得
4. 最新データを取得後、指定のディレクトリにファイルを自動でアップ

といった流れになるかと。。。
細かいことはGitHubとJenkins連動 自動デプロイ 開発環境設定編が詳しいかと。

1. Jenkinsの公開鍵を作成

[bash]
$ sudo usermod -d /var/lib/jenkins -s /bin/bash jenkins
$ cd /var/lib/jenkins
$ sudo -u jenkins ssh-keygen
[/bash]
これで鍵が生成される。

2. Bitbucketに公開鍵を登録

自動デプロイしたいレポジトリの設定画面(歯車のマーク)を開く。
んで、「デプロイ鍵」を選んで、「鍵を追加」をクリック。
Keyの所にさっき生成した公開鍵(/var/lib/jenkins/.ssh/id_rsa.pub)の内容をコピペ
Labelも適当に入力
で「鍵を追加」

3. Bitbucketでフックの設定

今度は設定画面の「フック」を選択。
で「Select a hook」に「POST」を選んで、「ホックを追加」
するとurlを入力する画面が開くので
[sourcecode]
(jenkinsのurl)/git/notifyCommit?url=git@bitbucket.org:xxx/zzz.git
[/sourcecode]
を入力

4. jenkins に git Plugin を追加

初期状態のままだとjenkinsでgitが使えないので、プラグインを追加
「Jenkinsの管理」 > 「プラグインの管理」 > 「利用可能」タブ
を選んで「git Plugin」にチェック。
で「ダウンロードして再起動後にインストール」
次の画面で出てくる「インストール完了後、ジョブがなければJenkinsを再起動する」のチェックを入れとくと勝手に再起動します。
また、ついでに「アップデート」タブのアップデートを全部アップデートしてしまいましょう。

5. jenkinsのjobの設定

ダッシュボード > 新規ジョブ作成

ジョブ名を適当に入力し、「フリースタイル・プロジェクトのビルド」を選択

「ソースコード管理」で「git」を選んで

「Repository URL」に「git@bitbucket.org:xxx/zzz.git」を入力

「Credentials」は「Add」で
KindにSSHユーザー名と秘密鍵
スコープに「システム」
ユーザー名に「jenkins」
で秘密化鍵をjenkinsのマスター上の~/.sshから
で「Add」

「ビルド・トリガ」で「SCMをポーリング」を選択。
スケジュールは空でok

「ビルド」で「シェルの実行」
rsync -vr –delete –exclude “.git/” /var/lib/jenkins/jobs/${JOB_NAME}/workspace/ (デプロイ先のパス)

で保存。

試しに「ビルド実行」してみて青い玉なら成功。
赤い玉ならエラー。

Console Outputにエラー内容がでます。

僕の場合は「Permission denied」になった。

一番簡単な解決策はデプロイ先のパスのユーザーをjenkinsにしてしまう事。
sudo chown -R jenkins (デプロイ先のパス)

でも、デプロイ先のパスはsftpで接続して編集したりしたいのでユーザーを変えたくない。
ので、sudoコマンドを実行&パスワードを聞かれないようにします。

[bash]
$ sudo visdo
[/bash]

[sourcecode title=”visdo”]
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
jenkins ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
jenkins ALL=(ALL) NOPASSWD:ALL
[/sourcecode]
こんな感じで
jenkins ALL=(ALL) ALL

jenkins ALL=(ALL) NOPASSWD:ALL
を追記。

で実行して見たら
「sudo: sorry, you must have a tty to run sudo」
とのエラー

今度は
[bash]
$ sudo visdo
[/bash]

[sourcecode title=”visdo”]
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
#
# Defaults requiretty
[/sourcecode]

Defaults requiretty
をコメントアウト

これで成功!

成功してたら試しにbitbucekのレポジトリにpushしてみてください。
そうするとデプロイされます。

これで完了!