コーポレートサイトを自動デプロイするようにした

January 13, 2015 by Yudai Suzuki

このコーポレートサイトはCIにwercker使ってて、この間自動デプロイするようにした。

http://www.exvisionz.jp/

関連記事

ざっくり概要

  • デプロイツールはcapistano3を使用
    • デプロイ先のipはdeploy/production.rbaws-sdkを使って取得
    • プライベートリポジトリからのソースの取得はSSH Agent Forwadingで行っている
  • デプロイ開始時、終了時にslackに通知
  • masterのテストが通ったらでwercker.ymlに記述したデプロイタスクが動くようにしてある
  • 要は、werckerがCI用に立てたUbuntuのインスタンスからcapistranoを叩くようにすればいい

事前準備

  • 必要な情報をPIPELINEに登録しておく
    • 秘密鍵
      • プライベートリポジトリアクセス用
      • ec2
    • AWSのアクセスキー
      • cap production deployする時に環境変数に入れて叩くようにしてる
        • AWS_ACCESS_KEY_ID
        • AWS_SECRET_ACCESS_KEY
    • slackのwebhook url

デプロイタスク

wercker.ymlの中身を見た方が早いと思うので載せる

deploy:
    steps:
        - script:
            name: make .ssh directory
            code: mkdir -p "$HOME/.ssh/corporate_site"
        - create-file:
            name: write deploy ssh key
            filename: $HOME/.ssh/corporate_site/deploy.rsa
            overwrite: true
            hide-from-log: true
            content: $DEPLOY_KEY
        - script:
            name: set permissions for deploy ssh key
            code: chmod 0400 $HOME/.ssh/corporate_site/deploy.rsa
        - create-file:
            name: write aws ssh key
            filename: $HOME/.ssh/corporate_site/corporate_site.kp.pem
            overwrite: true
            hide-from-log: true
            content: $AWS_PEM
        - script:
            name: set permissions for aws ssh key
            code: chmod 0400 $HOME/.ssh/corporate_site/corporate_site.kp.pem
        - script:
            name: add ssh agent
            code: |
              eval `ssh-agent`
              ssh-add $HOME/.ssh/corporate_site/deploy.rsa              
        - script:
            name: deploy
            code: AWS_ACCESS_KEY_ID=$KEY_ID AWS_SECRET_ACCESS_KEY=$KEY_SECRET bundle exec cap production deploy BRANCH=master

解説

  1. make .ssh directory
    • $HOME/.ssh/corporate_siteディレクトリを作成
    • 秘密鍵を置くディレクトリを作ってる
  2. write deploy ssh key
    • $HOME/.ssh/corporate_site/deploy.rsaというファイルを作成する
    • 内容は事前にPIPELINEで登録したDEPLOY_KEYを使用する
  3. set permissions for deploy ssh key
    • $HOME/.ssh/corporate_site/deploy.rsaのパーミッションを0400に変更
  4. write aws ssh key
    • $HOME/.ssh/corporate_site/corporate_site.kp.pemというファイルを作成する
    • 内容は事前にPIPELINEで登録したAWS_PEMを使用する
  5. set permissions for aws ssh key
    • $HOME/.ssh/corporate_site/corporate_site.kp.pemのパーミッションを0400に変更
  6. add ssh agent
    • ssh-agentを起動し、$HOME/.ssh/corporate_site/deploy.rsaを登録する
  7. deploy
    • デプロイタスクの実行
    • 環境変数AWS_ACCESS_KEY_ID``AWS_SECRET_ACCESS_KEYには事前にPIPELINEで登録した値を使用している

ハマった所

ssh-agent起動してなくてちょっとハマった。capistranoのログにはこんなエラーが吐かれる。

Permission denied (publickey).
fatal: Could not read from remote repository.

© 2017 | Onigra | Powerd by Hucore theme & Hugo