adachin.meというポートフォリオを公開しているのですが、コードはGithubで管理しており、毎回修正するたびにローカルでmasterマージして、サーバーログインしてシェルスクリプトで git pull をやっていたのですが、あまりにも面倒だし時代遅れのため、今回CircleCIを使ってmasterマージされたら自動でサーバーへSSHしてコードをデプロイするように高速で作ってみました。まずは流れ的なものを説明したいと思います。


■構成

  1. ブルリクでmasterマージする
  2. CircleCIのWorkFlowでTriggerが動く
  3. サーバーにSSHからのdeploy.sh(以下)が叩かれる
  4. コードがgit cloneされる

※前提としてサーバー上にはgit cloneできるように鍵の設定をしてください

このサーバーは adachin.meblog.adachin.me の2つのサイトをバーチャルホスト(DigitalOcean)で動かしており、H2O 2.2.6 , PHP 7.4.3Ubuntu 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

  • adachin.me/deploy.sh

workflowsfilters の記述によって、masterブランチ以外ではデプロイのJobが実行されないようにしました。またOrbsを利用してSlack通知もしてみました。あとは実際にプルリク出してデプロイされるか確認してみましょう。

  • masterマージ

  • Deploy

おおお!デプロイされている!


■サーバー確認

差分なし!

slackにも通知キタ。


■まとめ

これでようやく手動がなくなったぜ!ハマったのは

ということなので今回のCircleCIはCIチェックというよりCDのパイプライン(デプロイ)での使い方を紹介していきました。何でもできますので、みなさんも試してください!


カテゴリー: CircleCI

adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

0件のコメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください