Fuelphpのテストをdocker-composeとJenkinsで実行
by
gree_tech
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
FuelphpのテストをJenkinsと docker-composeで実行
Slide 2
Slide 2 text
Masahiro Higuchi / 樋口雅拓 ● グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 ● 機械学習のエンジニアですが、iOS, Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 ● https://limia.jp/ ● https://arine.jp/ ● https://aumo.jp/ ● https://www.mine-3m.com/mine/
Slide 3
Slide 3 text
LIMIAとは? ● メディアサービス ● Android, iOS, Web ● 記事一覧を表示し、タップすると記事 詳細を閲覧できる。 ● AWS:90%、GCP:10%。 ● PHP/EC2 → Go/ECS移行中
Slide 4
Slide 4 text
Fuelphpが。。。 ● 最近バージョンアップの話を聞かない ● Githubを確認すると、最後のcommitが2018年5月 ● Laravelに行く? いや、コンテナ考えたらgolangでしょ! —> golangに移行開始したばかりですが、さっそくJenkinsでハマったことに ついて話します。
Slide 5
Slide 5 text
移行したシステムについて
Slide 6
Slide 6 text
開発環境 ● まず、他との繋がりが薄いRecommendEngineをgolangで書いてコンテナ を作った。 ● php, MySQL, memcached, DynamoDB Local, elasticmqもコンテナにし て、開発環境をdocker-composeで作った。 ● 本番環境はgolangのみECSで動かし、phpはEC2で。
Slide 7
Slide 7 text
本番環境 ユーザが記事の一覧表示をしようとすると、 EC2で動く fuel PHP ApplicationにHTTPリクエストが飛ぶ。PHP Appは、ECSで動くgolang Serviceにgrpcで問い合わ せる。PHP Appはgolangからの応答に後処理を行 なってユーザに返す。
Slide 8
Slide 8 text
APIの結合テスト
Slide 9
Slide 9 text
テストについて ● UnitTestだけでなく、APIの結合テストもFuel phpのテストを書いていた。 ● レスポンスのIFをかなり網羅していたので、リファクタのときには重要。 ● GitのDevelop branchにmergeされるとJenkinsでテストが走り、成功したら結合テスト環境に配布してい た。 —> 実装完了してmergeしたらテストが失敗。何故!?
Slide 10
Slide 10 text
テストが失敗した理由 ● Jenkins Slaveは、EC2にphpをインストールしてテストを実行していた。 ● 当然だがgolangコンテナが無いので、接続失敗でテストがコケる。 ● Jenkins Slave専用にECS Service建てるのは、もったいないよねー。 —> 開発環境用に作ったdocker-composeをJenkins Slaveの中に立ててしまおう!
Slide 11
Slide 11 text
第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に書くことで解決!
Slide 12
Slide 12 text
第2の関門: コンテナの建て方 ● 1つ目のテストは成功したが、別のテストで失敗。 ● コンテナが立てっぱなしだったので、ポートを取れなかった。 ● 80/tcp —> 8080/tcp(dockerのNginxが動くport)に透過させていたのが原因。 —> テストの開始時にdocker-compose up、終了時にdocker-compose downすることで解決。
Slide 13
Slide 13 text
第3の関門: コンテナの更新 ● しばらくうまく動いていたが、突然テストが失敗するように。 ● Jenkins Slaveでコンテナの更新を行なっていなかった。 ● テスト開始前にdocker-compose pullしたが上手くいかない。あれ? —> ecr loginしてなかったので、docker repos.にアクセスできていなかった。 loginすることで解決。
Slide 14
Slide 14 text
まとめ ● 一部のサービスをgolangで書き直してみた。 ● 今後PHPの部分はBFFっぽくなっていく予定。 ● PHPをコンテナ化する必要があるが、知見が無いので、もし経験があれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!