SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
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をコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。
ありがとうございました。懇親会でぜひ声をかけてください!

Más contenido relacionado

La actualidad más candente

LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化
LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化
LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化gree_tech
 
公式部活動技術書典部の活動紹介
公式部活動技術書典部の活動紹介公式部活動技術書典部の活動紹介
公式部活動技術書典部の活動紹介gree_tech
 
#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さま
#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さま#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さま
#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さまDaiki Hirozawa
 
[社内向け]Titanium勉強会
[社内向け]Titanium勉強会[社内向け]Titanium勉強会
[社内向け]Titanium勉強会Rei Matsushita
 
Realtime database、Clean Architectureを組み合わせた導入事例
Realtime database、Clean Architectureを組み合わせた導入事例Realtime database、Clean Architectureを組み合わせた導入事例
Realtime database、Clean Architectureを組み合わせた導入事例Tatsuya Kikuchi
 
【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料AAsolution
 
20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】
20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】
20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】Madoka Chiyoda
 
Matcherの紹介@ITリーダー育成キャンプ
Matcherの紹介@ITリーダー育成キャンプMatcherの紹介@ITリーダー育成キャンプ
Matcherの紹介@ITリーダー育成キャンプnoriyaz
 
Ruby会議08 倉貫発表資料
Ruby会議08 倉貫発表資料Ruby会議08 倉貫発表資料
Ruby会議08 倉貫発表資料Yoshihito Kuranuki
 
How are AsakusaSatellite growing with mzp
How are AsakusaSatellite growing with mzpHow are AsakusaSatellite growing with mzp
How are AsakusaSatellite growing with mzpRyo Suetsugu
 
マルチテナントに対応したシラサギグループウェアのご紹介
マルチテナントに対応したシラサギグループウェアのご紹介マルチテナントに対応したシラサギグループウェアのご紹介
マルチテナントに対応したシラサギグループウェアのご紹介Shinji Tanimoto
 
月間6アプリリリースの開発現場でのQiita:Team活用法
月間6アプリリリースの開発現場でのQiita:Team活用法月間6アプリリリースの開発現場でのQiita:Team活用法
月間6アプリリリースの開発現場でのQiita:Team活用法Naoya Mouri
 
生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumi
生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumi生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumi
生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumiYahoo!デベロッパーネットワーク
 
ビッグデータを活用したSEO対策:検索エンジン最適化とは
ビッグデータを活用したSEO対策:検索エンジン最適化とはビッグデータを活用したSEO対策:検索エンジン最適化とは
ビッグデータを活用したSEO対策:検索エンジン最適化とは新潟コンサルタント横田秀珠
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUISYoshitaka Seo
 

La actualidad más candente (15)

LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化
LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化
LIMIAアプリにおける行動履歴を用いたコンテンツ配信の最適化
 
公式部活動技術書典部の活動紹介
公式部活動技術書典部の活動紹介公式部活動技術書典部の活動紹介
公式部活動技術書典部の活動紹介
 
#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さま
#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さま#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さま
#インスタサミット 「アカウント運用の基礎」アライドアーキテクツ株式会社 藤田さま
 
[社内向け]Titanium勉強会
[社内向け]Titanium勉強会[社内向け]Titanium勉強会
[社内向け]Titanium勉強会
 
Realtime database、Clean Architectureを組み合わせた導入事例
Realtime database、Clean Architectureを組み合わせた導入事例Realtime database、Clean Architectureを組み合わせた導入事例
Realtime database、Clean Architectureを組み合わせた導入事例
 
【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料【サンプル】 Instagram開設マニュアルサービス資料
【サンプル】 Instagram開設マニュアルサービス資料
 
20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】
20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】
20171109_Mobile Center を使ったモバイルアプリ開発ライフサイクル自動化【Mobile DevOps】
 
Matcherの紹介@ITリーダー育成キャンプ
Matcherの紹介@ITリーダー育成キャンプMatcherの紹介@ITリーダー育成キャンプ
Matcherの紹介@ITリーダー育成キャンプ
 
Ruby会議08 倉貫発表資料
Ruby会議08 倉貫発表資料Ruby会議08 倉貫発表資料
Ruby会議08 倉貫発表資料
 
How are AsakusaSatellite growing with mzp
How are AsakusaSatellite growing with mzpHow are AsakusaSatellite growing with mzp
How are AsakusaSatellite growing with mzp
 
