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のテストをdocker-composeとJenkinsで実行
Search
gree_tech
PRO
June 27, 2019
Technology
760
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Fuelphpのテストをdocker-composeとJenkinsで実行
「第139回 PHP勉強会@東京」で発表された資料です。
https://phpstudy.doorkeeper.jp/events/93038
gree_tech
PRO
June 27, 2019
More Decks by gree_tech
See All by gree_tech
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
5k
マネジメントに役立つ Google Cloud
gree_tech
PRO
0
72
今この時代に技術とどう向き合うべきか
gree_tech
PRO
3
2.8k
生成AIを開発組織にインストールするために: REALITYにおけるガバナンス・技術・文化へのアプローチ
gree_tech
PRO
0
470
安く・手軽に・現場発 既存資産を生かすSlack×AI検索Botの作り方
gree_tech
PRO
0
470
生成AIを安心して活用するために──「情報セキュリティガイドライン」策定とポイント
gree_tech
PRO
1
2.4k
あうもんと学ぶGenAIOps
gree_tech
PRO
0
580
MVP開発における生成AIの活用と導入事例
gree_tech
PRO
0
610
機械学習・生成AIが拓く事業価値創出の最前線
gree_tech
PRO
0
500
Other Decks in Technology
See All in Technology
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
6
1.3k
現場との対話から始める “作る前に問い直す”業務改善
mochico50
2
290
OPENLOGI Company Profile for engineer
hr01
1
75k
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
2
290
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
330
Aurora MySQL 8.4リリース! Rubyistが備えること / what-rubyist-should-prepare-for-aurora-mysql-8-4
fkmy
0
1.2k
書籍セキュアAPIについて
riiimparm
0
320
Type-safe IaC for Dart
coborinai
0
180
AWS環境のセキュリティ不安を解消した企業事例 ~よくある課題と対策を一挙公開~
asanoharuki
0
160
AI Agent を本番環境へ―― Microsoft Foundry × Azure Serverless で作る Enterprise-Ready な基盤
shibayan
PRO
1
270
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
7
3.2k
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
2
860
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
A Tale of Four Properties
chriscoyier
163
24k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
840
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
190
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Faster Mobile Websites
deanohume
310
32k
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をコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!