adachin.meというポートフォリオを公開しているのですが、コードはGithubで管理しており、毎回修正するたびにローカルでmasterマージして、サーバーログインしてシェルスクリプトで git pull
をやっていたのですが、あまりにも面倒だし時代遅れのため、今回CircleCIを使ってmasterマージされたら自動でサーバーへSSHしてコードをデプロイするように高速で作ってみました。まずは流れ的なものを説明したいと思います。
■構成
- ブルリクでmasterマージする
- CircleCIのWorkFlowでTriggerが動く
- サーバーにSSHからのdeploy.sh(以下)が叩かれる
- コードがgit cloneされる
※前提としてサーバー上にはgit cloneできるように鍵の設定をしてください
このサーバーは adachin.me
と blog.adachin.me
の2つのサイトをバーチャルホスト(DigitalOcean)で動かしており、H2O 2.2.6
, PHP 7.4.3
、 Ubuntu 18.04.3
で動作しています。
ちなみにWorkflowはCircleCI 2.0からJobについて実行条件や順序の依存関係などを指定できるようになりました。以下参考に。
https://circleci.com/docs/2.0/workflows/#overview
また、今回は2.1で実装してみましょう。
■準備
- Add Projects
今回対象となるリポジトリを追加します。
- SSH Permissions
https://circleci.com/docs/2.0/add-ssh-key/
SSHするサーバの秘密鍵を登録しましょう。ハッシュ化されている fingerprints
をメモります。
- Environment Variables
https://circleci.com/docs/ja/2.0/env-vars/
後に必要となってくるSSHのホスト名、ポート番号、ユーザ、SlackのWebhookを環境変数として登録します。
■Setting .circleci/config.yml
- adachin.me/.circleci/config.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
version: 2.1 orbs: slack: circleci/slack@3.4.2 jobs: deploy: machine: enabled: true steps: - add_ssh_keys: fingerprints: - "xxxxxxxxxxxxxxxxxxxxxxxxxxx" #上記メモったハッシュを指定 - run: ssh -p $SSH_PORT $SSH_USER@$SSH_HOST "/var/www/adachin.me/deploy.sh" - slack/status: fail_only: true mentions: 'here' failure_message: 'Error Deploy 🚨 \n :innocent: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' webhook: ${SLACK_WEBHOOK} - slack/notify: title: 👍 color: '#42f486' message: ' Deploy OK ✨ \n :grin: ${CIRCLE_USERNAME} :branch: ${CIRCLE_BRANCH}' workflows: version: 2.1 deploy: jobs: - deploy: filters: branches: only: master |
- adachin.me/deploy.sh
1 2 3 |
#!/bin/bash cd /var/www/adachin.me/ && git pull |
workflows
で filters
の記述によって、masterブランチ以外ではデプロイのJobが実行されないようにしました。またOrbsを利用してSlack通知もしてみました。あとは実際にプルリク出してデプロイされるか確認してみましょう。
- masterマージ
- Deploy
おおお!デプロイされている!
■サーバー確認
1 2 |
adachin-server01 $ ./deploy.sh Already up to date. |
差分なし!
slackにも通知キタ。
■まとめ
これでようやく手動がなくなったぜ!ハマったのは
これは酷い。秘密鍵が違っただけ。バカモン!!
— adachin👾SRE (@adachin0817) December 18, 2019
ということなので今回のCircleCIはCIチェックというよりCDのパイプライン(デプロイ)での使い方を紹介していきました。何でもできますので、みなさんも試してください!
0件のコメント