マルチテナントに対応したシラサギグループウェアのご紹介
マルチテナントに対応したシラサギグループウェアのご紹介マルチテナントに対応したシラサギグループウェアのご紹介
マルチテナントに対応したシラサギグループウェアのご紹介
 
月間6アプリリリースの開発現場でのQiita:Team活用法
月間6アプリリリースの開発現場でのQiita:Team活用法月間6アプリリリースの開発現場でのQiita:Team活用法
月間6アプリリリースの開発現場でのQiita:Team活用法
 
生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumi
生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumi生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumi
生涯エンジニアというマインドを活かしてYahoo!天気アプリを成長させたPM手法 #devsumi
 
ビッグデータを活用したSEO対策:検索エンジン最適化とは
ビッグデータを活用したSEO対策:検索エンジン最適化とはビッグデータを活用したSEO対策:検索エンジン最適化とは
ビッグデータを活用したSEO対策:検索エンジン最適化とは
 
Bot Builder V4 SDK + QnA Maker / LUIS
Bot Builder V4 SDK  + QnA Maker / LUISBot Builder V4 SDK  + QnA Maker / LUIS
Bot Builder V4 SDK + QnA Maker / LUIS
 

Más de gree_tech

アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜gree_tech
 
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介gree_tech
 
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表gree_tech
 
アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~gree_tech
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化gree_tech
 
Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介gree_tech
 
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介gree_tech
 
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現についてSINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現についてgree_tech
 
海外展開と負荷試験
海外展開と負荷試験海外展開と負荷試験
海外展開と負荷試験gree_tech
 
翻訳QAでのテスト自動化の取り組み
翻訳QAでのテスト自動化の取り組み翻訳QAでのテスト自動化の取り組み
翻訳QAでのテスト自動化の取り組みgree_tech
 
組み込み開発のテストとゲーム開発のテストの違い
組み込み開発のテストとゲーム開発のテストの違い組み込み開発のテストとゲーム開発のテストの違い
組み込み開発のテストとゲーム開発のテストの違いgree_tech
 
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
サーバーフレームワークに潜んでる脆弱性検知ツール紹介サーバーフレームワークに潜んでる脆弱性検知ツール紹介
サーバーフレームワークに潜んでる脆弱性検知ツール紹介gree_tech
 
データエンジニアとアナリストチーム兼務になった件について
データエンジニアとアナリストチーム兼務になった件についてデータエンジニアとアナリストチーム兼務になった件について
データエンジニアとアナリストチーム兼務になった件についてgree_tech
 
シェアドサービスとしてのデータテクノロジー
シェアドサービスとしてのデータテクノロジーシェアドサービスとしてのデータテクノロジー
シェアドサービスとしてのデータテクノロジーgree_tech
 
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-gree_tech
 
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話gree_tech
 
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)gree_tech
 
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行gree_tech
 
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜gree_tech
 
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)gree_tech
 

Más de gree_tech (20)

アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
 
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
 
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
 
アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~アプリ起動時間高速化 ~推測するな、計測せよ~
アプリ起動時間高速化 ~推測するな、計測せよ~
 
長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
 
Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介
 
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
 
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現についてSINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
 
海外展開と負荷試験
海外展開と負荷試験海外展開と負荷試験
海外展開と負荷試験
 
翻訳QAでのテスト自動化の取り組み
翻訳QAでのテスト自動化の取り組み翻訳QAでのテスト自動化の取り組み
翻訳QAでのテスト自動化の取り組み
 
組み込み開発のテストとゲーム開発のテストの違い
組み込み開発のテストとゲーム開発のテストの違い組み込み開発のテストとゲーム開発のテストの違い
組み込み開発のテストとゲーム開発のテストの違い
 
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
サーバーフレームワークに潜んでる脆弱性検知ツール紹介サーバーフレームワークに潜んでる脆弱性検知ツール紹介
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
 
データエンジニアとアナリストチーム兼務になった件について
データエンジニアとアナリストチーム兼務になった件についてデータエンジニアとアナリストチーム兼務になった件について
データエンジニアとアナリストチーム兼務になった件について
 
シェアドサービスとしてのデータテクノロジー
シェアドサービスとしてのデータテクノロジーシェアドサービスとしてのデータテクノロジー
シェアドサービスとしてのデータテクノロジー
 
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
 
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
 
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
 
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
 
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
 
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
 

Fuelphpのテストをdocker-composeとJenkinsで実行