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.6k
FuelPHPのテストをJenkinsとdocker-composeで実行
PHP勉強会でのLT資料です。
mahiguch
June 26, 2019
Tweet
Share
More Decks by mahiguch
See All by mahiguch
爆速で成長する おでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
mahiguch
0
54
WebView認証連携
mahiguch
0
68
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
100
公式部活動技術書典部の活動紹介
mahiguch
0
120
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1k
PHPからgoへの移行で分かったこと
mahiguch
2
4.1k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.2k
gRPCを使ったメディアサービス2
mahiguch
0
220
LIMIAでのBigQuery活用事例
mahiguch
0
210
Other Decks in Programming
See All in Programming
釣り地図SNSにおける有料機能の実装
nokonoko1203
0
200
オープンソースソフトウェアへの解像度🔬
utam0k
17
3.2k
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
1.9k
Pythonに漸進的に型をつける
nealle
1
140
Developer Joy - The New Paradigm
hollycummins
1
380
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
380
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
100
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
120
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
1.3k
data-viz-talk-cz-2025
lcolladotor
0
100
Software Architecture
hschwentner
6
2.4k
ALL CODE BASE ARE BELONG TO STUDY
uzulla
28
6.8k
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
Bash Introduction
62gerente
615
210k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
4 Signs Your Business is Dying
shpigford
186
22k
Designing for Performance
lara
610
69k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
The Invisible Side of Design
smashingmag
302
51k
The Cult of Friendly URLs
andyhume
79
6.6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Rails Girls Zürich Keynote
gr2m
95
14k
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をコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!