GitHub Actions で ConoHa WING にデプロイしてみた


はじめに

GitHub Actions を使って GitHub から ConoHa WING にデプロイしたいなと思って試してみたのでその忘備録です。誰かの役に立てばうれしいな。

この記事のリメイクを Zenn にて公開しました。そちらも併せてお読みいただければと思います。
ConoHa WING に GitHub Actions でデプロイしよう!

概要

今回の流れは
1. ローカルからGitHubにpush
2. GitHub Actions が検知して CI が走る
3. ConoHa WING にlftpでデプロイ
という感じでいけるんじゃないかなと。
ConoHa WING は rsync が使えないようなので lftp を使うことにします。

2020.12.19 注
現在では ConoHa WING でも rsync が使用可能 となっています。
ConoHa WING に GitHub Actions でデプロイしよう!

ConoHa WING 視点では
- ConoHa Wing で自動デプロイして快適に WordPress テーマを更新しよう! - Qiita (@ezaki さん)
GitHub Actions 視点では
- GitHub Actions で快適なデプロイを実現する(rsync・laravel) | 自主的20%るぅる
を参考にしています。

ではいってみよー!

まずは完成形を

動けばいいって人はこれをコピペしてenv:のところをいじってあげれば動くはず。(あと秘密鍵登録もね)

deploy.yml
name: Deploy to ConoHa WING

on:
  push:
    branches: 
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1
      - name: install lftp
        run: sudo apt-get update && sudo apt-get install -y lftp
      - name: prepare .ssh dir
        run: mkdir -p .ssh && chmod 700 .ssh
      - name: ssh key generate
        run: echo "$SSH_PRIVATE_KEY" > .ssh/id_rsa && chmod 600 .ssh/id_rsa
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
      - name: deploy with lftp
        run: lftp -e "set net:max-retries 1; set sftp:connect-program \"ssh -a -x -p $SSH_PORT -i .ssh/id_rsa -o StrictHostKeyChecking=no\"; connect sftp://$SSH_USER:@$SSH_HOST; mirror -eR -x .git -x .ssh ./ $SSH_DIR; quit"
        env:
          SSH_PORT: 8022
          SSH_USER: c5949433
          SSH_HOST: www51.conoha.ne.jp
          SSH_DIR:  ~/public_html/deploy-test.conohawing.com/blog/wp-content/themes/deploy-test

初学者なりに解説!

workflowの名前

name: Deploy to ConoHa WING

これは自分でわかりやすい名前を入れればいいと思います。一覧に出てくるので、workflowがたくさんあるときはしっかりと付けたほうがいいかも。

トリガー

on:
  push:
    branches: 
      - master
  • push: : pushされたとき
  • branches: : ブランチ指定
  • - master : masterブランチ

最後が箇条書きなことから分かる通り、ブランチはたくさん指定できます。
トリガーにはいろいろ種類があるのでたくさん試してみると楽しそう。

実際にするお仕事

jobs:
  deploy:
    runs-on: ubuntu-latest

jobs: : ここからが実際にするお仕事の記述になります。
deploy: : 好きなidをつけることができます。これもわかり易い名前でOK。
runs-on: ubuntu-latest : ここではUbuntuを指定しています。Linuxが一番安いので基本的にはUbuntuでいいんじゃないかなと。WindowsとmacOSもあるようです。

そして本題の仕事内容です。

    steps:
      - uses: actions/checkout@v1
      - name: install lftp
        run: sudo apt-get update && sudo apt-get install -y lftp
      - name: prepare .ssh dir
        run: mkdir -p .ssh && chmod 700 .ssh
      - name: ssh key generate
        run: echo "$SSH_PRIVATE_KEY" > .ssh/id_rsa && chmod 600 .ssh/id_rsa
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
      - name: deploy with lftp
        run: lftp -e "set net:max-retries 1; set sftp:connect-program \"ssh -a -x -p $SSH_PORT -i .ssh/id_rsa -o StrictHostKeyChecking=no\"; connect sftp://$SSH_USER:@$SSH_HOST; mirror -eR -x .git -x .ssh ./ $SSH_DIR; quit"
        env:
          SSH_PORT: 8022
          SSH_USER: c5949433
          SSH_HOST: www51.conoha.ne.jp
          SSH_DIR:  ~/public_html/deploy-test.conohawing.com/blog/wp-content/themes/deploy-test

なんかいっぱいありますね…1つずつ見ていきましょう。
steps: 以下にuses:あるいはname:run:の組み合わせで記述していきます。
- uses: : workflowの再利用ができる。
- name: : ログに出てくる名前。わかりやすいものならなんでもよい。
- run: : 実行内容。ここに書いたコマンドが実際に動くみたい。

リポジトリをcheckout

      - uses: actions/checkout@v1

actions/checkout というworkflowを再利用しています。他にもいろいろあるようです。

lftpをインストール

      - name: install lftp
        run: sudo apt-get update && sudo apt-get install -y lftp

先述したとおり、rsyncが使えないのでlftpをインストールしています。
参考サイトそのまんまなのですが、sudoが抜けてることに気づかなくてハマった。

.sshディレクトリを作る

      - name: prepare .ssh dir
        run: mkdir -p .ssh && chmod 700 .ssh

正直何も考えずにそのへんに秘密鍵を置いといてもいい気はしますが、一応ちゃんとディレクトリを作ります。

秘密鍵の配置

      - name: ssh key generate
        run: echo "$SSH_PRIVATE_KEY" > .ssh/id_rsa && chmod 600 .ssh/id_rsa
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}

env:は、環境変数の定義をするものです。ここではSSH_PRIVATE_KEY${{ secrets.SSH_PRIVATE_KEY }}を割り当てています。
リポジトリのSecretsに秘密鍵を登録するのを忘れずに!

lftpでdeploy

      - name: deploy with lftp
        run: lftp -e "set net:max-retries 1; set sftp:connect-program \"ssh -a -x -p $SSH_PORT -i .ssh/id_rsa -o StrictHostKeyChecking=no\"; connect sftp://$SSH_USER:@$SSH_HOST; mirror -eR -x .git -x .ssh ./ $SSH_DIR; quit"
        env:
          SSH_PORT: 8022
          SSH_USER: c5949433
          SSH_HOST: www51.conoha.ne.jp
          SSH_DIR:  ~/public_html/deploy-test.conohawing.com/blog/wp-content/themes/deploy-test

長いですね。細かい解説は参考サイトを見てもらうとして、コピペで環境変数だけ書き換えても動きます。
ポートとかユーザーとかはConoHaの管理画面から確認してください。

できたー!!

実際に動くとこんな感じになります。実行中にログが流れるの楽しいw

今回はdeployしましたが、他にもbuildとかtestとかいろいろできるみたいです。
まだ情報が少ない感はありますが、ドキュメント見たりググったりしながら頑張ってみてください!