Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
FuelPHPのテストをJenkinsとdocker-composeで実行
Search
mahiguch
June 26, 2019
Programming
1.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FuelPHPのテストをJenkinsとdocker-composeで実行
PHP勉強会でのLT資料です。
mahiguch
June 26, 2019
More Decks by mahiguch
See All by mahiguch
爆速で成長する おでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
mahiguch
0
91
WebView認証連携
mahiguch
0
96
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
130
公式部活動技術書典部の活動紹介
mahiguch
0
140
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1.1k
PHPからgoへの移行で分かったこと
mahiguch
2
4.4k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.3k
gRPCを使ったメディアサービス2
mahiguch
0
260
LIMIAでのBigQuery活用事例
mahiguch
0
240
Other Decks in Programming
See All in Programming
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
1.5k
Seven New Principles of Software Engineering
yegor256
0
440
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
130
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
1
130
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
150
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
120
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
180
SODA - FACT BOOK(EN)
sodainc
1
200
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
270
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
1
270
Modernizing iOS Apps
seyfoyun
0
150
Featured
See All Featured
How to make the Groovebox
asonas
2
2.5k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
560
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
790
Everyday Curiosity
cassininazir
0
390
Code Review Best Practice
trishagee
74
20k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
エンジニアに許された特別な時間の終わり
watany
109
250k
Tell your own story through comics
letsgokoyo
1
1.1k
Chasing Engaging Ingredients in Design
codingconduct
0
390
What's in a price? How to price your products and services
michaelherold
247
13k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
680
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をコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!