2017/06/13

GitHub に push された時に Docker 上の Jenkins から SSH 越しでコマンドを実行する

長いタイトルですがやりたい事は以下です。

  • Jenkins 経由でデプロイ
  • デプロイするタイミングは GitHub の master が更新された時
  • Jenkins は Docker で起動しておく
  • デプロイに使用するコマンドは SSH 経由で本番サーバに適用

さて、タイトル通りややこしい状態なので記事もだいぶ読み辛いものになりそうです。


環境

  • CentOS Linux release 7.0.1406 (Core) 
  • Docker version 1.12.6, build 1398f24/1.12.6
  • Jenkins 2.46.3


Docker でやること(Jenkins を起動する)

  • docker run -itd --privileged --name kaban -v /hoge/fuga:/var/jenkins_home -P jenkins
    • これで Jenkins が立ち上がります
    • --name で名前を付けておくと楽です。とりあえずかばんちゃんです。
    • Jenkins はデータの永続化のためにボリュームを使っています
    • 適当なディレクトリを /var/jenkins_home にマウントしてください
    • Jenkins は uid 1000 なので chown 1000 -R <dir> などをしておくと良いです
    • もしくは chmod で適切な permission を与えてください
    • -P でポートマッピングを適当にやってもらいます。
  • docker exec -it kaban cat /var/jenkins_home/secrets/initialAdminPassword
    • 後で Jenkins を起動した際に要求される初期パスワードです。


Jenkins でやること(初期設定)

  • docker ps をして、8080 がどのポートに割り当てられているか確認します。
  • ブラウザから Jenkins にアクセスします (http://localhost:32769 とか)
  • まず初期パスワードを使って Jenkins を起動します
  • 適当に Install Suggested Plugin を選択します(これに Github Plugin とか入ってたので)
  • 管理者ユーザを作ります
  • Manage Jenkins > Manage Plugins から Available > Publish over SSH を選択します
    • Publish over SSH プラグインを使ってデプロイします
  • Install without restart で Publish over SSH を入れます
  • Configure System > Publish over SSH でデプロイ用サーバに SSH できる設定をします
    • SSH Servers > Add でサーバを追加します
    • Name や Hostname や Username 、 Key か Password を設定します
  • これで土台ができました。


GitHub でやること

  • デプロイ対象のプロジェクトのリポジトリページに行きます
  • Settings > Hooks&Services > Add Service から Manage Jenkins(Github Plugin) を入れます
    • Git Plugin もありますが今回は GitHub Plugin なので間違えないように
  • Jenkins hook URL に Jenkins の URL を指定します
    • http://192.168.0.1:32769/github-webhook/ とかです
  • これで push された際に Jenkins へ通知がいきます。


Jenkins でやること(プロジェクトの設定)

  • New Project から Freestyle Project を作ります
  • GitHub Project に check をいれます
    • なので最初から GitHub Project で作っても良いかも?
    • Repository URL は GitHub の Project URL を指定してください
    • Branch Specifier は */master で良いです。 master に変更があった時のみにデプロイなので
  • Build Triggers で GitHub hook trigger for GITScm polling に check を入れます
  • Build で Send files or execute commands over SSH を指定します。
    • SSH Server は先程 Configure で追加したデプロイサーバを指定します。
    • Transfars: Exec command で SSH 後に実行したいコマンドを指定します。
  • これで完了です。 GitHub の master が更新されると自動で SSH 経由でコマンドが発行されます。


長い道のりでしたがこんな感じで。

0 件のコメント:

コメントを投稿