Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FuelPHPのテストをJenkinsとdocker-composeで実行
Search
mahiguch
June 26, 2019
Programming
0
1.5k
FuelPHPのテストをJenkinsとdocker-composeで実行
PHP勉強会でのLT資料です。
mahiguch
June 26, 2019
Tweet
Share
More Decks by mahiguch
See All by mahiguch
爆速で成長する おでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
mahiguch
0
32
WebView認証連携
mahiguch
0
58
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
86
公式部活動技術書典部の活動紹介
mahiguch
0
98
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1k
PHPからgoへの移行で分かったこと
mahiguch
2
3.9k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.1k
gRPCを使ったメディアサービス2
mahiguch
0
190
LIMIAでのBigQuery活用事例
mahiguch
0
190
Other Decks in Programming
See All in Programming
Duke on CRaC with Jakarta EE
ivargrimstad
0
130
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
220
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1.1k
CDK開発におけるコーディング規約の運用
yamanashi_ren01
2
260
コードを読んで理解するko build
bells17
1
120
Boos Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
620
Honoとフロントエンドの 型安全性について
yodaka
7
1.5k
ML.NETで始める機械学習
ymd65536
0
240
AWS Step Functions は CDK で書こう!
konokenj
5
870
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
410
Learning Kotlin with detekt
inouehi
1
200
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
320
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1.1k
Gamification - CAS2011
davidbonilla
80
5.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
380
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
13
1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
134
33k
Music & Morning Musume
bryan
46
6.4k
Typedesign – Prime Four
hannesfritz
41
2.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Done Done
chrislema
182
16k
For a Future-Friendly Web
brad_frost
176
9.6k
Transcript
FuelphpのテストをJenkinsと docker-composeで実行
Masahiro Higuchi / 樋口雅拓 • グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 • 機械学習のエンジニアですが、iOS,
Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 • https://limia.jp/ • https://arine.jp/ • https://aumo.jp/ • https://www.mine-3m.com/mine/
LIMIAとは? • メディアサービス • Android, iOS, Web • 記事一覧を表示し、タップすると記事 詳細を閲覧できる。
• AWS:90%、GCP:10%。 • PHP/EC2 → Go/ECS移行中
Fuelphpが。。。 • 最近バージョンアップの話を聞かない • Githubを確認すると、最後のcommitが2018年5月 • Laravelに行く? いや、コンテナ考えたらgolangでしょ! —> golangに移行開始したばかりですが、さっそくJenkinsでハマったことに
ついて話します。
移行したシステムについて
開発環境 • まず、他との繋がりが薄いRecommendEngineをgolangで書いてコンテナ を作った。 • php, MySQL, memcached, DynamoDB Local,
elasticmqもコンテナにし て、開発環境をdocker-composeで作った。 • 本番環境はgolangのみECSで動かし、phpはEC2で。
本番環境 ユーザが記事の一覧表示をしようとすると、 EC2で動く fuel PHP ApplicationにHTTPリクエストが飛ぶ。PHP Appは、ECSで動くgolang Serviceにgrpcで問い合わ せる。PHP Appはgolangからの応答に後処理を行
なってユーザに返す。
APIの結合テスト
テストについて • UnitTestだけでなく、APIの結合テストもFuel phpのテストを書いていた。 • レスポンスのIFをかなり網羅していたので、リファクタのときには重要。 • GitのDevelop branchにmergeされるとJenkinsでテストが走り、成功したら結合テスト環境に配布してい た。
—> 実装完了してmergeしたらテストが失敗。何故!?
テストが失敗した理由 • Jenkins Slaveは、EC2にphpをインストールしてテストを実行していた。 • 当然だがgolangコンテナが無いので、接続失敗でテストがコケる。 • Jenkins Slave専用にECS Service建てるのは、もったいないよねー。
—> 開発環境用に作ったdocker-composeをJenkins Slaveの中に立ててしまおう!
第1の関門: git tokenの渡し方 Repository構成 • docker: docker-compose.ymlなど • app: PHPで書かれた本体
• api: golangで書かれたマイクロサービス これまでは、Jenkinsにgithubのtokenとrepository pathを登録しておくと、手元に展開されていた。 Repositoryが3つだとScriptの所でgit cloneを3行書く。—> Permission Denied... あれ? どうやってtoken渡そう。—> .netrcに書くことで解決!
第2の関門: コンテナの建て方 • 1つ目のテストは成功したが、別のテストで失敗。 • コンテナが立てっぱなしだったので、ポートを取れなかった。 • 80/tcp —> 8080/tcp(dockerのNginxが動くport)に透過させていたのが原因。
—> テストの開始時にdocker-compose up、終了時にdocker-compose downすることで解決。
第3の関門: コンテナの更新 • しばらくうまく動いていたが、突然テストが失敗するように。 • Jenkins Slaveでコンテナの更新を行なっていなかった。 • テスト開始前にdocker-compose pullしたが上手くいかない。あれ?
—> ecr loginしてなかったので、docker repos.にアクセスできていなかった。 loginすることで解決。
まとめ • 一部のサービスをgolangで書き直してみた。 • 今後PHPの部分はBFFっぽくなっていく予定。 • PHPをコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!