Pocket

以下のように、今までCircleCIECS/Fargateでのステージングデプロイfilters branchesdevelopブランチに対してマージを出していました。それに本番反映するためにdevelopブランチをmasterブランチに対してプルリクマージを出すというgit flowで運用していました。(なかなかの手間が…)

※今回はWordPress

[CircleCI][AWS][WordPress]OrbsをつかってECR/ECS/Fargateにデプロイする

これにより、気楽にステージング環境にデプロイすることができず、開発スピードも遅くなり、逆にしくじって元に戻すのが大変ということもあるので、今回はgithub flowAPI経由でデプロイを試してみました。


■API Reference

https://circleci.com/docs/ja/2.0/api-intro/

https://circleci.com/docs/api/v2/#circleci-api

ローカルからcurlAPIを指定すればジョブに対してデプロイができます。もちろんオプションでブランチ名を指定することも可能。以下デプロイフローが変わります。

  • API経由でのデプロイ構成図

masterマージはそのまま本番反映したいのでそのままで良き。ステージングはfilters branchesの指定がなくなります。これによってpushしたブランチ名を指定してサクッとステージング環境へデプロイが可能になるわけですね(シェルスクリプト)。実際コードを見てみましょう。


■CircleCI

https://circleci.com/docs/ja/2.0/pipeline-parameters/

https://circleci.com/docs/ja/2.0/configuration-reference/#when-%E3%82%B9%E3%83%86%E3%83%83%E3%83%97-version-21-%E3%81%8C%E5%BF%85%E9%A0%88

  • Make Personal API Tokens

まずはCircleCIのダッシュボードから左下のプロフィール画面をクリックすると以下のようにPersonal API Tokensがあるので発行しましょう。

  • config.yml

6行目に新しく parameters を追加しましたが、特定のパラメーターの値でパイプラインをトリガーすることができます。なのでWorkflowを任意で実行するためのフラグとして、今回はdeploy_wordpress_stgと名付けました。

51行目からfilters branchesを削除して、 pipeline.parameters という変数を指定することで、curlで指定したtrueが代入されます。これによってステージングへのデプロイは特定のブランチに対していくらpushしても、デプロイされないようにwhenで条件分岐をしています。

  • stg-deploy.sh

stg-deploy.shはブランチ名である引数を指定して発動するように作ってみました。


■やってみる

今回はtest-deployというブランチ名を引数指定して叩いてみましたが!見事にデプロイされました!masterマージもちゃんと本番反映されていたのでOK。

ブランチ名をmasterにすると本番とステージングがmasterブランチでデプロイされます。

ちなみにWebからTrigger Pipelineを使ってパラメーターを追加すればデプロイできます。

https://circleci.com/ja/changelog/#%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E6%89%8B%E5%8B%95%E5%AE%9F%E8%A1%8C%E3%83%9C%E3%82%BF%E3%83%B3


■まとめ

素晴らしい!これで気楽にステージ環境へデプロイすることができました。意外と簡単だった。curlで結構ハマったけど。というわけで、次はSlackのワークフローで実行できるように実装してみよう!!これは作り込みだな。

  • 追記

Ciがあった場合CIの部分もデプロイ時に実行されてしまうので、以下のように予め以下シェル内でfalseを定義するといいですね。

  • stg-deploy.sh

  • config.yml

Pocket

カテゴリー: AWSCircleCI

adachin

1989年生まれのSRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。好きなツールはAnsible,Terraform,CircleCIで、ECS/Fargateでのインフラ構築を得意とする。副業では数社サーバー保守とベンチャー企業のインフラコンサルティングやMENTAで未経験者にインフラのコーチングを実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、GCPでのGKE/Kubernetes保守などを担当している。

0件のコメント

コメントを残す

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