はじめに
GitHub Actions を使って GitHub から ConoHa WING にデプロイしたいなと思って試してみたのでその忘備録です。誰かの役に立てばうれしいな。
この記事のリメイクを Zenn にて公開しました。そちらも併せてお読みいただければと思います。
ConoHa WING に GitHub Actions でデプロイしよう!
概要
今回の流れは
- ローカルからGitHubにpush
- GitHub Actions が検知して CI が走る
- 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:
のところをいじってあげれば動くはず。(あと秘密鍵登録もね)
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とかいろいろできるみたいです。
まだ情報が少ない感はありますが、ドキュメント見たりググったりしながら頑張ってみてください!