Fabric・GitHub・CircleCIを使ってWordPressのテーマをデプロイ : WordPress

Fabric・GitHub・CircleCIを使って、Wordpressのテーマをデプロイします。
今回は、テーマのみをデプロイする方法を記載します。


本記事では、FabricとCircleCIのデプロイの設定をメモしています。

GitHubとCircleCIを使ったデプロイ方法は、下記記事を参考にしてください。
» AWS EC2へGitHubとCircleCIを連携して自動でデプロイ: デプロイ

前提

  • GitHubのリポジトリでWordPressのテーマのみを管理
  • Ubuntu Server 16.04 LTS (HVM), SSD Volume Typeを選択して、インスタンスを作成
  • セキュリティグループで、HTTPを許可
  • ディレクトリ構造
    • DocumentRoot:/var/www/html/current
    • WordPressインストールディレクトリ:/var/www/html/current/wordpress

作業の流れ

  1. CircleCIでリポジトリのファイルを圧縮
  2. サーバーに、/var/www/html/releaseディレクトリが存在しなければ作成
  3. サーバーに、/var/www/html/release/yyyymmddhhmmssディレクトリを作成
  4. 圧縮ファイルをサーバーへ送信して、yyyymmddhhmmssディレクトリに解凍
  5. yyyymmddhhmmssから、/var/www/html/current/wordpress/wp-content/themes/テーマ名ディレクトリへシンボリックリンクを作成

ディレクトリ構成

テーマだけを、GitHubで管理していることを前提としています

|
|-- .circle/config
|...
|
|-- fabfile.py
|
|...
|
|-- index.php
|
|...
|
|-- style.css

.circle/config.yml

version: 2
jobs:
  deploy:
    docker:
      - image: circleci/python:2.7-jessie-browsers-legacy

    steps:
      - checkout
      - deploy:
          command: |
            sudo pip install fabric
            fab -f ./fabfile.py

workflows:
  version: 2
  deploy:
    jobs:
      - deploy:
          filters:
            branches:
              only: master

fabfile.py

from fabric import Connection 
import datetime
import subprocess

# configuration


env = {}
env['base_dir'] = '/var/www/html/release'
env['current_dir'] = env['base_dir'] + '/' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
env['themes_dir'] = '/var/www/html/current/wordpress/wp-content/themes'
env['theme_name'] = 'foo'
env['conn'] = Connection(host='203.0.113.0', user='ubuntu', port=22)

def prepare():
    subprocess.call(['tar', 'zcvf', env['theme_name'] + '.tar.gz', '.'])


def deploy():
    prepare()
    env['conn'].run("""
        if [ ! -e '{0}' ] ; then
            mkdir '{0}'
         else 
             : 
         fi
         """.format(env['base_dir']))
    env['conn'].run("mkdir '{0}'".format(env['current_dir']))
    env['conn'].put(env['theme_name'] + '.tar.gz', remote=env['current_dir'])
    env['conn'].run("cd '{0}'".format(env['current_dir']))
    env['conn'].run('tar -xzvf ' + env['current_dir'] + '/' + env['theme_name'] + '.tar.gz -C ' + env['current_dir'])
    env['conn'].run('rm ' + env['current_dir'] + '/' + env['theme_name'] + '.tar.gz')
    env['conn'].run("""
        if [ -e '{0}' ] ; then
            unlink '{0}'
         else 
             : 
         fi
         """.format(env['themes_dir'] + '/' + env['theme_name']))
    env['conn'].run("sudo ln -s '{0}' '{1}'".format(env['current_dir'], env['themes_dir'] + '/' + env['theme_name'])) 


deploy()

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。