-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
テスト/デプロイを自動化したい #56
Comments
CI/CD周りでこのプロジェクトに合いそうだと個人的に感じた構成について記載します。 どちらのツールも利用経験者なので、内容聞きたいとか、設定作業自体も誰かに依頼したいとかありましたら、遠慮なく教えて下さい。 🙇 CICircleCIのようなサービスを使うのが合っていそうに感じました。 folkしたリポジトリからのコミット含む、どんなコミットに対してもテストを回すことができるため、PRの受取時にもテストされたコミットであることが保証され安心感があります。 CDAWS Codepipelineが、AWS Elasticbeanstalkとの相性が良さそうに感じました。(私自身職場でも利用している構成です) |
私もCircle CIとかGithub Actions & AWS Codepipelineがいいかなと思ってました。 AWS CodepipelineならAWS ECRへのpushをキーにデプロイとかできますし。 切り戻しのjobをどうフックさせるかとかが肝になりそうですね。 現状は、AWS Elasticbeanstalkに直接デプロイしている感じですよね。出来れば、CI/CDするなら、コンテナにしてテストされた資源をそのままデプロイするのがベストかなと思いました。その方が、厳密にテストを通ったと言えるので。
|
CIについて:今は Github Actions が楽なので、そちらで行きたいです! |
構築頑張ります。NDAの件、承知しました。 電子契約だとありがたいです。クラウドサインとか(自社製品を押してるわけではないです。笑) |
Github Actionsも最近は、機能が充実してきましたからね。 AWSのリソースは、Cloud Formationで作るとコード管理できて楽なので、その方向でやりたいです。ECRとか、ほぼなんでも作れるので。 |
@komtaki ありがとうございます! |
@halsk
承知しました。一旦、ふんわりこの分担でいきましょう。ただ、私はElasticBeanstalkにそこまで詳しくないので、Cloud Formationで基礎的な部分を作るので、適宜レビューしてもらう感じで。 あとは、現状、Dockerイメージは公式のイメージを使っています。ですが、イメージサイズが大きいので、セキュリティ的にもslimとかにして圧縮した方がいいと思います。途中まで作っているので、引き続き私がやろうと思います。 Github Actionsのワークフローは、こんなイメージでしょうか
あとは、デプロイタイミングですかね?
|
deployのタイミングではRuboCopは動かさなくて良さそうです。基本的にはlintなので、RSpecによるテストが通っていれば動作は問題ないかと思います(動作に関係ない、空行の有無みたいな違いでデプロイに失敗するのは体験がよろしくない気がするので…)。 |
諸々考えていただきありがとうございます!
はい、承知しました!
#67 ですね。ありがとうございます!
大体僕も同じイメージです。
この要件、決めたいですね。
あとGithub ActionsについてはもしGithubの権限いただければ、早速CIだけでも先に作っていきたいので権限付与のタイミングもご検討よろしくおねがいします。 |
ありがとうございます! |
仮で、ECRのレポジトリを作成しました。現状、Tagベースでガンガンpushする印象はなかったので、ライフサイクルは設定してません。 Cloud Foramtionのテンプレートは後で、このレポジトリ?にあげます。 ECR URL |
このIssue、まだ終わっていないと思うので、再オープンします。 |
GithubActionのCIの件、着手遅くなっていてすみません 🙏 |
すみません。ざっくりデプロイのGithubActions作っちゃいました。:bow: そちらは大体できそうなのですが、肝心のstaging(テスト)環境のElastic Beanstalkの構築に少々手こずりそうです。 |
テストについては、現状のrails-test.ymlでのテストはGitHub上のubuntu-latestの汎用的なActionベースで動かしているため、コンテナを使うのであればその環境でも動かして問題ないかどうか確認した方がよいのでは? という気持ちもあるのでした。 でも現状のDockerfileだとtest環境のbundle installはしないんですよね。コンテナを使ったビルド・デプロイパイプラインって最近はどういう対応にするのがいいんでしょうか?(あくまで軽量化を優先 vs あくまでtestとproductionで同一のイメージにこだわる) |
testとかだと、bundle installしたライブラリをDockerにmountして使うのがいいのかなと思ってます。 毎回Buildすると、実行速度が遅くなるので、Dockerfileに変更がなければ、latestとかで使い回すのがいい気がします。現状latestタグはないので、一旦stsgingタグでしょうか。:thinking: |
だいぶ時間が空いてしまいましたが、タイミングを見てElastic beanstalkのCNAME SWAPを使ってdockerコンテナにプラットフォームごと本番も切り替えたいです。そしたら現在のgiithubのジョブをいじるだけで、github上からデプロイできるようになります。 手順は下記のような感じでやれば、ダウンタイム無で切り替えられます。 https://dev.classmethod.jp/articles/beanstalk-cname-swap/ もしstagingだけで発現するエラーとかあれば、コンテナを調整するのでご教授いただけると助かります。:bow: |
@ayuki-joto 上記の流れで、対応しても問題ないでしょうか? |
@komtaki |
@komtaki |
対応ありがとうございます。 正常に切り替わっていることを確認しました。ただちょっとCPU使用率が前よりも高い気がします。以前のアプリとログを見比べてみたんですが、特に怪しい箇所は見当たらず。:sweat_drops: 杞憂かもしれませんが、awsからリソース面からもう少し調べてみます。私はnewrelic見れないので、newrelicからパフォーマンス観点で確認をお願いできますか? |
@ayuki-joto 一旦、旧環境で動いているので確認できたので、問題はないですかね? |
@komtaki |
queueがsecret_key_baseなど環境固有値に依存していなければ、queueを積む環境と、queueの処理を消化する環境が分かれてる気がします。queueはアプリでredisにつまれるんですよね?ruby自体&sidekiqの処理にあまり詳しくないので、はっきりと明言はできないのですが。 新環境では、おそらく動いてないですが、旧環境では sidekiqを設定しているのはここなのですが、見落としてました。:sweat_drops: 調整自体は、2,3日でできると思います。 |
codeforjapanとか、demoサイトで試してみたいのですが、どういう操作したらキューが積まれるかわかりますか? |
@komtaki なるほど!僕も確認漏れていましたすみません...
こちらぱっと思いつくのがメール処理くらいなのですが最近そこも怪しいのではないかという話がでてたりするので一旦確認します |
確認ありがとうございます。確かに、mailersというのが入ってますね。 メールが全部キューで送付されているなら、事前にcodeforjapanドメインで動かした時に、メールちゃんときました。 そしたら、queueを積む環境と、queueの処理を消化する環境が分かれてるだけで障害にはなってないので、戻さなくて大丈夫な気がします。修正対応は急ぎますが。:sweat_drops: |
productionのActiveJobは全部sidekiqに任せるような形になっているようです! 一旦どれかのインスタンスで、 |
確認ありがとうございます。 🙇
個人的には、切り分けは出来てると思ってました。はっきり新環境で積まれたキューが、旧環境でキューが消化されているログが出てるので。ちなみにどのあたりが不安な感じでしょうか? docker環境では出来ないので、新環境ではなく別のインスタンスを立てるってことですよね?
結局、修正が終わるまで旧環境を消さなければ問題ないだけなので。修正は出来次第連絡します。:+1: |
すみません。この認識が抜け落ちていました。 |
私の説明が下手ですみません。:sweat_drops: 修正は急ぎます。:bow: |
いえいえ! 修正お手数おかけしますが、よろしくお願い致します! |
だいたいPRで来たのですが、railsのところでつまってます。rubyほぼ触ったことないので 💦 stagingでメール送付される処理をしたとき、sidekiqがSMTPのlocalhost:25を見に行ってします。 環境変数として、SMTP_ADDRESS等は設定しました。Docker内でecho $SMTP_ADDRESSしたときに、正常にドメインが返ってきます。 mailerの初期化このあたり? https://github.com/codeforjapan/decidim-cfj/blob/develop/config/environments/production.rb#L83 https://github.com/codeforjapan/decidim-cfj/blob/develop/config/secrets.yml#L70 べたで記載されている587ポートではなく25ポートが参照されているので、railsのconfig/secrest.ymlがよまれてないように見えます。 アドバイス頂けると助かります。:bow: |
@komtaki こちらまだ起こっている現象でしょうか? 一旦もろもろ検証したいのでマージしてstagingで触ってみるとかでしょうか...? |
それと、PRのこちらの件
こちらについても並行して検討しております!ありがとうございます! |
残念ながら、まだ解決しておりません。かなり頑張っているのですが。:sweat_drops: rails 用とsidekiq用で、コンテナを2つに分けました。イメージ、環境変数は同じものを使用しています。 sidekiqのログには、production起動したと記述があるのですが、ホストやポートがデフォルトのままでaction mailerの設定がされない状態です。 sidekiq用のコンテナ内で、rails c -e productionして、ActionMailerで関数呼ぶとメールが送れます。なのでsidekiqの問題だと思うのですが、完全にはまってます。 |
MRのECSのあたりは、優先度低いですし余談なのであまり気にしないでください。 たしかにMRレビューしてもらって、問題がなければ、stagingで見てもらったほうが早そうです。お手好きの際にお願いします。:bow: |
おそらくシステム上の環境変数が、sidekiqプロセス上で上手く読めてない気がしています。RAIL_ENVが見えず、railsは開発者モードで起動している?とはいえ、Redisには繋がってるので、REDIS_URLは見えてるんですよね。。 |
原因がわかりました!!! 組織ごとにsmtpの設定が出来るんですね。それにlocalhost 25で設定が入っていたからでした。おそらくfakerでデータを作成した時に自動で設定されたのだと思います。設定を消したらちゃんと送付されました。:sweat_drops: どうりで、自分のMRのミスを探しても見つからないわけだ。。。 レビューと本番反映をお願いします。 |
@komtaki |
レビュー&マージありがとうございます。 staging確認と問題なければ本番反映をお願いします。 |
少しこちら調べてみました。 時折decidimのアプリの中で結構でかい/tmp/diffy-20210620***みたいなファイル2つに対してdiffを取るプロセスが実行され、IOに負荷がかかりCPUの大半を食ってますね。 🤔 ファイルの中身はHTMLぽい?設定変更した時とかに実行されるかんじでしょうか。 New RelicのAPMを入れている認識なのですが、これなんでしょうか?私はnew relicのアカウントを持っておらず。 💦 |
リリースありがとうございます。sidekiqも動いており、メールも送られているので大丈夫そうですね。 1日経ったので、旧環境を1台にスケールダウンしました。タイミングを見て環境も削除します。 |
手順通り旧環境を削除しました。特に問題はなさそうです。 何かあれば連絡をください。これで本イシューは終了ですかね? |
@komtaki リリース遅くなり申し訳ありません!
こちらについては現在調査中なのですが、各ディベートを編集した際に生成されるバージョン管理機能の方で、負荷が高まりCPU使用率が跳ね上がる現象を確認しています!
問題ないと思っています!ありがとうございます! |
改善詳細 / Details of Improvement
期待する見せ方・挙動 / Expected behavior
対象インスタンス / Instances
The text was updated successfully, but these errors were encountered: