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
45
WebView認証連携
mahiguch
0
66
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
98
公式部活動技術書典部の活動紹介
mahiguch
0
110
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1k
PHPからgoへの移行で分かったこと
mahiguch
2
4k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.2k
gRPCを使ったメディアサービス2
mahiguch
0
210
LIMIAでのBigQuery活用事例
mahiguch
0
200
Other Decks in Programming
See All in Programming
Claude Code + Container Use と Cursor で作る ローカル並列開発環境のススメ / ccc local dev
kaelaela
11
6.5k
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
740
CDK引数設計道場100本ノック
badmintoncryer
1
240
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
190
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
20k
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
650
生成AI時代のコンポーネントライブラリの作り方
touyou
1
250
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
21
8.7k
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
1
6.5k
Hack Claude Code with Claude Code
choplin
5
2.4k
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
450
AIともっと楽するE2Eテスト
myohei
7
2.9k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
6
320
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Gamification - CAS2011
davidbonilla
81
5.4k
Writing Fast Ruby
sferik
628
62k
Into the Great Unknown - MozCon
thekraken
40
1.9k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Code Review Best Practice
trishagee
69
19k
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をコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!